myco 0.1.6 → 0.1.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/myco/bootstrap/component.rb +2 -0
- data/lib/myco/bootstrap/evaluator.rb +58 -0
- data/lib/myco/bootstrap/instance.rb +1 -1
- data/lib/myco/bootstrap/meme.rb +4 -9
- data/lib/myco/bootstrap.my +1 -1
- data/lib/myco/bootstrap.my.rb +1 -1
- data/lib/myco/code_loader.rb +6 -1
- data/lib/myco/code_tools/AST/ArgumentAssembly.my +8 -12
- data/lib/myco/code_tools/AST/ArgumentAssembly.my.rb +12 -9
- data/lib/myco/code_tools/AST/ArrayAssembly.my +2 -3
- data/lib/myco/code_tools/AST/ArrayAssembly.my.rb +2 -5
- data/lib/myco/code_tools/AST/Block.my +4 -4
- data/lib/myco/code_tools/AST/Block.my.rb +3 -7
- data/lib/myco/code_tools/AST/BlockArgument.my +4 -5
- data/lib/myco/code_tools/AST/BlockArgument.my.rb +2 -5
- data/lib/myco/code_tools/AST/BlockLiteral.my +3 -4
- data/lib/myco/code_tools/AST/BlockLiteral.my.rb +6 -6
- data/lib/myco/code_tools/AST/BlockParameter.my +4 -11
- data/lib/myco/code_tools/AST/BlockParameter.my.rb +4 -13
- data/lib/myco/code_tools/AST/BranchOperator.my +2 -3
- data/lib/myco/code_tools/AST/BranchOperator.my.rb +4 -9
- data/lib/myco/code_tools/AST/ConstantAccess.my +11 -8
- data/lib/myco/code_tools/AST/ConstantAccess.my.rb +16 -12
- data/lib/myco/code_tools/AST/ConstantAssignment.my +13 -5
- data/lib/myco/code_tools/AST/ConstantAssignment.my.rb +16 -11
- data/lib/myco/code_tools/AST/ConstantDefine.my +2 -3
- data/lib/myco/code_tools/AST/ConstantDefine.my.rb +3 -7
- data/lib/myco/code_tools/AST/DeclareCategory.my +4 -14
- data/lib/myco/code_tools/AST/DeclareCategory.my.rb +20 -36
- data/lib/myco/code_tools/AST/DeclareDecorator.my +2 -3
- data/lib/myco/code_tools/AST/DeclareDecorator.my.rb +3 -7
- data/lib/myco/code_tools/AST/DeclareExtension.my +22 -0
- data/lib/myco/code_tools/AST/DeclareExtension.my.rb +19 -0
- data/lib/myco/code_tools/AST/DeclareFile.my +4 -15
- data/lib/myco/code_tools/AST/DeclareFile.my.rb +34 -50
- data/lib/myco/code_tools/AST/DeclareMeme.my +5 -7
- data/lib/myco/code_tools/AST/DeclareMeme.my.rb +8 -17
- data/lib/myco/code_tools/AST/DeclareObject.my +6 -18
- data/lib/myco/code_tools/AST/DeclareObject.my.rb +41 -59
- data/lib/myco/code_tools/AST/DeclareString.my +2 -3
- data/lib/myco/code_tools/AST/DeclareString.my.rb +3 -7
- data/lib/myco/code_tools/AST/{MycoModuleScope.my → DeclaredScope.my} +15 -16
- data/lib/myco/code_tools/AST/{MycoModuleScope.my.rb → DeclaredScope.my.rb} +15 -20
- data/lib/myco/code_tools/AST/Invoke.my +8 -8
- data/lib/myco/code_tools/AST/Invoke.my.rb +13 -21
- data/lib/myco/code_tools/AST/InvokeMethod.my +2 -3
- data/lib/myco/code_tools/AST/InvokeMethod.my.rb +4 -9
- data/lib/myco/code_tools/AST/KeywordAssembly.my +3 -4
- data/lib/myco/code_tools/AST/KeywordAssembly.my.rb +2 -5
- data/lib/myco/code_tools/AST/KeywordOptionalParameter.my +16 -0
- data/lib/myco/code_tools/AST/KeywordOptionalParameter.my.rb +14 -0
- data/lib/myco/code_tools/AST/KeywordRequiredParameter.my +16 -0
- data/lib/myco/code_tools/AST/KeywordRequiredParameter.my.rb +13 -0
- data/lib/myco/code_tools/AST/KeywordRestParameter.my +16 -0
- data/lib/myco/code_tools/AST/KeywordRestParameter.my.rb +13 -0
- data/lib/myco/code_tools/AST/LocalVariableAccessAmbiguous.my +2 -3
- data/lib/myco/code_tools/AST/LocalVariableAccessAmbiguous.my.rb +2 -5
- data/lib/myco/code_tools/AST/LocalVariableAssignment.my +3 -3
- data/lib/myco/code_tools/AST/LocalVariableAssignment.my.rb +3 -7
- data/lib/myco/code_tools/AST/Node.my +32 -2
- data/lib/myco/code_tools/AST/Node.my.rb +34 -1
- data/lib/myco/code_tools/AST/NumericLiteral.my +15 -0
- data/lib/myco/code_tools/AST/NumericLiteral.my.rb +12 -0
- data/lib/myco/code_tools/AST/OptionalParameter.my +24 -0
- data/lib/myco/code_tools/AST/OptionalParameter.my.rb +19 -0
- data/lib/myco/code_tools/AST/ParameterAssembly.my +60 -103
- data/lib/myco/code_tools/AST/ParameterAssembly.my.rb +60 -121
- data/lib/myco/code_tools/AST/PipeOperator.my +2 -3
- data/lib/myco/code_tools/AST/PipeOperator.my.rb +3 -7
- data/lib/myco/code_tools/AST/Quest.my +8 -10
- data/lib/myco/code_tools/AST/Quest.my.rb +9 -13
- data/lib/myco/code_tools/AST/RequiredParameter.my +12 -0
- data/lib/myco/code_tools/AST/RequiredParameter.my.rb +10 -0
- data/lib/myco/code_tools/AST/RestParameter.my +12 -0
- data/lib/myco/code_tools/AST/RestParameter.my.rb +10 -0
- data/lib/myco/code_tools/AST/Script.my +4 -4
- data/lib/myco/code_tools/AST/Script.my.rb +3 -7
- data/lib/myco/code_tools/AST/Sequence.my +2 -3
- data/lib/myco/code_tools/AST/Sequence.my.rb +2 -5
- data/lib/myco/code_tools/AST/SplatValue.my +3 -4
- data/lib/myco/code_tools/AST/SplatValue.my.rb +2 -5
- data/lib/myco/code_tools/AST/{DynamicString.my → StringCompose.my} +3 -4
- data/lib/myco/code_tools/AST/{DynamicString.my.rb → StringCompose.my.rb} +4 -7
- data/lib/myco/code_tools/AST/StringLiteral.my +2 -3
- data/lib/myco/code_tools/AST/StringLiteral.my.rb +2 -5
- data/lib/myco/code_tools/AST/{DynamicSymbol.my → SymbolCompose.my} +3 -4
- data/lib/myco/code_tools/AST/{DynamicSymbol.my.rb → SymbolCompose.my.rb} +4 -7
- data/lib/myco/code_tools/AST/SymbolLiteral.my +2 -3
- data/lib/myco/code_tools/AST/SymbolLiteral.my.rb +2 -5
- data/lib/myco/code_tools/AST/ToRuby.my +40 -57
- data/lib/myco/code_tools/AST/ToRuby.my.rb +43 -52
- data/lib/myco/code_tools/AST/misc.my +19 -24
- data/lib/myco/code_tools/AST/misc.my.rb +18 -23
- data/lib/myco/code_tools/AST.my +17 -8
- data/lib/myco/code_tools/AST.my.rb +14 -7
- data/lib/myco/code_tools/Parser.my +1 -1
- data/lib/myco/code_tools/parser/MycoBuilder.my +3 -3
- data/lib/myco/code_tools/parser/MycoBuilder.my.rb +3 -3
- data/lib/myco/code_tools/parser/MycoGrammar.my +67 -74
- data/lib/myco/code_tools/parser/MycoGrammar.my.rb +211 -316
- data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/BytecodeHelpers.my +3 -3
- data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/BytecodeHelpers.my.rb +2 -2
- data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/BytecodeInstructions.my +9 -9
- data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/BytecodeInstructions.my.rb +9 -9
- data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/BytecodeParser.my +2 -2
- data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/BytecodeParser.my.rb +4 -1
- data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Grammar.my +2 -3
- data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Grammar.my.rb +2 -3
- data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Machine.my +1 -1
- data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Machine.my.rb +1 -1
- data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Processor.my +5 -5
- data/lib/myco/code_tools/parser/pegleromyces/lib/pegleromyces/Processor.my.rb +5 -5
- data/lib/myco/command.my +1 -1
- data/lib/myco/command.my.rb +1 -1
- data/lib/myco/core/BasicDecorators.my +10 -8
- data/lib/myco/core/BasicDecorators.my.rb +7 -7
- data/lib/myco/core/BasicObject.my +38 -7
- data/lib/myco/core/BasicObject.my.rb +23 -4
- data/lib/myco/tools/BasicCommand.my +1 -1
- data/lib/myco/tools/BasicCommand.my.rb +1 -1
- data/lib/myco/version.rb +1 -1
- data/lib/myco.rb +3 -0
- metadata +41 -26
- data/lib/myco/code_tools/AST/ConstantReopen.my +0 -29
- data/lib/myco/code_tools/AST/ConstantReopen.my.rb +0 -35
@@ -42,8 +42,8 @@ rule meme_expr:
|
|
42
42
|
rule arg_expr:
|
43
43
|
assignment
|
44
44
|
/ left_chained_operations
|
45
|
-
/
|
46
|
-
/
|
45
|
+
/ string_compose
|
46
|
+
/ symbol_compose
|
47
47
|
/ left_chained_piping
|
48
48
|
/ expr_atom
|
49
49
|
|
@@ -96,9 +96,9 @@ rule lit_simple:
|
|
96
96
|
/ r(T.true[:t0]) { ast.true(t0) }
|
97
97
|
/ r(T.false[:t0]) { ast.false(t0) }
|
98
98
|
/ r(T.self[:t0]) { ast.self(t0) }
|
99
|
-
/ r(T.float[:t0]) { ast.
|
100
|
-
/ r(T.integer[:t0]) { ast.
|
101
|
-
/ r(T.symbol[:t0]) { ast.
|
99
|
+
/ r(T.float[:t0]) { ast.numeric(t0, t0.float) }
|
100
|
+
/ r(T.integer[:t0]) { ast.numeric(t0, t0.integer) }
|
101
|
+
/ r(T.symbol[:t0]) { ast.symbol(t0, t0.text.slice(Range.new(1,-1)).to_sym) } # TODO: more succinct here
|
102
102
|
|
103
103
|
##
|
104
104
|
# Other literals
|
@@ -120,39 +120,39 @@ rule block_body:
|
|
120
120
|
rule lit_string:
|
121
121
|
r((T.string_begin + T.string_body[:tb] + T.string_end) /
|
122
122
|
(T.sstring_begin + T.sstring_body[:tb] + T.sstring_end))
|
123
|
-
{ ast.
|
123
|
+
{ ast.symbol(tb, encode_escapes(tb.text)) }
|
124
124
|
|
125
125
|
rule lit_string_as_symbol:
|
126
126
|
r((T.string_begin + T.string_body[:tb] + T.string_end) /
|
127
127
|
(T.sstring_begin + T.sstring_body[:tb] + T.sstring_end))
|
128
|
-
{ ast.
|
128
|
+
{ ast.symbol(tb, encode_escapes(tb.text).to_sym) }
|
129
129
|
|
130
130
|
rule lit_symstr:
|
131
131
|
r(T.symstr_begin + T.string_body[:tb] + T.string_end)
|
132
|
-
{ ast.
|
132
|
+
{ ast.symbol(tb, encode_escapes(tb.text).to_sym) }
|
133
133
|
|
134
134
|
rule category_name:
|
135
135
|
r(T.catgry_begin + T.catgry_body[:tb] + T.catgry_end)
|
136
|
-
{ ast.
|
136
|
+
{ ast.symbol(tb, encode_escapes(tb.text).to_sym) }
|
137
137
|
|
138
138
|
##
|
139
139
|
# String interpolations / juxtapositions
|
140
140
|
|
141
|
-
rule
|
141
|
+
rule string_compose_part:
|
142
142
|
r(C.spc.* + expr_atom_not_string[:n0] + C.spc.* + lit_string[:n1])
|
143
143
|
{ [n0,n1] }
|
144
144
|
|
145
|
-
rule
|
146
|
-
r(
|
145
|
+
rule string_compose_parts:
|
146
|
+
r(string_compose_part.+[:nlist])
|
147
147
|
{ nlist.flatten }
|
148
148
|
|
149
|
-
rule
|
150
|
-
r(lit_string[:n0] +
|
151
|
-
{ ast.
|
149
|
+
rule string_compose:
|
150
|
+
r(lit_string[:n0] + string_compose_parts[:nrest])
|
151
|
+
{ ast.string_compose(n0, [n0] + nrest) }
|
152
152
|
|
153
|
-
rule
|
154
|
-
r(lit_symstr[:n0] +
|
155
|
-
{ ast.
|
153
|
+
rule symbol_compose:
|
154
|
+
r(lit_symstr[:n0] + string_compose_parts[:nrest])
|
155
|
+
{ ast.symbol_compose(n0, [n0] + nrest) }
|
156
156
|
|
157
157
|
##
|
158
158
|
# Constants
|
@@ -173,14 +173,14 @@ rule sepd_constant:
|
|
173
173
|
|
174
174
|
rule constant_list:
|
175
175
|
r(constant[:n0] + sepd_constant.*[:nrest])
|
176
|
-
{ ast.
|
176
|
+
{ ast.array(n0, [n0, *nrest]) }
|
177
177
|
|
178
178
|
##
|
179
179
|
# Bare identifiers
|
180
180
|
|
181
181
|
# Used in contexts where a bare identifier is a symbol
|
182
182
|
rule id_as_symbol:
|
183
|
-
r(T.identifier[:t0]) { ast.
|
183
|
+
r(T.identifier[:t0]) { ast.symbol(t0, t0.sym) }
|
184
184
|
|
185
185
|
##
|
186
186
|
# Object declarations
|
@@ -262,7 +262,7 @@ rule invoke_assignment:
|
|
262
262
|
lhs.name = (""lhs.name"=").to_sym
|
263
263
|
orig_arguments = lhs.arguments &? lhs.arguments.body ?? []
|
264
264
|
arg_order = lhs.name==:"[]=" &? [*orig_arguments, rhs] ?? [rhs, *orig_arguments]
|
265
|
-
lhs.arguments = ast.
|
265
|
+
lhs.arguments = ast.args(rhs, arg_order)
|
266
266
|
lhs
|
267
267
|
}
|
268
268
|
|
@@ -283,7 +283,7 @@ rule op_invoke: # Allow some binary operators to be invoked with a dot
|
|
283
283
|
|
284
284
|
rule elem_invoke:
|
285
285
|
r(lit_array[:na] + opt_block_body[:nb])
|
286
|
-
{ ast.invoke(na, null, :"[]", ast.
|
286
|
+
{ ast.invoke(na, null, :"[]", ast.args(na, na.body), nb) }
|
287
287
|
|
288
288
|
rule op_invoke_id:
|
289
289
|
left_op_normal
|
@@ -337,68 +337,61 @@ rule in_arg_list:
|
|
337
337
|
|
338
338
|
rule arg_list:
|
339
339
|
r(T.args_begin[:tb] + arg_sep_opt + in_arg_list.-[:nlist] + arg_sep_opt + T.args_end)
|
340
|
-
{ ast.
|
340
|
+
{ ast.args(tb, (nlist || [])) }
|
341
341
|
|
342
342
|
rule lit_array:
|
343
343
|
r(T.array_begin[:tb] + arg_sep_opt + in_arg_list.-[:nlist] + arg_sep_opt + T.array_end)
|
344
|
-
{ ast.
|
344
|
+
{ ast.array(tb, (nlist || [])) }
|
345
345
|
|
346
346
|
##
|
347
347
|
# Parameter lists
|
348
348
|
|
349
|
-
|
349
|
+
param_sep: (C.spc.* + T.arg_sep + C.spc.*).+ / (C.spc.* + !!T.params_end)
|
350
|
+
param_sep_opt: (C.spc / T.arg_sep).*
|
351
|
+
param_sepd: |x| r(x[:n0] + param_sep) { n0 }
|
352
|
+
|
353
|
+
rule req_param:
|
354
|
+
r(T.identifier[:ti] + !!param_sep)
|
355
|
+
{ ast.reqprm(ti, ti.sym) }
|
356
|
+
rule opt_param:
|
350
357
|
r(T.identifier[:ti] + C.spc_nl.* + T.assign[:to] + C.spc_nl.* + arg_expr[:nv])
|
351
|
-
{
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
{
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
r(param[:n0] + param_sepd.*[:nrest] + arg_sep_opt) { [n0, *nrest] }
|
358
|
+
{ ast.optprm(ti, ti.sym, nv) }
|
359
|
+
rule rest_param:
|
360
|
+
r(T.op_mult + C.spc_nl.* + T.identifier[:ti])
|
361
|
+
{ ast.restprm(ti, ti.sym) }
|
362
|
+
rule kwopt_param:
|
363
|
+
r(T.identifier[:ti] + C.spc_nl.* + T.meme_mark[:to] + C.spc_nl.* + arg_expr[:nv])
|
364
|
+
{ ast.kwoptprm(ti, ti.sym, nv) }
|
365
|
+
rule kwreq_param:
|
366
|
+
r(T.identifier[:ti] + C.spc_nl.* + T.meme_mark[:to] + !!param_sep)
|
367
|
+
{ ast.kwreqprm(ti, ti.sym) }
|
368
|
+
rule kwrest_param:
|
369
|
+
r(T.op_exp + C.spc_nl.* + T.identifier[:ti])
|
370
|
+
{ ast.kwrestprm(ti, ti.sym) }
|
371
|
+
rule block_param:
|
372
|
+
r(T.op_toproc + C.spc_nl.* + T.identifier[:ti])
|
373
|
+
{ ast.blkprm(ti, ti.sym) }
|
368
374
|
|
369
375
|
rule param_list:
|
370
|
-
r(T.params_begin[:tb]
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
loop { plist[0] && plist[0][0] == :required || break; required.push(plist.shift[1]) }
|
383
|
-
loop { plist[0] && plist[0][0] == :optional || break; optional.push(plist.shift[1]) }
|
384
|
-
loop { plist[0] && plist[0][0] == :rest || break; rest .push(plist.shift[1]) }
|
385
|
-
loop { plist[0] && plist[0][0] == :required || break; post .push(plist.shift[1]) }
|
386
|
-
loop { plist[0] && plist[0][0] == :kwargs || break; kwargs .push(plist.shift[1]) }
|
387
|
-
loop { plist[0] && plist[0][0] == :kwrest || break; kwrest .push(plist.shift[1]) }
|
388
|
-
loop { plist[0] && plist[0][0] == :block || break; block .push(plist.shift[1]) }
|
389
|
-
|
390
|
-
required = required
|
391
|
-
optional = optional
|
392
|
-
rest = rest.first
|
393
|
-
post = post
|
394
|
-
kwargs = kwargs
|
395
|
-
kwrest = kwrest.first
|
396
|
-
block = block.first
|
397
|
-
|
398
|
-
# TODO: move these conversions to their respective reductions
|
399
|
-
block = block && ast.blkprm(tb, block)
|
376
|
+
r(T.params_begin[:tb]
|
377
|
+
+ param_sep_opt
|
378
|
+
+ param_sepd(req_param).*[:required]
|
379
|
+
+ param_sepd(opt_param).*[:optional]
|
380
|
+
+ param_sepd(rest_param).-[:rest]
|
381
|
+
+ param_sepd(req_param).*[:post]
|
382
|
+
+ param_sepd(kwreq_param / kwopt_param).*[:kw]
|
383
|
+
+ param_sepd(kwrest_param).-[:kwrest]
|
384
|
+
+ param_sepd(block_param).-[:block]
|
385
|
+
+ T.params_end) {
|
386
|
+
kwrequired = kw.select |x| { x.node_type == :kwreqprm }
|
387
|
+
kwoptional = kw.select |x| { x.node_type == :kwoptprm }
|
400
388
|
|
401
|
-
|
389
|
+
# TODO: the ternary clauses should not be necessary
|
390
|
+
ast.params(tb
|
391
|
+
required, optional, (rest.is_a?(Array) &? rest.first ?? rest), post
|
392
|
+
kwrequired, kwoptional, (kwrest.is_a?(Array) &? kwrest.first ?? kwrest)
|
393
|
+
(block.is_a?(Array) &? block.first ?? block)
|
394
|
+
)
|
402
395
|
}
|
403
396
|
|
404
397
|
##
|
@@ -594,7 +587,7 @@ rule sepd_decorator:
|
|
594
587
|
|
595
588
|
rule decorators_and_meme_name:
|
596
589
|
r(decorator[:n0] + sepd_decorator.*[:nrest])
|
597
|
-
{ ast.
|
590
|
+
{ ast.array(n0, [n0, *nrest].reverse) }
|
598
591
|
|
599
592
|
rule meme:
|
600
593
|
r(decorators_and_meme_name[:nd]
|