@@ -158,7 +158,7 @@ def __call__(self, env):
158158
159159class StringLiteral (FTL .StringLiteral , Literal ):
160160 def __call__ (self , env ):
161- return self .value
161+ return self .parse ()[ ' value' ]
162162
163163
164164class NumberLiteral (FTL .NumberLiteral , BaseResolver ):
@@ -180,7 +180,14 @@ def __call__(self, env):
180180
181181class TermReference (FTL .TermReference , BaseResolver ):
182182 def __call__ (self , env ):
183- with env .modified_for_term_reference ():
183+ if self .arguments :
184+ if self .arguments .positional :
185+ env .errors .append (FluentFormatError ("Ignored positional arguments passed to term '{0}'"
186+ .format (reference_to_id (self ))))
187+ kwargs = {kwarg .name .name : kwarg .value (env ) for kwarg in self .arguments .named }
188+ else :
189+ kwargs = None
190+ with env .modified_for_term_reference (args = kwargs ):
184191 return lookup_reference (self , env )(env )
185192
186193
@@ -200,9 +207,9 @@ def lookup_reference(ref, env):
200207 except LookupError :
201208 env .errors .append (unknown_reference_error_obj (ref_id ))
202209
203- if isinstance ( ref , AttributeExpression ) :
210+ if ref . attribute :
204211 # Fallback
205- parent_id = reference_to_id (ref . ref )
212+ parent_id = reference_to_id (ref , ignore_attributes = True )
206213 try :
207214 return env .context .lookup (parent_id )
208215 except LookupError :
@@ -231,40 +238,10 @@ def __call__(self, env):
231238 return FluentNone (name )
232239
233240
234- class AttributeExpression (FTL .AttributeExpression , BaseResolver ):
235- def __call__ (self , env ):
236- return lookup_reference (self , env )(env )
237-
238-
239241class Attribute (FTL .Attribute , BaseResolver ):
240242 pass
241243
242244
243- class VariantList (FTL .VariantList , BaseResolver ):
244- def __call__ (self , env , key = None ):
245- found = None
246- for variant in self .variants :
247- if variant .default :
248- default = variant
249- if key is None :
250- # We only want the default
251- break
252-
253- compare_value = variant .key (env )
254- if match (key , compare_value , env ):
255- found = variant
256- break
257-
258- if found is None :
259- if (key is not None and not isinstance (key , FluentNone )):
260- env .errors .append (FluentReferenceError ("Unknown variant: {0}"
261- .format (key )))
262- found = default
263- assert found , "Not having a default variant is a parse error"
264-
265- return found .value (env )
266-
267-
268245class SelectExpression (FTL .SelectExpression , BaseResolver ):
269246 def __call__ (self , env ):
270247 key = self .selector (env )
@@ -314,33 +291,15 @@ def __call__(self, env):
314291 return self .name
315292
316293
317- class VariantExpression (FTL .VariantExpression , BaseResolver ):
318- def __call__ (self , env ):
319- message = lookup_reference (self .ref , env )
320-
321- # TODO What to do if message is not a VariantList?
322- # Need test at least.
323- assert isinstance (message , VariantList )
324-
325- variant_name = self .key .name
326- return message (env , variant_name )
294+ class CallArguments (FTL .CallArguments , BaseResolver ):
295+ pass
327296
328297
329- class CallExpression (FTL .CallExpression , BaseResolver ):
298+ class FunctionReference (FTL .FunctionReference , BaseResolver ):
330299 def __call__ (self , env ):
331- args = [arg (env ) for arg in self .positional ]
332- kwargs = {kwarg .name .name : kwarg .value (env ) for kwarg in self .named }
333-
334- if isinstance (self .callee , (TermReference , AttributeExpression )):
335- term = lookup_reference (self .callee , env )
336- if args :
337- env .errors .append (FluentFormatError ("Ignored positional arguments passed to term '{0}'"
338- .format (reference_to_id (self .callee ))))
339- with env .modified_for_term_reference (args = kwargs ):
340- return term (env )
341-
342- # builtin or custom function call
343- function_name = self .callee .id .name
300+ args = [arg (env ) for arg in self .arguments .positional ]
301+ kwargs = {kwarg .name .name : kwarg .value (env ) for kwarg in self .arguments .named }
302+ function_name = self .id .name
344303 try :
345304 function = env .context ._functions [function_name ]
346305 except LookupError :
0 commit comments