|
9 | 9 | "os" |
10 | 10 | "strings" |
11 | 11 | "sync" |
12 | | - "time" |
13 | 12 | ) |
14 | 13 |
|
15 | 14 | // Config controls interpreter execution bounds and enforcement modes. |
@@ -73,123 +72,7 @@ func NewEngine(cfg Config) (*Engine, error) { |
73 | 72 | registerCoreBuiltins(engine) |
74 | 73 | registerDataBuiltins(engine) |
75 | 74 | registerDurationBuiltins(engine) |
76 | | - engine.builtins["Time"] = NewObject(map[string]Value{ |
77 | | - "new": NewBuiltin("Time.new", func(exec *Execution, receiver Value, args []Value, kwargs map[string]Value, block Value) (Value, error) { |
78 | | - loc := time.Local |
79 | | - if zone, ok := kwargs["in"]; ok { |
80 | | - parsed, err := parseLocation(zone) |
81 | | - if err != nil { |
82 | | - return NewNil(), err |
83 | | - } |
84 | | - if parsed != nil { |
85 | | - loc = parsed |
86 | | - } |
87 | | - } |
88 | | - t, err := timeFromParts(args, loc) |
89 | | - if err != nil { |
90 | | - return NewNil(), err |
91 | | - } |
92 | | - return NewTime(t), nil |
93 | | - }), |
94 | | - "local": NewBuiltin("Time.local", func(exec *Execution, receiver Value, args []Value, kwargs map[string]Value, block Value) (Value, error) { |
95 | | - t, err := timeFromParts(args, time.Local) |
96 | | - if err != nil { |
97 | | - return NewNil(), err |
98 | | - } |
99 | | - return NewTime(t), nil |
100 | | - }), |
101 | | - "mktime": NewAutoBuiltin("Time.mktime", func(exec *Execution, receiver Value, args []Value, kwargs map[string]Value, block Value) (Value, error) { |
102 | | - t, err := timeFromParts(args, time.Local) |
103 | | - if err != nil { |
104 | | - return NewNil(), err |
105 | | - } |
106 | | - return NewTime(t), nil |
107 | | - }), |
108 | | - "utc": NewBuiltin("Time.utc", func(exec *Execution, receiver Value, args []Value, kwargs map[string]Value, block Value) (Value, error) { |
109 | | - t, err := timeFromParts(args, time.UTC) |
110 | | - if err != nil { |
111 | | - return NewNil(), err |
112 | | - } |
113 | | - return NewTime(t), nil |
114 | | - }), |
115 | | - "gm": NewAutoBuiltin("Time.gm", func(exec *Execution, receiver Value, args []Value, kwargs map[string]Value, block Value) (Value, error) { |
116 | | - t, err := timeFromParts(args, time.UTC) |
117 | | - if err != nil { |
118 | | - return NewNil(), err |
119 | | - } |
120 | | - return NewTime(t), nil |
121 | | - }), |
122 | | - "at": NewBuiltin("Time.at", func(exec *Execution, receiver Value, args []Value, kwargs map[string]Value, block Value) (Value, error) { |
123 | | - if len(args) != 1 { |
124 | | - return NewNil(), fmt.Errorf("Time.at expects seconds since epoch") //nolint:staticcheck // class.method reference |
125 | | - } |
126 | | - var loc *time.Location |
127 | | - if in, ok := kwargs["in"]; ok { |
128 | | - parsed, err := parseLocation(in) |
129 | | - if err != nil { |
130 | | - return NewNil(), err |
131 | | - } |
132 | | - loc = parsed |
133 | | - } |
134 | | - t, err := timeFromEpoch(args[0], loc) |
135 | | - if err != nil { |
136 | | - return NewNil(), err |
137 | | - } |
138 | | - return NewTime(t), nil |
139 | | - }), |
140 | | - "now": NewAutoBuiltin("Time.now", func(exec *Execution, receiver Value, args []Value, kwargs map[string]Value, block Value) (Value, error) { |
141 | | - if len(args) > 0 { |
142 | | - return NewNil(), fmt.Errorf("Time.now does not take positional arguments") //nolint:staticcheck // class.method reference |
143 | | - } |
144 | | - loc := time.Local |
145 | | - if in, ok := kwargs["in"]; ok { |
146 | | - parsed, err := parseLocation(in) |
147 | | - if err != nil { |
148 | | - return NewNil(), err |
149 | | - } |
150 | | - if parsed != nil { |
151 | | - loc = parsed |
152 | | - } |
153 | | - } |
154 | | - return NewTime(time.Now().In(loc)), nil |
155 | | - }), |
156 | | - "parse": NewBuiltin("Time.parse", func(exec *Execution, receiver Value, args []Value, kwargs map[string]Value, block Value) (Value, error) { |
157 | | - if len(args) < 1 || len(args) > 2 || args[0].Kind() != KindString { |
158 | | - return NewNil(), fmt.Errorf("Time.parse expects a time string and optional layout") //nolint:staticcheck // class.method reference |
159 | | - } |
160 | | - for key := range kwargs { |
161 | | - if key != "in" { |
162 | | - return NewNil(), fmt.Errorf("Time.parse unknown keyword %q", key) //nolint:staticcheck // class.method reference |
163 | | - } |
164 | | - } |
165 | | - |
166 | | - layout := "" |
167 | | - hasLayout := false |
168 | | - if len(args) == 2 { |
169 | | - if args[1].Kind() == KindString { |
170 | | - layout = args[1].String() |
171 | | - hasLayout = true |
172 | | - } else if args[1].Kind() != KindNil { |
173 | | - return NewNil(), fmt.Errorf("Time.parse layout must be string") //nolint:staticcheck // class.method reference |
174 | | - } |
175 | | - } |
176 | | - |
177 | | - var loc *time.Location |
178 | | - if in, ok := kwargs["in"]; ok { |
179 | | - parsed, err := parseLocation(in) |
180 | | - if err != nil { |
181 | | - return NewNil(), err |
182 | | - } |
183 | | - loc = parsed |
184 | | - } |
185 | | - |
186 | | - t, err := parseTimeString(args[0].String(), layout, hasLayout, loc) |
187 | | - if err != nil { |
188 | | - return NewNil(), err |
189 | | - } |
190 | | - return NewTime(t), nil |
191 | | - }), |
192 | | - }) |
| 75 | + registerTimeBuiltins(engine) |
193 | 76 |
|
194 | 77 | return engine, nil |
195 | 78 | } |
|
0 commit comments