import dict only=something
This commit is contained in:
parent
e2f5024a4c
commit
970ceeb8b0
|
|
@ -799,16 +799,24 @@ export class Compiler {
|
||||||
|
|
||||||
case terms.Import: {
|
case terms.Import: {
|
||||||
const instructions: ProgramItem[] = []
|
const instructions: ProgramItem[] = []
|
||||||
const [_import, ...dicts] = getAllChildren(node)
|
const [_import, ...nodes] = getAllChildren(node)
|
||||||
|
const args = nodes.filter(node => node.type.id === terms.Identifier)
|
||||||
|
const namedArgs = nodes.filter(node => node.type.id === terms.NamedArg)
|
||||||
|
|
||||||
instructions.push(['LOAD', 'import'])
|
instructions.push(['LOAD', 'import'])
|
||||||
|
|
||||||
dicts.forEach((dict) =>
|
args.forEach((dict) =>
|
||||||
instructions.push(['PUSH', input.slice(dict.from, dict.to)])
|
instructions.push(['PUSH', input.slice(dict.from, dict.to)])
|
||||||
)
|
)
|
||||||
|
|
||||||
instructions.push(['PUSH', dicts.length])
|
namedArgs.forEach((arg) => {
|
||||||
instructions.push(['PUSH', 0])
|
const { name, valueNode } = getNamedArgParts(arg, input)
|
||||||
|
instructions.push(['PUSH', name])
|
||||||
|
instructions.push(...this.#compileNode(valueNode, input))
|
||||||
|
})
|
||||||
|
|
||||||
|
instructions.push(['PUSH', args.length])
|
||||||
|
instructions.push(['PUSH', namedArgs.length])
|
||||||
instructions.push(['CALL'])
|
instructions.push(['CALL'])
|
||||||
|
|
||||||
return instructions
|
return instructions
|
||||||
|
|
|
||||||
|
|
@ -465,4 +465,14 @@ describe('import', () => {
|
||||||
abc.b
|
abc.b
|
||||||
`).toEvaluateTo('yes')
|
`).toEvaluateTo('yes')
|
||||||
})
|
})
|
||||||
|
|
||||||
|
test('can specify imports', () => {
|
||||||
|
expect(`import str only=ends-with?; ref ends-with? | function?`).toEvaluateTo(true)
|
||||||
|
expect(`import str only=ends-with?; ref starts-with? | function?`).toEvaluateTo(false)
|
||||||
|
expect(`
|
||||||
|
abc = [a=true b=yes c=si]
|
||||||
|
import abc only=[a c]
|
||||||
|
[a c]
|
||||||
|
`).toEvaluateTo([true, 'si'])
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
@ -165,7 +165,7 @@ Throw {
|
||||||
|
|
||||||
// this has to be in the parse tree so the scope tracker can use it
|
// this has to be in the parse tree so the scope tracker can use it
|
||||||
Import {
|
Import {
|
||||||
import AssignableIdentifier+
|
import NamedArg* Identifier+ NamedArg*
|
||||||
}
|
}
|
||||||
|
|
||||||
ConditionalOp {
|
ConditionalOp {
|
||||||
|
|
|
||||||
|
|
@ -7,9 +7,9 @@ import {highlighting} from "./highlight"
|
||||||
const spec_Identifier = {__proto__:null,while:78, null:112, catch:118, finally:124, end:126, if:134, else:140, try:158, throw:162, import:166}
|
const spec_Identifier = {__proto__:null,while:78, null:112, catch:118, finally:124, end:126, if:134, else:140, try:158, throw:162, import:166}
|
||||||
export const parser = LRParser.deserialize({
|
export const parser = LRParser.deserialize({
|
||||||
version: 14,
|
version: 14,
|
||||||
states: "=dQYQbOOO!mOpO'#DXO!rOSO'#D`OOQa'#D`'#D`O%mQcO'#DvO(mQcO'#EiOOQ`'#Ew'#EwO)WQRO'#DwO+]QcO'#EgO+vQbO'#DVOOQa'#Dy'#DyO.[QbO'#DzOOQa'#Ei'#EiO.cQcO'#EiO0aQcO'#EhO1fQcO'#EgO1sQRO'#ESOOQ`'#Eg'#EgO2[QbO'#EgO2cQQO'#EfOOQ`'#Ef'#EfOOQ`'#EU'#EUQYQbOOO2nQbO'#D[O2yQbO'#DpO3tQbO'#DSO4oQQO'#D|O3tQbO'#EOO4tQbO'#EQO4yObO,59sO5UQbO'#DbO5^QWO'#DcOOOO'#Eo'#EoOOOO'#EZ'#EZO5rOSO,59zOOQa,59z,59zOOQ`'#DZ'#DZO6QQbO'#DoOOQ`'#Em'#EmOOQ`'#E^'#E^O6[QbO,5:^OOQa'#Eh'#EhO3tQbO,5:cO3tQbO,5:cO3tQbO,5:cO3tQbO,5:cO3tQbO,59pO3tQbO,59pO3tQbO,59pO3tQbO,59pOOQ`'#EW'#EWO+vQbO,59qO7UQcO'#DvO7]QcO'#EiO7dQRO,59qO7nQQO,59qO7sQQO,59qO7{QQO,59qO8WQRO,59qO8pQRO,59qO8wQQO'#DQO8|QbO,5:fO9TQQO,5:eOOQa,5:f,5:fO9`QbO,5:fO9jQbO,5:oO9jQbO,5:nO:zQbO,5:gO;RQbO,59lOOQ`,5;Q,5;QO9jQbO'#EVOOQ`-E8S-E8SOOQ`'#EX'#EXO;mQbO'#D]O;xQbO'#D^OOQO'#EY'#EYO;pQQO'#D]O<^QQO,59vO<cQcO'#EhO=`QRO'#EvO>]QRO'#EvOOQO'#Ev'#EvO>dQQO,5:[O>iQRO,59nO>pQRO,59nO:zQbO,5:hO?OQcO,5:jO@^QcO,5:jO@zQcO,5:jOOQ`'#Eb'#EbOAoQbO,5:lOOQa1G/_1G/_OOOO,59|,59|OOOO,59},59}OOOO-E8X-E8XOOQa1G/f1G/fOOQ`,5:Z,5:ZOOQ`-E8[-E8[OOQa1G/}1G/}OCeQcO1G/}OCoQcO1G/}OD}QcO1G/}OEXQcO1G/}OEfQcO1G/}OOQa1G/[1G/[OFwQcO1G/[OGOQcO1G/[OGVQcO1G/[OHUQcO1G/[OG^QcO1G/[OOQ`-E8U-E8UOHlQRO1G/]OHvQQO1G/]OH{QQO1G/]OITQQO1G/]OI`QRO1G/]OIgQRO1G/]OInQbO,59rOIxQQO1G/]OOQa1G/]1G/]OJQQQO1G0POOQa1G0Q1G0QOJ]QbO1G0QOOQO'#E`'#E`OJQQQO1G0POOQa1G0P1G0POOQ`'#Ea'#EaOJ]QbO1G0QOJgQbO1G0ZOKRQbO1G0YOKmQbO'#DjOLOQbO'#DjOLcQbO1G0ROOQ`-E8T-E8TOOQ`,5:q,5:qOOQ`-E8V-E8VOLnQQO,59wOOQO,59x,59xOOQO-E8W-E8WOLvQbO1G/bO:zQbO1G/vO:zQbO1G/YOL}QbO1G0SOOQ`-E8`-E8`OMYQQO7+$wOOQa7+$w7+$wOMbQQO1G/^OMjQQO7+%kOOQa7+%k7+%kOMuQbO7+%lOOQa7+%l7+%lOOQO-E8^-E8^OOQ`-E8_-E8_OOQ`'#E['#E[ONPQQO'#E[ONXQbO'#EuOOQ`,5:U,5:UONlQbO'#DhONqQQO'#DkOOQ`7+%m7+%mONvQbO7+%mON{QbO7+%mO! TQbO7+$|O! cQbO7+$|O! sQbO7+%bO! {QbO7+$tOOQ`7+%n7+%nO!!QQbO7+%nO!!VQbO7+%nOOQa<<Hc<<HcO!!_QbO7+$xO!!lQQO7+$xOOQa<<IV<<IVOOQa<<IW<<IWOOQ`,5:v,5:vOOQ`-E8Y-E8YO!!tQQO,5:SO:zQbO,5:VOOQ`<<IX<<IXO!!yQbO<<IXOOQ`<<Hh<<HhO!#OQbO<<HhO!#TQbO<<HhO!#]QbO<<HhOOQ`'#E_'#E_O!#hQbO<<H|O!#pQbO'#DuOOQ`<<H|<<H|O!#xQbO<<H|OOQ`<<H`<<H`OOQ`<<IY<<IYO!#}QbO<<IYOOQO,5:w,5:wO!$SQbO<<HdOOQO-E8Z-E8ZO:zQbO1G/nOOQ`1G/q1G/qOOQ`AN>sAN>sOOQ`AN>SAN>SO!$aQbOAN>SO!$fQbOAN>SOOQ`-E8]-E8]OOQ`AN>hAN>hO!$nQbOAN>hO2yQbO,5:_O:zQbO,5:aOOQ`AN>tAN>tPInQbO'#EWOOQ`7+%Y7+%YOOQ`G23nG23nO!$sQbOG23nP!#sQbO'#DsOOQ`G24SG24SO!$xQQO1G/yOOQ`1G/{1G/{OOQ`LD)YLD)YO:zQbO7+%eOOQ`<<IP<<IP",
|
states: "=|QYQbOOO!mOpO'#DXO!rOSO'#D`OOQa'#D`'#D`O%mQcO'#DvO(mQcO'#EiOOQ`'#Ew'#EwO)WQRO'#DwO+]QcO'#EgO+vQbO'#DVOOQa'#Dy'#DyO.[QbO'#DzOOQa'#Ei'#EiO.cQcO'#EiO0aQcO'#EhO1fQcO'#EgO1sQRO'#ESOOQ`'#Eg'#EgO2[QbO'#EgO2cQQO'#EfOOQ`'#Ef'#EfOOQ`'#EU'#EUQYQbOOO2nQbO'#D[O2yQbO'#DpO3tQbO'#DSO4oQQO'#D|O3tQbO'#EOO4tQbO'#EQO4|ObO,59sO5XQbO'#DbO5aQWO'#DcOOOO'#Eo'#EoOOOO'#EZ'#EZO5uOSO,59zOOQa,59z,59zOOQ`'#DZ'#DZO6TQbO'#DoOOQ`'#Em'#EmOOQ`'#E^'#E^O6_QbO,5:^OOQa'#Eh'#EhO3tQbO,5:cO3tQbO,5:cO3tQbO,5:cO3tQbO,5:cO3tQbO,59pO3tQbO,59pO3tQbO,59pO3tQbO,59pOOQ`'#EW'#EWO+vQbO,59qO7XQcO'#DvO7`QcO'#EiO7gQRO,59qO7qQQO,59qO7vQQO,59qO8OQQO,59qO8ZQRO,59qO8sQRO,59qO8zQQO'#DQO9PQbO,5:fO9WQQO,5:eOOQa,5:f,5:fO9cQbO,5:fO9mQbO,5:oO9mQbO,5:nO:}QbO,5:gO;UQbO,59lOOQ`,5;Q,5;QO9mQbO'#EVOOQ`-E8S-E8SOOQ`'#EX'#EXO;pQbO'#D]O;{QbO'#D^OOQO'#EY'#EYO;sQQO'#D]O<aQQO,59vO<fQcO'#EhO=cQRO'#EvO>`QRO'#EvOOQO'#Ev'#EvO>gQQO,5:[O>lQRO,59nO>sQRO,59nO:}QbO,5:hO?RQcO,5:jO@aQcO,5:jO@}QcO,5:jOArQbO,5:lOOQ`'#Eb'#EbO4tQbO,5:lOOQa1G/_1G/_OOOO,59|,59|OOOO,59},59}OOOO-E8X-E8XOOQa1G/f1G/fOOQ`,5:Z,5:ZOOQ`-E8[-E8[OOQa1G/}1G/}OCkQcO1G/}OCuQcO1G/}OETQcO1G/}OE_QcO1G/}OElQcO1G/}OOQa1G/[1G/[OF}QcO1G/[OGUQcO1G/[OG]QcO1G/[OH[QcO1G/[OGdQcO1G/[OOQ`-E8U-E8UOHrQRO1G/]OH|QQO1G/]OIRQQO1G/]OIZQQO1G/]OIfQRO1G/]OImQRO1G/]OItQbO,59rOJOQQO1G/]OOQa1G/]1G/]OJWQQO1G0POOQa1G0Q1G0QOJcQbO1G0QOOQO'#E`'#E`OJWQQO1G0POOQa1G0P1G0POOQ`'#Ea'#EaOJcQbO1G0QOJmQbO1G0ZOKXQbO1G0YOKsQbO'#DjOLUQbO'#DjOLiQbO1G0ROOQ`-E8T-E8TOOQ`,5:q,5:qOOQ`-E8V-E8VOLtQQO,59wOOQO,59x,59xOOQO-E8W-E8WOL|QbO1G/bO:}QbO1G/vO:}QbO1G/YOMTQbO1G0SOM`QbO1G0WOM}QbO1G0WOOQ`-E8`-E8`ONUQQO7+$wOOQa7+$w7+$wON^QQO1G/^ONfQQO7+%kOOQa7+%k7+%kONqQbO7+%lOOQa7+%l7+%lOOQO-E8^-E8^OOQ`-E8_-E8_OOQ`'#E['#E[ON{QQO'#E[O! TQbO'#EuOOQ`,5:U,5:UO! hQbO'#DhO! mQQO'#DkOOQ`7+%m7+%mO! rQbO7+%mO! wQbO7+%mO!!PQbO7+$|O!!_QbO7+$|O!!oQbO7+%bO!!wQbO7+$tOOQ`7+%n7+%nO!!|QbO7+%nO!#RQbO7+%nO!#ZQbO7+%rOOQa<<Hc<<HcO!#xQbO7+$xO!$VQQO7+$xOOQa<<IV<<IVOOQa<<IW<<IWOOQ`,5:v,5:vOOQ`-E8Y-E8YO!$_QQO,5:SO:}QbO,5:VOOQ`<<IX<<IXO!$dQbO<<IXOOQ`<<Hh<<HhO!$iQbO<<HhO!$nQbO<<HhO!$vQbO<<HhOOQ`'#E_'#E_O!%RQbO<<H|O!%ZQbO'#DuOOQ`<<H|<<H|O!%cQbO<<H|OOQ`<<H`<<H`OOQ`<<IY<<IYO!%hQbO<<IYOOQO,5:w,5:wO!%mQbO<<HdOOQO-E8Z-E8ZO:}QbO1G/nOOQ`1G/q1G/qOOQ`AN>sAN>sOOQ`AN>SAN>SO!%zQbOAN>SO!&PQbOAN>SOOQ`-E8]-E8]OOQ`AN>hAN>hO!&XQbOAN>hO2yQbO,5:_O:}QbO,5:aOOQ`AN>tAN>tPItQbO'#EWOOQ`7+%Y7+%YOOQ`G23nG23nO!&^QbOG23nP!%^QbO'#DsOOQ`G24SG24SO!&cQQO1G/yOOQ`1G/{1G/{OOQ`LD)YLD)YO:}QbO7+%eOOQ`<<IP<<IP",
|
||||||
stateData: "!%Q~O#XOSrOS~OlSOm`On[OoPOpROqgOwiO|[O!WRO!X[O!Y[O!ehO!l[O!qjO!skO!ulO#^XO#_dO#bQO#mYO#nZO~O#`mO~O!TpO#bsO#dnO#eoO~OlyOn[OoPOpROqgO|[O!RuO!WRO!X[O!Y[O!btO!l[O#^XO#bQO#mYO#nZOP#[XQ#[XR#[XS#[XT#[XU#[XW#[XX#[XY#[XZ#[X[#[X]#[X^#[Xd#[Xe#[Xf#[Xg#[Xh#[Xi#[Xj#[Xu!jX!Z!jX#l!jX~O#_!jX#p!jX!]!jX!`!jX!a!jX!h!jX~P#QOlyOn[OoPOpROqgO|[O!RuO!WRO!X[O!Y[O!btO!l[O#^XO#bQO#mYO#nZOP#]XQ#]XR#]XS#]XT#]XU#]XW#]XX#]XY#]XZ#]X[#]X]#]X^#]Xd#]Xe#]Xf#]Xg#]Xh#]Xi#]Xj#]Xu#]X#l#]X~O#_#]X#p#]X!Z#]X!]#]X!`#]X!a#]X!h#]X~P&TOP{OQ{OR|OS|OT!POU!QOW!OOX!OOY!OOZ!OO[!OO]!OO^zOd}Oe}Of}Og}Oh}Oi}Oj!RO~OP{OQ{OR|OS|Od}Oe}Of}Og}Oh}Oi}Ou#ZX~O#_#ZX#p#ZX!]#ZX!`#ZX!a#ZX#l#ZX!h#ZX~P*hOl!UOm`On[OoPOpROqgOwiO|[O!WRO!X[O!Y[O!ehO!l[O!qjO!skO!ulO#^XO#_!SO#bQO#mYO#nZO~OlyOn[OoPOpRO|[O!RuO!WRO!X[O!Y[O!l[O#^XO#_!SO#bQO#mYO#nZO~O#o!aO~P-ZOV!cO#_#]X#p#]X!]#]X!`#]X!a#]X!h#]X~P'VOP#[XQ#[XR#[XS#[XT#[XU#[XW#[XX#[XY#[XZ#[X[#[X]#[X^#[Xd#[Xe#[Xf#[Xg#[Xh#[Xi#[Xj#[Xu#ZX~O#_#ZX#p#ZX!]#ZX!`#ZX!a#ZX#l#ZX!h#ZX~P.|Ou#ZX#_#ZX#p#ZX!]#ZX!`#ZX!a#ZX#l#ZX!h#ZX~OT!POU!QOj!RO~P0zOV!cO_!dO`!dOa!dOb!dOc!dOk!dO~O!Z!eO~P0zOu!hO#_!gO#p!gO~Ol!jO!R!lO!Z!PP~Ol!pOn[OoPOpRO|[O!WRO!X[O!Y[O!l[O#^XO#bQO#mYO#nZO~OlyOn[OoPOpRO|[O!WRO!X[O!Y[O!l[O#^XO#bQO#mYO#nZO~O!Z!wO~Om!{O~Ol!}O|!}O#^XO~Ol#OO#^XO~O#b#PO#d#PO#e#PO#f#PO#g#PO#h#PO~O!TpO#b#RO#dnO#eoO~OqgO!b#SO~P3tOqgO!RuO!btOu!fa!Z!fa#_!fa#p!fa#l!fa!]!fa!`!fa!a!fa!h!fa~P3tO#_!SO~P#QO#_!SO~P&TO#_!SO#l#kO~P*hO#l#kO~O#l#kOu#ZX~O!Z!eO#l#kOu#ZX~O#l#kO~P.|OT!POU!QOj!RO#_!SOu#ZX~O#l#kO~P8_Ou!hO~O#o#mO~P-ZO!RuO#_#oO#o#qO~O#_#rO#o#mO~P3tOlSOm`On[OoPOpROqgOwiO|[O!WRO!X[O!Y[O!ehO!l[O!qjO!skO!ulO#^XO#bQO#mYO#nZO~O#_#wO~P9jOu!hO#_ta#pta#lta!]ta!`ta!ata!hta~Ol!jO!R!lO!Z!PX~OpRO|#}O!WRO!X#}O!Y#}O#bQO~O!Z$PO~OqgO!RuO!btOT#[XU#[XW#[XX#[XY#[XZ#[X[#[X]#[Xj#[X!Z#[X~P3tOT!POU!QOj!RO!Z#jX~OT!POU!QOW!OOX!OOY!OOZ!OO[!OO]!OOj!RO~O!Z#jX~P=nO!Z$QO~O!Z$RO~P=nOT!POU!QOj!RO!Z$RO~Ou!ra#_!ra#p!ra!]!ra!`!ra!a!ra#l!ra!h!ra~P)WOP{OQ{OR|OS|Od}Oe}Of}Og}Oh}Oi}O~Ou!ra#_!ra#p!ra!]!ra!`!ra!a!ra#l!ra!h!ra~P?lOT!POU!QOj!ROu!ra#_!ra#p!ra!]!ra!`!ra!a!ra#l!ra!h!ra~Om!{Ou!ta#_!ta#p!ta!]!ta!`!ta!a!ta#l!ta!h!ta~O^zOR!kiS!kid!kie!kif!kig!kih!kii!kiu!ki#_!ki#p!ki#l!ki!]!ki!`!ki!a!ki!h!ki~OP!kiQ!ki~PB^OP{OQ{O~PB^OP{OQ{Od!kie!kif!kig!kih!kii!kiu!ki#_!ki#p!ki#l!ki!]!ki!`!ki!a!ki!h!ki~OR!kiS!ki~PCyOR|OS|O^zO~PCyOR|OS|O~PCyOW!OOX!OOY!OOZ!OO[!OO]!OOTxijxiuxi#_xi#pxi#lxi!Zxi!]xi!`xi!axi!hxi~OU!QO~PEpOU!QO~PFSOUxi~PEpOT!POU!QOjxiuxi#_xi#pxi#lxi!Zxi!]xi!`xi!axi!hxi~OW!OOX!OOY!OOZ!OO[!OO]!OO~PG^O#_!SO#l$VO~P*hO#l$VO~O#l$VOu#ZX~O!Z!eO#l$VOu#ZX~O#l$VO~P.|O#l$VO~P8_OqgO!btO~P-ZO#_!SO#l$VO~O!RuO#_#oO#o$YO~O#_#rO#o$[O~P3tOu!hO#_!wi#p!wi!]!wi!`!wi!a!wi#l!wi!h!wi~Ou!hO#_!vi#p!vi!]!vi!`!vi!a!vi#l!vi!h!vi~Ou!hO!]!^X!`!^X!a!^X!h!^X~O#_$_O!]#iP!`#iP!a#iP!h#iP~P9jO!]$cO!`$dO!a$eO~O!R!lO!Z!Pa~O#_$iO~P9jO!]$cO!`$dO!a$lO~O#_!SO#l$oO~O#_!SO#lzi~O!RuO#_#oO#o$rO~O#_#rO#o$sO~P3tOu!hO#_$tO~O#_$_O!]#iX!`#iX!a#iX!h#iX~P9jOl$vO~O!Z$wO~O!a$xO~O!`$dO!a$xO~Ou!hO!]$cO!`$dO!a$zO~O#_$_O!]#iP!`#iP!a#iP~P9jO!a%RO!h%QO~O!a%TO~O!a%UO~O!`$dO!a%UO~OqgO!btO#lzq~P-ZO#_!SO#lzq~O!Z%ZO~O!a%]O~O!a%^O~O!`$dO!a%^O~O!]$cO!`$dO!a%^O~O!a%bO!h%QO~O!Z%eO!e%dO~O!a%bO~O!a%fO~OqgO!btO#lzy~P-ZO!a%iO~O!`$dO!a%iO~O!a%lO~O!a%oO~O!Z%pO~O|!l~",
|
stateData: "!&k~O#XOSrOS~OlSOm`On[OoPOpROqgOwiO|[O!WRO!X[O!Y[O!ehO!l[O!qjO!skO!ulO#^XO#_dO#bQO#mYO#nZO~O#`mO~O!TpO#bsO#dnO#eoO~OlyOn[OoPOpROqgO|[O!RuO!WRO!X[O!Y[O!btO!l[O#^XO#bQO#mYO#nZOP#[XQ#[XR#[XS#[XT#[XU#[XW#[XX#[XY#[XZ#[X[#[X]#[X^#[Xd#[Xe#[Xf#[Xg#[Xh#[Xi#[Xj#[Xu!jX!Z!jX#l!jX~O#_!jX#p!jX!]!jX!`!jX!a!jX!h!jX~P#QOlyOn[OoPOpROqgO|[O!RuO!WRO!X[O!Y[O!btO!l[O#^XO#bQO#mYO#nZOP#]XQ#]XR#]XS#]XT#]XU#]XW#]XX#]XY#]XZ#]X[#]X]#]X^#]Xd#]Xe#]Xf#]Xg#]Xh#]Xi#]Xj#]Xu#]X#l#]X~O#_#]X#p#]X!Z#]X!]#]X!`#]X!a#]X!h#]X~P&TOP{OQ{OR|OS|OT!POU!QOW!OOX!OOY!OOZ!OO[!OO]!OO^zOd}Oe}Of}Og}Oh}Oi}Oj!RO~OP{OQ{OR|OS|Od}Oe}Of}Og}Oh}Oi}Ou#ZX~O#_#ZX#p#ZX!]#ZX!`#ZX!a#ZX#l#ZX!h#ZX~P*hOl!UOm`On[OoPOpROqgOwiO|[O!WRO!X[O!Y[O!ehO!l[O!qjO!skO!ulO#^XO#_!SO#bQO#mYO#nZO~OlyOn[OoPOpRO|[O!RuO!WRO!X[O!Y[O!l[O#^XO#_!SO#bQO#mYO#nZO~O#o!aO~P-ZOV!cO#_#]X#p#]X!]#]X!`#]X!a#]X!h#]X~P'VOP#[XQ#[XR#[XS#[XT#[XU#[XW#[XX#[XY#[XZ#[X[#[X]#[X^#[Xd#[Xe#[Xf#[Xg#[Xh#[Xi#[Xj#[Xu#ZX~O#_#ZX#p#ZX!]#ZX!`#ZX!a#ZX#l#ZX!h#ZX~P.|Ou#ZX#_#ZX#p#ZX!]#ZX!`#ZX!a#ZX#l#ZX!h#ZX~OT!POU!QOj!RO~P0zOV!cO_!dO`!dOa!dOb!dOc!dOk!dO~O!Z!eO~P0zOu!hO#_!gO#p!gO~Ol!jO!R!lO!Z!PP~Ol!pOn[OoPOpRO|[O!WRO!X[O!Y[O!l[O#^XO#bQO#mYO#nZO~OlyOn[OoPOpRO|[O!WRO!X[O!Y[O!l[O#^XO#bQO#mYO#nZO~O!Z!wO~Ol!jO!RuO~Ol#OO|#OO#^XO~Ol#PO#^XO~O#b#QO#d#QO#e#QO#f#QO#g#QO#h#QO~O!TpO#b#SO#dnO#eoO~OqgO!b#TO~P3tOqgO!RuO!btOu!fa!Z!fa#_!fa#p!fa#l!fa!]!fa!`!fa!a!fa!h!fa~P3tO#_!SO~P#QO#_!SO~P&TO#_!SO#l#lO~P*hO#l#lO~O#l#lOu#ZX~O!Z!eO#l#lOu#ZX~O#l#lO~P.|OT!POU!QOj!RO#_!SOu#ZX~O#l#lO~P8bOu!hO~O#o#nO~P-ZO!RuO#_#pO#o#rO~O#_#sO#o#nO~P3tOlSOm`On[OoPOpROqgOwiO|[O!WRO!X[O!Y[O!ehO!l[O!qjO!skO!ulO#^XO#bQO#mYO#nZO~O#_#xO~P9mOu!hO#_ta#pta#lta!]ta!`ta!ata!hta~Ol!jO!R!lO!Z!PX~OpRO|$OO!WRO!X$OO!Y$OO#bQO~O!Z$QO~OqgO!RuO!btOT#[XU#[XW#[XX#[XY#[XZ#[X[#[X]#[Xj#[X!Z#[X~P3tOT!POU!QOj!RO!Z#jX~OT!POU!QOW!OOX!OOY!OOZ!OO[!OO]!OOj!RO~O!Z#jX~P=qO!Z$RO~O!Z$SO~P=qOT!POU!QOj!RO!Z$SO~Ou!ra#_!ra#p!ra!]!ra!`!ra!a!ra#l!ra!h!ra~P)WOP{OQ{OR|OS|Od}Oe}Of}Og}Oh}Oi}O~Ou!ra#_!ra#p!ra!]!ra!`!ra!a!ra#l!ra!h!ra~P?oOT!POU!QOj!ROu!ra#_!ra#p!ra!]!ra!`!ra!a!ra#l!ra!h!ra~Ol!jO!RuOu!ta#_!ta#p!ta!]!ta!`!ta!a!ta#l!ta!h!ta~O^zOR!kiS!kid!kie!kif!kig!kih!kii!kiu!ki#_!ki#p!ki#l!ki!]!ki!`!ki!a!ki!h!ki~OP!kiQ!ki~PBdOP{OQ{O~PBdOP{OQ{Od!kie!kif!kig!kih!kii!kiu!ki#_!ki#p!ki#l!ki!]!ki!`!ki!a!ki!h!ki~OR!kiS!ki~PDPOR|OS|O^zO~PDPOR|OS|O~PDPOW!OOX!OOY!OOZ!OO[!OO]!OOTxijxiuxi#_xi#pxi#lxi!Zxi!]xi!`xi!axi!hxi~OU!QO~PEvOU!QO~PFYOUxi~PEvOT!POU!QOjxiuxi#_xi#pxi#lxi!Zxi!]xi!`xi!axi!hxi~OW!OOX!OOY!OOZ!OO[!OO]!OO~PGdO#_!SO#l$YO~P*hO#l$YO~O#l$YOu#ZX~O!Z!eO#l$YOu#ZX~O#l$YO~P.|O#l$YO~P8bOqgO!btO~P-ZO#_!SO#l$YO~O!RuO#_#pO#o$]O~O#_#sO#o$_O~P3tOu!hO#_!wi#p!wi!]!wi!`!wi!a!wi#l!wi!h!wi~Ou!hO#_!vi#p!vi!]!vi!`!vi!a!vi#l!vi!h!vi~Ou!hO!]!^X!`!^X!a!^X!h!^X~O#_$bO!]#iP!`#iP!a#iP!h#iP~P9mO!]$fO!`$gO!a$hO~O!R!lO!Z!Pa~O#_$lO~P9mO!]$fO!`$gO!a$oO~O!RuOu!ti#_!ti#p!ti!]!ti!`!ti!a!ti#l!ti!h!ti~Ol!jO~PM`O#_!SO#l$sO~O#_!SO#lzi~O!RuO#_#pO#o$vO~O#_#sO#o$wO~P3tOu!hO#_$xO~O#_$bO!]#iX!`#iX!a#iX!h#iX~P9mOl$zO~O!Z${O~O!a$|O~O!`$gO!a$|O~Ou!hO!]$fO!`$gO!a%OO~O#_$bO!]#iP!`#iP!a#iP~P9mO!a%VO!h%UO~O!a%XO~O!a%YO~O!`$gO!a%YO~O!RuOu!tq#_!tq#p!tq!]!tq!`!tq!a!tq#l!tq!h!tq~OqgO!btO#lzq~P-ZO#_!SO#lzq~O!Z%_O~O!a%aO~O!a%bO~O!`$gO!a%bO~O!]$fO!`$gO!a%bO~O!a%fO!h%UO~O!Z%iO!e%hO~O!a%fO~O!a%jO~OqgO!btO#lzy~P-ZO!a%mO~O!`$gO!a%mO~O!a%pO~O!a%sO~O!Z%tO~O|!l~",
|
||||||
goto: "8q#lPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP#mP$WP$m%k&y'PP(Z(g)a)dP)jP*q*qPPPP*uP+R+kPPP,R#mP,k-UP-Y-`-uP.l/p$W$WP$WP$WP$W$W0v0|1Y1|2S2^2d2k2q2{3R3]3gPPP3m3q4f6[PPP7fP7vPPPPP7z8Q8WraOf!c!d!e!h!w#w$P$Q$R$a$i$w%Z%e%pQ!YXR#e!TwaOXf!T!c!d!e!h!w#w$P$Q$R$a$i$w%Z%e%pr_Of!c!d!e!h!w#w$P$Q$R$a$i$w%Z%e%pQ!]XS!qh%dQ!viQ!zkQ#[!QQ#^!PQ#a!RR#h!TvTOfh!c!d!e!h!w#w$P$Q$R$a$i$w%Z%d%e%p!W[STZikuxz{|}!O!P!Q!R!U!V!_!b!p#i#n#s$Z$p%X%gS!VX!TQ!}mR#OnQ!XXR#d!TrSOf!c!d!e!h!w#w$P$Q$R$a$i$w%Z%e%p!WySTZikuxz{|}!O!P!Q!R!U!V!_!b!p#i#n#s$Z$p%X%gS!UX!TT!ph%devSTx!U!V!p#i$p%X%graOf!c!d!e!h!w#w$P$Q$R$a$i$w%Z%e%pdtSTx!U!V!p#i$p%X%gQ!YXQ#SuR#e!TR!ogX!mg!k!n#|#S[OSTXZfhikuxz{|}!O!P!Q!R!T!U!V!_!b!c!d!e!h!p!w#i#n#s#w$P$Q$R$Z$a$i$p$w%X%Z%d%e%g%pR#}!lTpQrQ$g#xQ$n$SQ$|$hR%`$}Q#x!eQ$S!wQ$j$QQ$k$RQ%[$wQ%h%ZQ%n%eR%q%pQ$f#xQ$m$SQ$y$gQ${$hQ%V$nS%_$|$}R%j%`dvSTx!U!V!p#i$p%X%gQ!`ZQ#l!_X#o!`#l#p$XvUOXf!T!c!d!e!h!w#w$P$Q$R$a$i$w%Z%e%pT!sh%dT%O$j%PQ%S$jR%c%PwUOXf!T!c!d!e!h!w#w$P$Q$R$a$i$w%Z%e%prWOf!c!d!e!h!w#w$P$Q$R$a$i$w%Z%e%pQ!WXQ!ykQ#U{Q#X|Q#Z}R#c!T#T[OSTXZfhikuxz{|}!O!P!Q!R!T!U!V!_!b!c!d!e!h!p!w#i#n#s#w$P$Q$R$Z$a$i$p$w%X%Z%d%e%g%p![[STZhikuxz{|}!O!P!Q!R!U!V!_!b!p#i#n#s$Z$p%X%d%gw]OXf!T!c!d!e!h!w#w$P$Q$R$a$i$w%Z%e%pQfOR!if^!fc!^#t#u#v$`$hR#y!fQ!TXQ!_Z`#b!T!_#i#j$U$p%X%gS#i!U!VS#j!W!]S$U#c#hQ$p$WR%X$qQ!kgR#{!kQ!ngQ#|!kT$O!n#|QrQR#QrS$a#w$iR$u$aQ$q$WR%Y$qYxST!U!V!pR#TxQ%P$jR%a%PQ#p!`Q$X#lT$]#p$XQ#s!bQ$Z#nT$^#s$ZQ!|lR$T!|TeOfScOfS!^X!TQ#t!cQ#u!d`#v!e!w$Q$R$w%Z%e%pQ#z!hU$`#w$a$iR$h$PvVOXf!T!c!d!e!h!w#w$P$Q$R$a$i$w%Z%e%pdtSTx!U!V!p#i$p%X%gQ!bZS!rh%dQ!uiQ!xkQ#SuQ#UzQ#V{Q#W|Q#Y}Q#[!OQ#]!PQ#_!QQ#`!RQ#n!_X#r!b#n#s$Zr^Of!c!d!e!h!w#w$P$Q$R$a$i$w%Z%e%p![ySTZhikuxz{|}!O!P!Q!R!U!V!_!b!p#i#n#s$Z$p%X%d%gQ![XR#g!T[wSTx!U!V!pQ$W#iV%W$p%X%gTqQrQ$b#wR$}$iQ!thR%m%drbOf!c!d!e!h!w#w$P$Q$R$a$i$w%Z%e%pQ!ZXR#f!T",
|
goto: "9Z#lPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP#mP$WP$m%k&y'PP(Z(g)a)dP)jP*q*qPPPP*uP+R+kPPP,R#mP,s-^P-b-h-}P.t/x$W$WP$WP$WP$W$W1O1U1b2U2d2n2t2{3R3]3c3m3wPPP4V4Z5O6tPPP8OP8`PPPPP8d8j8praOf!c!d!e!h!w#x$Q$R$S$d$l${%_%i%tQ!YXR#f!TwaOXf!T!c!d!e!h!w#x$Q$R$S$d$l${%_%i%tr_Of!c!d!e!h!w#x$Q$R$S$d$l${%_%i%tQ!]XS!qh%hQ!viQ!zkQ#]!QQ#_!PQ#b!RR#i!TvTOfh!c!d!e!h!w#x$Q$R$S$d$l${%_%h%i%t!W[STZikuxz{|}!O!P!Q!R!U!V!_!b!p#j#o#t$^$t%]%kS!VX!TQ#OmR#PnQ!XXR#e!TrSOf!c!d!e!h!w#x$Q$R$S$d$l${%_%i%t!WySTZikuxz{|}!O!P!Q!R!U!V!_!b!p#j#o#t$^$t%]%kS!UX!TT!ph%hevSTx!U!V!p#j$t%]%kraOf!c!d!e!h!w#x$Q$R$S$d$l${%_%i%tdtSTx!U!V!p#j$t%]%kQ!YXQ#TuR#f!TR!ogX!mg!k!n#}#S[OSTXZfhikuxz{|}!O!P!Q!R!T!U!V!_!b!c!d!e!h!p!w#j#o#t#x$Q$R$S$^$d$l$t${%]%_%h%i%k%tR$O!lTpQrQ$j#yQ$q$TQ%Q$kR%d%RQ#y!eQ$T!wQ$m$RQ$n$SQ%`${Q%l%_Q%r%iR%u%tQ$i#yQ$p$TQ$}$jQ%P$kQ%Z$qS%c%Q%RR%n%ddvSTx!U!V!p#j$t%]%kQ!`Z[!|l!{!}$U$V$rQ#m!_X#p!`#m#q$[vUOXf!T!c!d!e!h!w#x$Q$R$S$d$l${%_%i%tT!sh%hT%S$m%TQ%W$mR%g%TwUOXf!T!c!d!e!h!w#x$Q$R$S$d$l${%_%i%trWOf!c!d!e!h!w#x$Q$R$S$d$l${%_%i%tQ!WXQ!ykQ#V{Q#Y|Q#[}R#d!T#T[OSTXZfhikuxz{|}!O!P!Q!R!T!U!V!_!b!c!d!e!h!p!w#j#o#t#x$Q$R$S$^$d$l$t${%]%_%h%i%k%t![[STZhikuxz{|}!O!P!Q!R!U!V!_!b!p#j#o#t$^$t%]%h%kw]OXf!T!c!d!e!h!w#x$Q$R$S$d$l${%_%i%tQfOR!if^!fc!^#u#v#w$c$kR#z!fQ!TXQ!_Z`#c!T!_#j#k$X$t%]%kS#j!U!VS#k!W!]S$X#d#iQ$t$ZR%]$uQ!kgQ!{lU#|!k!{$VR$V!}Q!ngQ#}!kT$P!n#}QrQR#RrS$d#x$lR$y$dQ$u$ZR%^$uYxST!U!V!pR#UxQ%T$mR%e%TQ#q!`Q$[#mT$`#q$[Q#t!bQ$^#oT$a#t$^Q!}lQ$U!{U$W!}$U$rR$r$VTeOfScOfS!^X!TQ#u!cQ#v!d`#w!e!w$R$S${%_%i%tQ#{!hU$c#x$d$lR$k$QvVOXf!T!c!d!e!h!w#x$Q$R$S$d$l${%_%i%tdtSTx!U!V!p#j$t%]%kQ!bZS!rh%hQ!uiQ!xkQ#TuQ#VzQ#W{Q#X|Q#Z}Q#]!OQ#^!PQ#`!QQ#a!RQ#o!_X#s!b#o#t$^r^Of!c!d!e!h!w#x$Q$R$S$d$l${%_%i%t![ySTZhikuxz{|}!O!P!Q!R!U!V!_!b!p#j#o#t$^$t%]%h%kQ![XR#h!T[wSTx!U!V!pQ$Z#jV%[$t%]%kTqQrQ$e#xR%R$lQ!thR%q%hrbOf!c!d!e!h!w#x$Q$R$S$d$l${%_%i%tQ!ZXR#g!T",
|
||||||
nodeNames: "⚠ Star Slash Plus Minus And Or Eq EqEq Neq Lt Lte Gt Gte Modulo PlusEq MinusEq StarEq SlashEq ModuloEq Band Bor Bxor Shl Shr Ushr NullishCoalesce NullishEq Identifier AssignableIdentifier Word IdentifierBeforeDot CurlyString Do Comment Program PipeExpr operator WhileExpr keyword ConditionalOp ParenExpr FunctionCall DotGet Number PositionalArg FunctionDef Params NamedParam NamedArgPrefix String StringFragment Interpolation EscapeSeq DoubleQuote Boolean Null colon CatchExpr keyword Block FinallyExpr keyword keyword Underscore NamedArg IfExpr keyword FunctionCall ElseIfExpr keyword ElseExpr FunctionCallOrIdentifier BinOp Regex Dict Array FunctionCallWithBlock TryExpr keyword Throw keyword Import keyword CompoundAssign Assign",
|
nodeNames: "⚠ Star Slash Plus Minus And Or Eq EqEq Neq Lt Lte Gt Gte Modulo PlusEq MinusEq StarEq SlashEq ModuloEq Band Bor Bxor Shl Shr Ushr NullishCoalesce NullishEq Identifier AssignableIdentifier Word IdentifierBeforeDot CurlyString Do Comment Program PipeExpr operator WhileExpr keyword ConditionalOp ParenExpr FunctionCall DotGet Number PositionalArg FunctionDef Params NamedParam NamedArgPrefix String StringFragment Interpolation EscapeSeq DoubleQuote Boolean Null colon CatchExpr keyword Block FinallyExpr keyword keyword Underscore NamedArg IfExpr keyword FunctionCall ElseIfExpr keyword ElseExpr FunctionCallOrIdentifier BinOp Regex Dict Array FunctionCallWithBlock TryExpr keyword Throw keyword Import keyword CompoundAssign Assign",
|
||||||
maxTerm: 124,
|
maxTerm: 124,
|
||||||
context: trackScope,
|
context: trackScope,
|
||||||
|
|
@ -23,5 +23,5 @@ export const parser = LRParser.deserialize({
|
||||||
tokenizers: [operatorTokenizer, 1, 2, 3, tokenizer, new LocalTokenGroup("[~RP!O!PU~ZO#`~~", 11)],
|
tokenizers: [operatorTokenizer, 1, 2, 3, tokenizer, new LocalTokenGroup("[~RP!O!PU~ZO#`~~", 11)],
|
||||||
topRules: {"Program":[0,35]},
|
topRules: {"Program":[0,35]},
|
||||||
specialized: [{term: 28, get: (value: any, stack: any) => (specializeKeyword(value, stack) << 1), external: specializeKeyword},{term: 28, get: (value: keyof typeof spec_Identifier) => spec_Identifier[value] || -1}],
|
specialized: [{term: 28, get: (value: any, stack: any) => (specializeKeyword(value, stack) << 1), external: specializeKeyword},{term: 28, get: (value: keyof typeof spec_Identifier) => spec_Identifier[value] || -1}],
|
||||||
tokenPrec: 2299
|
tokenPrec: 2370
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -1023,7 +1023,7 @@ describe('import', () => {
|
||||||
expect(`import str`).toMatchTree(`
|
expect(`import str`).toMatchTree(`
|
||||||
Import
|
Import
|
||||||
keyword import
|
keyword import
|
||||||
AssignableIdentifier str
|
Identifier str
|
||||||
`)
|
`)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
@ -1031,9 +1031,20 @@ describe('import', () => {
|
||||||
expect(`import str math list`).toMatchTree(`
|
expect(`import str math list`).toMatchTree(`
|
||||||
Import
|
Import
|
||||||
keyword import
|
keyword import
|
||||||
AssignableIdentifier str
|
Identifier str
|
||||||
AssignableIdentifier math
|
Identifier math
|
||||||
AssignableIdentifier list
|
Identifier list
|
||||||
|
`)
|
||||||
|
})
|
||||||
|
|
||||||
|
test('parses named args', () => {
|
||||||
|
expect(`import str only=ends-with?`).toMatchTree(`
|
||||||
|
Import
|
||||||
|
keyword import
|
||||||
|
Identifier str
|
||||||
|
NamedArg
|
||||||
|
NamedArgPrefix only=
|
||||||
|
Identifier ends-with?
|
||||||
`)
|
`)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
@ -45,7 +45,12 @@ export const globals = {
|
||||||
return typeof v !== 'string' || this.scope.has(v)
|
return typeof v !== 'string' || this.scope.has(v)
|
||||||
},
|
},
|
||||||
ref: (fn: Function) => fn,
|
ref: (fn: Function) => fn,
|
||||||
import: function (this: VM, ...idents: string[]) {
|
import: function (this: VM, atNamed: Record<any, string | string[]> = {}, ...idents: string[]) {
|
||||||
|
const onlyArray = Array.isArray(atNamed.only) ? atNamed.only : [atNamed.only].filter(a => a)
|
||||||
|
const only = new Set(onlyArray)
|
||||||
|
const wantsOnly = only.size > 0
|
||||||
|
|
||||||
|
|
||||||
for (const ident of idents) {
|
for (const ident of idents) {
|
||||||
const module = this.get(ident)
|
const module = this.get(ident)
|
||||||
|
|
||||||
|
|
@ -54,6 +59,7 @@ export const globals = {
|
||||||
|
|
||||||
for (const [name, value] of module.value.entries()) {
|
for (const [name, value] of module.value.entries()) {
|
||||||
if (value.type === 'dict') throw new Error(`import: can't import dicts in dicts`)
|
if (value.type === 'dict') throw new Error(`import: can't import dicts in dicts`)
|
||||||
|
if (wantsOnly && !only.has(name)) continue
|
||||||
this.set(name, value)
|
this.set(name, value)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user