@@ -32,6 +32,7 @@ function FluentNode:_init (ast, resource)
3232 local node = leaf_to_node (leaf , resource )
3333 self :inject (node )
3434 end )
35+ return self
3536end
3637
3738function FluentNode :set_parent (resource )
@@ -99,6 +100,7 @@ function FTL.blank_block:_init (ast, resource)
99100 self :super (ast , resource )
100101 local _ , count = string.gsub (ast [1 ], " \n " , " " )
101102 getmetatable (self ).discardable = count == 0
103+ return self
102104end
103105
104106FTL .Entry = function (ast , resource )
@@ -114,7 +116,16 @@ FTL.Message._name = "Message"
114116function FTL .Message :_init (ast , resource )
115117 self .attributes = setmetatable ({}, { map = {} })
116118 self :super (ast , resource )
119+ -- Work around Penlight #307
117120 -- self:catch(self.get_attribute)
121+ self :_patch_init ()
122+ return self
123+ end
124+
125+ function FTL .Message :_patch_init ()
126+ if not type (rawget (getmetatable (self ), " __index" )) ~= " function" then
127+ self :catch (function (_ , attribute ) return self :get_attribute (attribute ) end )
128+ end
118129end
119130
120131function FTL .Message :set_attribute (attribute )
@@ -169,6 +180,7 @@ function FTL.Pattern:_init (ast, resource)
169180 self .elements = {}
170181 self :super (ast , resource )
171182 self :dedent ()
183+ return self
172184end
173185
174186function FTL .Pattern :dedent ()
@@ -223,7 +235,7 @@ FTL.TextElement._name ="TextElement"
223235function FTL .TextElement :_init (ast , resource )
224236 getmetatable (self ).appendable = true
225237 ast .id = " TextElement"
226- self :super (ast , resource )
238+ return self :super (ast , resource )
227239end
228240
229241function FTL .TextElement :__add (node )
@@ -244,7 +256,7 @@ function FTL.Placeable:_init (ast, resource)
244256 getmetatable (self ).appendable = true
245257 ast .id = " Placeable"
246258 ast .expression = leaf_to_node (ast .expression , resource )
247- self :super (ast , resource )
259+ return self :super (ast , resource )
248260end
249261
250262function FTL .Placeable :__mod (node )
@@ -315,7 +327,7 @@ FTL.TermReference._name = "TermReference"
315327
316328function FTL .TermReference :_init (ast , resource )
317329 ast .id = " TermReference"
318- self :super (ast , resource )
330+ return self :super (ast , resource )
319331end
320332
321333function FTL .TermReference :__mul (node )
@@ -350,7 +362,7 @@ function FTL.SelectExpression:_init (ast, resource)
350362 ast .id = " SelectExpression"
351363 self .selector = {}
352364 self .variants = {}
353- self :super (ast , resource )
365+ return self :super (ast , resource )
354366end
355367
356368function FTL .SelectExpression :format (parameters )
@@ -385,7 +397,7 @@ FTL.variant_list._name = "variant_list"
385397
386398function FTL .variant_list :_init (ast , resource )
387399 self .elements = {}
388- self :super (ast , resource )
400+ return self :super (ast , resource )
389401end
390402
391403function FTL .variant_list :__mod (node )
@@ -401,7 +413,7 @@ FTL.Variant._name = "Variant"
401413function FTL .Variant :_init (ast , resource )
402414 ast .id = " Variant"
403415 ast .default = ast .default or false
404- self :super (ast , resource )
416+ return self :super (ast , resource )
405417end
406418
407419FTL .VariantKey = class (FluentNode )
@@ -425,7 +437,7 @@ FTL.CallArguments._name = "CallArguments"
425437function FTL .CallArguments :_init (ast , resource )
426438 self .named = {}
427439 self .positional = {}
428- self :super (ast , resource )
440+ return self :super (ast , resource )
429441end
430442
431443function FTL .CallArguments :__mul (node )
@@ -443,7 +455,7 @@ FTL.Comment._name = "Comment"
443455
444456function FTL .Comment :_init (ast , resource )
445457 getmetatable (self ).appendable = true
446- self :super (ast , resource )
458+ return self :super (ast , resource )
447459end
448460
449461function FTL .Comment :__add (node )
0 commit comments