From dec39a539d71e97162ef1c969472a826439c7591 Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Mon, 17 Jun 2024 16:29:24 +0200 Subject: [PATCH 001/191] added the formatter feature --- src/org/rascalmpl/library/lang/json/IO.java | 34 ++++++++++++++++--- src/org/rascalmpl/library/lang/json/IO.rsc | 26 ++++++++++++-- .../lang/json/internal/JsonValueWriter.java | 21 ++++++++++++ 3 files changed, 74 insertions(+), 7 deletions(-) diff --git a/src/org/rascalmpl/library/lang/json/IO.java b/src/org/rascalmpl/library/lang/json/IO.java index 6cecd64debc..a44c09b83af 100644 --- a/src/org/rascalmpl/library/lang/json/IO.java +++ b/src/org/rascalmpl/library/lang/json/IO.java @@ -22,6 +22,7 @@ import org.rascalmpl.debug.IRascalMonitor; import org.rascalmpl.exceptions.RuntimeExceptionFactory; +import org.rascalmpl.exceptions.Throw; import org.rascalmpl.library.lang.json.internal.IValueAdapter; import org.rascalmpl.library.lang.json.internal.JSONReadingTypeVisitor; import org.rascalmpl.library.lang.json.internal.JsonValueReader; @@ -29,14 +30,16 @@ import org.rascalmpl.types.TypeReifier; import org.rascalmpl.uri.URIResolverRegistry; import org.rascalmpl.uri.URIUtil; +import org.rascalmpl.values.IRascalValueFactory; +import org.rascalmpl.values.functions.IFunction; import io.usethesource.vallang.IBool; import io.usethesource.vallang.IConstructor; import io.usethesource.vallang.IInteger; +import io.usethesource.vallang.ISet; import io.usethesource.vallang.ISourceLocation; import io.usethesource.vallang.IString; import io.usethesource.vallang.IValue; -import io.usethesource.vallang.IValueFactory; import io.usethesource.vallang.type.Type; import io.usethesource.vallang.type.TypeStore; @@ -49,10 +52,10 @@ import com.ibm.icu.text.DateFormat; public class IO { - private final IValueFactory values; + private final IRascalValueFactory values; private final IRascalMonitor monitor; - public IO(IValueFactory values, IRascalMonitor monitor) { + public IO(IRascalValueFactory values, IRascalMonitor monitor) { super(); this.values = values; this.monitor = monitor; @@ -137,7 +140,7 @@ public IValue parseJSON(IValue type, IString src, IString dateTimeFormat, IBool } } - public void writeJSON(ISourceLocation loc, IValue value, IBool unpackedLocations, IString dateTimeFormat, IBool dateTimeAsInt, IInteger indent, IBool dropOrigins) { + public void writeJSON(ISourceLocation loc, IValue value, IBool unpackedLocations, IString dateTimeFormat, IBool dateTimeAsInt, IInteger indent, IBool dropOrigins, ISet formatters) { try (JsonWriter out = new JsonWriter(new OutputStreamWriter(URIResolverRegistry.getInstance().getOutputStream(loc, false), Charset.forName("UTF8")))) { if (indent.intValue() > 0) { out.setIndent(" ".substring(0, indent.intValue() % 9)); @@ -154,8 +157,28 @@ public void writeJSON(ISourceLocation loc, IValue value, IBool unpackedLocations } } - public IString asJSON(IValue value, IBool unpackedLocations, IString dateTimeFormat, IBool dateTimeAsInt, IInteger indent, IBool dropOrigins) { + public IString asJSON(IValue value, IBool unpackedLocations, IString dateTimeFormat, IBool dateTimeAsInt, IInteger indent, IBool dropOrigins, ISet formatters) { StringWriter string = new StringWriter(); + IFunction formatFunction = null; + + if (!formatters.isEmpty()) { + // here we construct a choice function (should be an IRascalValueFactory builder) + var first = formatters.iterator().next(); + formatFunction = values.function(first.getType(), (args, kwargs) -> { + Throw thrown = null; + for (IValue f : formatters) { + try { + return ((IFunction) f).call(args); + } + catch (Throw x) { + thrown = x; + // callfailed is to be expected + } + } + + throw thrown; + }); + } try (JsonWriter out = new JsonWriter(string)) { if (indent.intValue() > 0) { @@ -166,6 +189,7 @@ public IString asJSON(IValue value, IBool unpackedLocations, IString dateTimeFor .setDatesAsInt(dateTimeAsInt.getValue()) .setUnpackedLocations(unpackedLocations.getValue()) .setDropOrigins(dropOrigins.getValue()) + .setFormatters(formatFunction) .write(out, value); return values.string(string.toString()); diff --git a/src/org/rascalmpl/library/lang/json/IO.rsc b/src/org/rascalmpl/library/lang/json/IO.rsc index 463c8f299c4..505c349c2e7 100644 --- a/src/org/rascalmpl/library/lang/json/IO.rsc +++ b/src/org/rascalmpl/library/lang/json/IO.rsc @@ -57,7 +57,29 @@ java &T parseJSON(type[&T] expected, str src, str dateTimeFormat = "yyyy-MM-dd\' If `dateTimeAsInt` is set to `true`, the dateTime values are converted to an int that represents the number of milliseconds from 1970-01-01T00:00Z. If `indent` is set to a number greater than 0, the JSON file will be formatted with `indent` number of spaces as indentation. } -java void writeJSON(loc target, value val, bool unpackedLocations=false, str dateTimeFormat="yyyy-MM-dd\'T\'HH:mm:ssZZZZZ", bool dateTimeAsInt=false, int indent=0, bool dropOrigins=true); +java void writeJSON(loc target, value val, bool unpackedLocations=false, str dateTimeFormat="yyyy-MM-dd\'T\'HH:mm:ssZZZZZ", bool dateTimeAsInt=false, int indent=0, bool dropOrigins=true, set[JSONFormatter[value]] formatters = {}); @javaClass{org.rascalmpl.library.lang.json.IO} -java str asJSON(value val, bool unpackedLocations=false, str dateTimeFormat="yyyy-MM-dd\'T\'HH:mm:ssZZZZZ", bool dateTimeAsInt=false, int indent = 0, bool dropOrigins=true); +java str asJSON(value val, bool unpackedLocations=false, str dateTimeFormat="yyyy-MM-dd\'T\'HH:mm:ssZZZZZ", bool dateTimeAsInt=false, int indent = 0, bool dropOrigins=true, set[JSONFormatter[value]] formatters = {}); + +@synopsis{((writeJSON)) and ((asJSON)) uses `Formatter` functions to flatten structured data to strings, on-demand} +@description{ +A JSONFormatter can be passed to the ((writeJSON)) and ((asJSON)) functions. When/if the type matches an algebraic data-type +to be serialized, then it is applied and the resulting string is serialized to the JSON stream instead of the structured data. + +The goal of JSONFormat and its dual JSONParser is to bridge the gap between string-based JSON encodings and typical +Rascal algebraic combinators. +} +alias JSONFormatter[&T] = str (&T); + +@synopsis{((readJSON)) and ((parseJSON)) use JSONParser functions to turn unstructured data into structured data.} +@description{ +A parser JSONParser can be passed to ((readJSON)) and ((parseJSON)). When the reader expects an algebraic data-type +or a syntax type, but the input at that moment is a JSON string, then the parser is called on that string (after string.trim()). + +The resulting data constructor is put into the resulting value instead of a normal string. + +The goal of JSONParser and its dual JSONFormatter is to bridge the gap between string-based JSON encodings and typical +Rascal algebraic combinators. +} +alias JSONParser[&T] = &T (str); \ No newline at end of file diff --git a/src/org/rascalmpl/library/lang/json/internal/JsonValueWriter.java b/src/org/rascalmpl/library/lang/json/internal/JsonValueWriter.java index c20838b972f..b27431c5bde 100644 --- a/src/org/rascalmpl/library/lang/json/internal/JsonValueWriter.java +++ b/src/org/rascalmpl/library/lang/json/internal/JsonValueWriter.java @@ -17,6 +17,9 @@ import java.util.Map; import java.util.Map.Entry; +import org.rascalmpl.exceptions.Throw; +import org.rascalmpl.values.functions.IFunction; + import com.google.gson.stream.JsonWriter; import io.usethesource.vallang.IBool; @@ -44,6 +47,7 @@ public class JsonValueWriter { private boolean datesAsInts = true; private boolean unpackedLocations = false; private boolean dropOrigins = true; + private IFunction formatters; public JsonValueWriter() { setCalendarFormat("yyyy-MM-dd'T'HH:mm:ss'Z'"); @@ -78,6 +82,11 @@ public JsonValueWriter setDropOrigins(boolean setting) { return this; } + public JsonValueWriter setFormatters(IFunction formatters) { + this.formatters = formatters; + return this; + } + public void write(JsonWriter out, IValue value) throws IOException { value.accept(new IValueVisitor() { @@ -222,6 +231,18 @@ public Void visitNode(INode o) throws IOException { @Override public Void visitConstructor(IConstructor o) throws IOException { + if (formatters != null) { + try { + var formatted = formatters.call(o); + if (formatted != null) { + visitString((IString) formatted); + return null; + } + } + catch (Throw x) { + // it happens + } + } if (o.getConstructorType().getArity() == 0 && !o.asWithKeywordParameters().hasParameters()) { // enums! out.value(o.getName()); From c4107bfbd7cb49b32c15648d118c4374f81dc8ed Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Mon, 17 Jun 2024 17:20:19 +0200 Subject: [PATCH 002/191] also added dual parsing functionality for the reader/unfinished --- src/org/rascalmpl/library/lang/json/IO.java | 47 +++++++++---------- src/org/rascalmpl/library/lang/json/IO.rsc | 47 ++++++++++++------- .../lang/json/internal/JsonValueReader.java | 40 ++++++++++++++-- .../rascalmpl/semantics/dynamic/Module.java | 2 - ...ascalJUnitParallelRecursiveTestRunner.java | 1 - .../infrastructure/RascalJUnitTestRunner.java | 1 - .../rascalmpl/test/parser/StackNodeTest.java | 1 - 7 files changed, 88 insertions(+), 51 deletions(-) diff --git a/src/org/rascalmpl/library/lang/json/IO.java b/src/org/rascalmpl/library/lang/json/IO.java index a44c09b83af..9919b79214b 100644 --- a/src/org/rascalmpl/library/lang/json/IO.java +++ b/src/org/rascalmpl/library/lang/json/IO.java @@ -22,11 +22,11 @@ import org.rascalmpl.debug.IRascalMonitor; import org.rascalmpl.exceptions.RuntimeExceptionFactory; -import org.rascalmpl.exceptions.Throw; import org.rascalmpl.library.lang.json.internal.IValueAdapter; import org.rascalmpl.library.lang.json.internal.JSONReadingTypeVisitor; import org.rascalmpl.library.lang.json.internal.JsonValueReader; import org.rascalmpl.library.lang.json.internal.JsonValueWriter; +import org.rascalmpl.types.ReifiedType; import org.rascalmpl.types.TypeReifier; import org.rascalmpl.uri.URIResolverRegistry; import org.rascalmpl.uri.URIUtil; @@ -103,7 +103,7 @@ public IValue fromJSON(IValue type, IString src) { } - public IValue readJSON(IValue type, ISourceLocation loc, IString dateTimeFormat, IBool lenient, IBool trackOrigins) { + public IValue readJSON(IValue type, ISourceLocation loc, IString dateTimeFormat, IBool lenient, IBool trackOrigins, IFunction parsers) { TypeStore store = new TypeStore(); Type start = new TypeReifier(values).valueToType((IConstructor) type, store); @@ -111,6 +111,7 @@ public IValue readJSON(IValue type, ISourceLocation loc, IString dateTimeFormat, in.setLenient(lenient.getValue()); return new JsonValueReader(values, store, monitor, trackOrigins.getValue() ? loc : null) .setCalendarFormat(dateTimeFormat.getValue()) + .setParsers(parsers) .read(in, start); } catch (IOException e) { @@ -122,14 +123,20 @@ public IValue readJSON(IValue type, ISourceLocation loc, IString dateTimeFormat, } } - public IValue parseJSON(IValue type, IString src, IString dateTimeFormat, IBool lenient, IBool trackOrigins) { + public IValue parseJSON(IValue type, IString src, IString dateTimeFormat, IBool lenient, IBool trackOrigins, IFunction parsers) { TypeStore store = new TypeStore(); Type start = new TypeReifier(values).valueToType((IConstructor) type, store); + if (parsers.getType() instanceof ReifiedType && parsers.getType().getTypeParameters().getFieldType(0).isBottom()) { + // ignore the default parser + parsers = null; + } + try (JsonReader in = new JsonReader(new StringReader(src.getValue()))) { in.setLenient(lenient.getValue()); return new JsonValueReader(values, store, monitor, trackOrigins.getValue() ? URIUtil.rootLocation("unknown") : null) .setCalendarFormat(dateTimeFormat.getValue()) + .setParsers(parsers) .read(in, start); } catch (IOException e) { @@ -140,7 +147,13 @@ public IValue parseJSON(IValue type, IString src, IString dateTimeFormat, IBool } } - public void writeJSON(ISourceLocation loc, IValue value, IBool unpackedLocations, IString dateTimeFormat, IBool dateTimeAsInt, IInteger indent, IBool dropOrigins, ISet formatters) { + public void writeJSON(ISourceLocation loc, IValue value, IBool unpackedLocations, IString dateTimeFormat, IBool dateTimeAsInt, IInteger indent, IBool dropOrigins, IFunction formatter) { + if (formatter.getType().getFieldType(0).isTop()) { + // ignore default function + formatter = null; + } + + try (JsonWriter out = new JsonWriter(new OutputStreamWriter(URIResolverRegistry.getInstance().getOutputStream(loc, false), Charset.forName("UTF8")))) { if (indent.intValue() > 0) { out.setIndent(" ".substring(0, indent.intValue() % 9)); @@ -151,33 +164,19 @@ public void writeJSON(ISourceLocation loc, IValue value, IBool unpackedLocations .setDatesAsInt(dateTimeAsInt.getValue()) .setUnpackedLocations(unpackedLocations.getValue()) .setDropOrigins(dropOrigins.getValue()) + .setFormatters(formatter) .write(out, value); } catch (IOException e) { throw RuntimeExceptionFactory.io(values.string(e.getMessage()), null, null); } } - public IString asJSON(IValue value, IBool unpackedLocations, IString dateTimeFormat, IBool dateTimeAsInt, IInteger indent, IBool dropOrigins, ISet formatters) { + public IString asJSON(IValue value, IBool unpackedLocations, IString dateTimeFormat, IBool dateTimeAsInt, IInteger indent, IBool dropOrigins, IFunction formatter) { StringWriter string = new StringWriter(); - IFunction formatFunction = null; - - if (!formatters.isEmpty()) { - // here we construct a choice function (should be an IRascalValueFactory builder) - var first = formatters.iterator().next(); - formatFunction = values.function(first.getType(), (args, kwargs) -> { - Throw thrown = null; - for (IValue f : formatters) { - try { - return ((IFunction) f).call(args); - } - catch (Throw x) { - thrown = x; - // callfailed is to be expected - } - } - throw thrown; - }); + if (formatter.getType().getFieldType(0).isTop()) { + // ignore default function + formatter = null; } try (JsonWriter out = new JsonWriter(string)) { @@ -189,7 +188,7 @@ public IString asJSON(IValue value, IBool unpackedLocations, IString dateTimeFor .setDatesAsInt(dateTimeAsInt.getValue()) .setUnpackedLocations(unpackedLocations.getValue()) .setDropOrigins(dropOrigins.getValue()) - .setFormatters(formatFunction) + .setFormatters(formatter) .write(out, value); return values.string(string.toString()); diff --git a/src/org/rascalmpl/library/lang/json/IO.rsc b/src/org/rascalmpl/library/lang/json/IO.rsc index 505c349c2e7..b503db12a79 100644 --- a/src/org/rascalmpl/library/lang/json/IO.rsc +++ b/src/org/rascalmpl/library/lang/json/IO.rsc @@ -35,32 +35,37 @@ public java &T fromJSON(type[&T] typ, str src); @javaClass{org.rascalmpl.library.lang.json.IO} @synopsis{reads JSON values from a stream In general the translation behaves as follows: - * Objects translate to map[str,value] by default, unless a node is expected (properties are then translated to keyword fields) - * Arrays translate to lists by default, or to a set if that is expected or a tuple if that is expected. Arrays may also be interpreted as constructors or nodes (see below) - * Booleans translate to bools - * If the expected type provided is a datetime then an int instant is mapped and if a string is found then the dateTimeFormat parameter will be used to configure the parsing of a date-time string - * If the expected type provided is an ADT then this reader will try to "parse" each object as a constructor for that ADT. It helps if there is only one constructor for that ADT. Positional parameters will be mapped by name as well as keyword parameters. - * If the expected type provided is a node then it will construct a node named "object" and map the fields to keyword fields. - * If num, int, real or rat are expected both strings and number values are mapped - * If loc is expected than strings which look like URI are parsed (containing :/) or a file:/// URI is build, or if an object is found each separate field of - a location object is read from the respective properties: { scheme : str, authority: str?, path: str?, fragment: str?, query: str?, offset: int, length: int, begin: [bl, bc], end: [el, ec]}} -java &T readJSON(type[&T] expected, loc src, str dateTimeFormat = "yyyy-MM-dd\'T\'HH:mm:ssZZZZZ", bool lenient=false, bool trackOrigins=false); +* Objects translate to map[str,value] by default, unless a node is expected (properties are then translated to keyword fields) +* Arrays translate to lists by default, or to a set if that is expected or a tuple if that is expected. Arrays may also be interpreted as constructors or nodes (see below) +* Booleans translate to bools +* If the expected type provided is a datetime then an int instant is mapped and if a string is found then the dateTimeFormat parameter will be used to configure the parsing of a date-time string +* If the expected type provided is an ADT then this reader will try to "parse" each object as a constructor for that ADT. It helps if there is only one constructor for that ADT. Positional parameters will be mapped by name as well as keyword parameters. +* If the expected type provided is a node then it will construct a node named "object" and map the fields to keyword fields. +* If num, int, real or rat are expected both strings and number values are mapped +* If loc is expected than strings which look like URI are parsed (containing :/) or a file:/// URI is build, or if an object is found each separate field of + a location object is read from the respective properties: { scheme : str, authority: str?, path: str?, fragment: str?, query: str?, offset: int, length: int, begin: [bl, bc], end: [el, ec]} +* Go to ((JSONParser)) to find out how to use the optional `parsers` parameter. +} +java &T readJSON(type[&T] expected, loc src, str dateTimeFormat = "yyyy-MM-dd\'T\'HH:mm:ssZZZZZ", bool lenient=false, bool trackOrigins=false, JSONParser[node] parser = (type[void] _, str _) { throw "default parser"; }); @javaClass{org.rascalmpl.library.lang.json.IO} -@synopsis{parses JSON values from a string +@synopsis{parses JSON values from a string. In general the translation behaves as the same as for ((readJSON)).} -java &T parseJSON(type[&T] expected, str src, str dateTimeFormat = "yyyy-MM-dd\'T\'HH:mm:ssZZZZZ", bool lenient=false, bool trackOrigins=false); +java &T parseJSON(type[&T] expected, str src, str dateTimeFormat = "yyyy-MM-dd\'T\'HH:mm:ssZZZZZ", bool lenient=false, bool trackOrigins=false, JSONParser[node] parser = (type[void] _, str _) { throw "default parser"; }); @javaClass{org.rascalmpl.library.lang.json.IO} @synopsis{writes `val` to the location `target`} @description{ - If `dateTimeAsInt` is set to `true`, the dateTime values are converted to an int that represents the number of milliseconds from 1970-01-01T00:00Z. - If `indent` is set to a number greater than 0, the JSON file will be formatted with `indent` number of spaces as indentation. +* If `dateTimeAsInt` is set to `true`, the dateTime values are converted to an int that represents the number of milliseconds from 1970-01-01T00:00Z. +* If `indent` is set to a number greater than 0, the JSON file will be formatted with `indent` number of spaces as indentation. +* Check out ((JSONFormatter)) on how to use the `formatters` parameter + } -java void writeJSON(loc target, value val, bool unpackedLocations=false, str dateTimeFormat="yyyy-MM-dd\'T\'HH:mm:ssZZZZZ", bool dateTimeAsInt=false, int indent=0, bool dropOrigins=true, set[JSONFormatter[value]] formatters = {}); +java void writeJSON(loc target, value val, bool unpackedLocations=false, str dateTimeFormat="yyyy-MM-dd\'T\'HH:mm:ssZZZZZ", bool dateTimeAsInt=false, int indent=0, bool dropOrigins=true, JSONFormatter[value] formatter = str (value _) { fail; }); @javaClass{org.rascalmpl.library.lang.json.IO} -java str asJSON(value val, bool unpackedLocations=false, str dateTimeFormat="yyyy-MM-dd\'T\'HH:mm:ssZZZZZ", bool dateTimeAsInt=false, int indent = 0, bool dropOrigins=true, set[JSONFormatter[value]] formatters = {}); +@synopsis{Does what ((writeJSON)) does but serializes to a string instead of a location target.} +java str asJSON(value val, bool unpackedLocations=false, str dateTimeFormat="yyyy-MM-dd\'T\'HH:mm:ssZZZZZ", bool dateTimeAsInt=false, int indent = 0, bool dropOrigins=true, JSONFormatter[value] formatter = str (value _) { fail; }); @synopsis{((writeJSON)) and ((asJSON)) uses `Formatter` functions to flatten structured data to strings, on-demand} @description{ @@ -82,4 +87,12 @@ The resulting data constructor is put into the resulting value instead of a norm The goal of JSONParser and its dual JSONFormatter is to bridge the gap between string-based JSON encodings and typical Rascal algebraic combinators. } -alias JSONParser[&T] = &T (str); \ No newline at end of file +@benefits{ +* Use parsers to create more structure than JSON provides. +} +@pitfalls{ +* The `type[&T]` argument is called dynamically by the JSON reader; it does not contain the +grammar. It does encode the expected type of the parse result. +* The expected types can only be `data` types, not syntax types. +} +alias JSONParser[&T] = &T (type[&T], str); \ No newline at end of file diff --git a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java index 23b64f81606..335ae34dc5e 100644 --- a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java +++ b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java @@ -20,6 +20,7 @@ import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.List; @@ -27,14 +28,18 @@ import java.util.Set; import org.rascalmpl.debug.IRascalMonitor; +import org.rascalmpl.exceptions.Throw; import org.rascalmpl.uri.URIUtil; +import org.rascalmpl.values.IRascalValueFactory; +import org.rascalmpl.values.functions.IFunction; + +import io.usethesource.vallang.IConstructor; import io.usethesource.vallang.IInteger; import io.usethesource.vallang.IListWriter; import io.usethesource.vallang.IMapWriter; import io.usethesource.vallang.ISetWriter; import io.usethesource.vallang.ISourceLocation; import io.usethesource.vallang.IValue; -import io.usethesource.vallang.IValueFactory; import io.usethesource.vallang.io.StandardTextReader; import io.usethesource.vallang.type.ITypeVisitor; import io.usethesource.vallang.type.Type; @@ -52,19 +57,20 @@ public class JsonValueReader { private static final TypeFactory TF = TypeFactory.getInstance(); private final TypeStore store; - private final IValueFactory vf; + private final IRascalValueFactory vf; private ThreadLocal format; private final IRascalMonitor monitor; private ISourceLocation src; private VarHandle posHandler; private VarHandle lineHandler; private VarHandle lineStartHandler; + private IFunction parsers; /** * @param vf factory which will be used to construct values * @param store type store to lookup constructors of abstract data-types in and the types of keyword fields */ - public JsonValueReader(IValueFactory vf, TypeStore store, IRascalMonitor monitor, ISourceLocation src) { + public JsonValueReader(IRascalValueFactory vf, TypeStore store, IRascalMonitor monitor, ISourceLocation src) { this.vf = vf; this.store = store; this.monitor = monitor; @@ -87,7 +93,7 @@ public JsonValueReader(IValueFactory vf, TypeStore store, IRascalMonitor monitor } } - public JsonValueReader(IValueFactory vf, IRascalMonitor monitor, ISourceLocation src) { + public JsonValueReader(IRascalValueFactory vf, IRascalMonitor monitor, ISourceLocation src) { this(vf, new TypeStore(), monitor, src); } @@ -105,6 +111,11 @@ protected SimpleDateFormat initialValue() { return this; } + public JsonValueReader setParsers(IFunction parsers) { + this.parsers = parsers; + return this; + } + /** * Read and validate a Json stream as an IValue * @param in json stream @@ -481,8 +492,27 @@ private int getCol() { @Override public IValue visitAbstractData(Type type) throws IOException { if (in.peek() == JsonToken.STRING) { + var stringInput = in.nextString(); + + // might be a parsable string. let's see. + if (parsers != null) { + var symbol = new org.rascalmpl.types.TypeReifier(vf).typeToValue(type, new TypeStore(), vf.map()); + var reified = vf.reifiedType(symbol, vf.map()); + try { + return parsers.call(Collections.emptyMap(), reified, vf.string(stringInput)); + } + catch (Throw t) { + Type excType = t.getException().getType(); + + if (excType.isAbstractData() && ((IConstructor) t.getException()).getConstructorType().getName().equals("ParseError")) { + throw new IOException(t); // an actual parse error is meaningful to report + } + // otherwise we fall through to enum recognition + } + } + // enum! - Set enumCons = store.lookupConstructor(type, in.nextString()); + Set enumCons = store.lookupConstructor(type, stringInput); for (Type candidate : enumCons) { if (candidate.getArity() == 0) { diff --git a/src/org/rascalmpl/semantics/dynamic/Module.java b/src/org/rascalmpl/semantics/dynamic/Module.java index 00b88c2cf80..8a58e7a6e3f 100644 --- a/src/org/rascalmpl/semantics/dynamic/Module.java +++ b/src/org/rascalmpl/semantics/dynamic/Module.java @@ -26,8 +26,6 @@ import org.rascalmpl.interpreter.result.Result; import org.rascalmpl.interpreter.result.ResultFactory; import org.rascalmpl.interpreter.utils.Names; -import org.rascalmpl.uri.URIUtil; - import io.usethesource.vallang.IConstructor; import io.usethesource.vallang.ISourceLocation; import io.usethesource.vallang.IValue; diff --git a/src/org/rascalmpl/test/infrastructure/RascalJUnitParallelRecursiveTestRunner.java b/src/org/rascalmpl/test/infrastructure/RascalJUnitParallelRecursiveTestRunner.java index 77a199a134e..8cf30986dec 100644 --- a/src/org/rascalmpl/test/infrastructure/RascalJUnitParallelRecursiveTestRunner.java +++ b/src/org/rascalmpl/test/infrastructure/RascalJUnitParallelRecursiveTestRunner.java @@ -30,7 +30,6 @@ import org.junit.runner.notification.RunNotifier; import org.rascalmpl.interpreter.Evaluator; import org.rascalmpl.interpreter.ITestResultListener; -import org.rascalmpl.interpreter.NullRascalMonitor; import org.rascalmpl.interpreter.TestEvaluator; import org.rascalmpl.interpreter.env.GlobalEnvironment; import org.rascalmpl.interpreter.env.ModuleEnvironment; diff --git a/src/org/rascalmpl/test/infrastructure/RascalJUnitTestRunner.java b/src/org/rascalmpl/test/infrastructure/RascalJUnitTestRunner.java index 992a25366a5..a4826a66e70 100644 --- a/src/org/rascalmpl/test/infrastructure/RascalJUnitTestRunner.java +++ b/src/org/rascalmpl/test/infrastructure/RascalJUnitTestRunner.java @@ -28,7 +28,6 @@ import org.rascalmpl.debug.IRascalMonitor; import org.rascalmpl.interpreter.Evaluator; import org.rascalmpl.interpreter.ITestResultListener; -import org.rascalmpl.interpreter.NullRascalMonitor; import org.rascalmpl.interpreter.TestEvaluator; import org.rascalmpl.interpreter.env.GlobalEnvironment; import org.rascalmpl.interpreter.env.ModuleEnvironment; diff --git a/test/org/rascalmpl/test/parser/StackNodeTest.java b/test/org/rascalmpl/test/parser/StackNodeTest.java index bfc52a4f5b8..6b849ca5fa7 100644 --- a/test/org/rascalmpl/test/parser/StackNodeTest.java +++ b/test/org/rascalmpl/test/parser/StackNodeTest.java @@ -3,7 +3,6 @@ import org.junit.Assert; import org.junit.Test; import org.rascalmpl.parser.gtd.stack.EpsilonStackNode; -import org.rascalmpl.parser.gtd.stack.LiteralStackNode; import org.rascalmpl.parser.gtd.stack.filter.ICompletionFilter; import org.rascalmpl.parser.gtd.stack.filter.IEnterFilter; import org.rascalmpl.parser.gtd.stack.filter.follow.AtEndOfLineRequirement; From a0dbc27f4d9569b4276cfa698564548cfbbe8db1 Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Mon, 17 Jun 2024 17:42:58 +0200 Subject: [PATCH 003/191] parsing works now too --- src/org/rascalmpl/library/lang/json/IO.java | 7 ++++++- src/org/rascalmpl/library/lang/json/IO.rsc | 4 ++-- .../library/lang/json/internal/JsonValueReader.java | 11 ++++++++--- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/org/rascalmpl/library/lang/json/IO.java b/src/org/rascalmpl/library/lang/json/IO.java index 9919b79214b..60f90b2b407 100644 --- a/src/org/rascalmpl/library/lang/json/IO.java +++ b/src/org/rascalmpl/library/lang/json/IO.java @@ -107,6 +107,11 @@ public IValue readJSON(IValue type, ISourceLocation loc, IString dateTimeFormat, TypeStore store = new TypeStore(); Type start = new TypeReifier(values).valueToType((IConstructor) type, store); + if (parsers.getType() instanceof ReifiedType && parsers.getType().getTypeParameters().getFieldType(0).isTop()) { + // ignore the default parser + parsers = null; + } + try (JsonReader in = new JsonReader(URIResolverRegistry.getInstance().getCharacterReader(loc))) { in.setLenient(lenient.getValue()); return new JsonValueReader(values, store, monitor, trackOrigins.getValue() ? loc : null) @@ -127,7 +132,7 @@ public IValue parseJSON(IValue type, IString src, IString dateTimeFormat, IBool TypeStore store = new TypeStore(); Type start = new TypeReifier(values).valueToType((IConstructor) type, store); - if (parsers.getType() instanceof ReifiedType && parsers.getType().getTypeParameters().getFieldType(0).isBottom()) { + if (parsers.getType() instanceof ReifiedType && parsers.getType().getTypeParameters().getFieldType(0).isTop()) { // ignore the default parser parsers = null; } diff --git a/src/org/rascalmpl/library/lang/json/IO.rsc b/src/org/rascalmpl/library/lang/json/IO.rsc index b503db12a79..740c14f4e2a 100644 --- a/src/org/rascalmpl/library/lang/json/IO.rsc +++ b/src/org/rascalmpl/library/lang/json/IO.rsc @@ -46,12 +46,12 @@ In general the translation behaves as follows: a location object is read from the respective properties: { scheme : str, authority: str?, path: str?, fragment: str?, query: str?, offset: int, length: int, begin: [bl, bc], end: [el, ec]} * Go to ((JSONParser)) to find out how to use the optional `parsers` parameter. } -java &T readJSON(type[&T] expected, loc src, str dateTimeFormat = "yyyy-MM-dd\'T\'HH:mm:ssZZZZZ", bool lenient=false, bool trackOrigins=false, JSONParser[node] parser = (type[void] _, str _) { throw "default parser"; }); +java &T readJSON(type[&T] expected, loc src, str dateTimeFormat = "yyyy-MM-dd\'T\'HH:mm:ssZZZZZ", bool lenient=false, bool trackOrigins=false, JSONParser[value] parser = (type[value] _, str _) { throw ""; }); @javaClass{org.rascalmpl.library.lang.json.IO} @synopsis{parses JSON values from a string. In general the translation behaves as the same as for ((readJSON)).} -java &T parseJSON(type[&T] expected, str src, str dateTimeFormat = "yyyy-MM-dd\'T\'HH:mm:ssZZZZZ", bool lenient=false, bool trackOrigins=false, JSONParser[node] parser = (type[void] _, str _) { throw "default parser"; }); +java &T parseJSON(type[&T] expected, str src, str dateTimeFormat = "yyyy-MM-dd\'T\'HH:mm:ssZZZZZ", bool lenient=false, bool trackOrigins=false, JSONParser[value] parser = (type[value] _, str _) { throw ""; }); @javaClass{org.rascalmpl.library.lang.json.IO} @synopsis{writes `val` to the location `target`} diff --git a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java index 335ae34dc5e..0e3679ce377 100644 --- a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java +++ b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java @@ -496,8 +496,8 @@ public IValue visitAbstractData(Type type) throws IOException { // might be a parsable string. let's see. if (parsers != null) { - var symbol = new org.rascalmpl.types.TypeReifier(vf).typeToValue(type, new TypeStore(), vf.map()); - var reified = vf.reifiedType(symbol, vf.map()); + var reified = new org.rascalmpl.types.TypeReifier(vf).typeToValue(type, new TypeStore(), vf.map()); + try { return parsers.call(Collections.emptyMap(), reified, vf.string(stringInput)); } @@ -520,7 +520,12 @@ public IValue visitAbstractData(Type type) throws IOException { } } - throw new IOException("no nullary constructor found for " + type); + if (parsers != null) { + throw new IOException("parser failed to recognize \"" + stringInput + "\" and no nullary constructor found for " + type + "either"); + } + else { + throw new IOException("no nullary constructor found for " + type); + } } assert in.peek() == JsonToken.BEGIN_OBJECT; From 6ec3df2138a43d7e409b8a7631c7151018199517 Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Mon, 17 Jun 2024 17:50:11 +0200 Subject: [PATCH 004/191] all webservers can now unparse while streaming to json as well --- src/org/rascalmpl/library/Content.rsc | 3 ++- src/org/rascalmpl/library/lang/json/IO.java | 17 +---------------- .../lang/json/internal/JsonValueReader.java | 6 ++++++ .../lang/json/internal/JsonValueWriter.java | 5 +++++ src/org/rascalmpl/library/util/TermREPL.java | 2 ++ src/org/rascalmpl/library/util/Webserver.java | 2 ++ src/org/rascalmpl/repl/REPLContentServer.java | 3 +++ 7 files changed, 21 insertions(+), 17 deletions(-) diff --git a/src/org/rascalmpl/library/Content.rsc b/src/org/rascalmpl/library/Content.rsc index 28be88bbe94..9ad69215703 100644 --- a/src/org/rascalmpl/library/Content.rsc +++ b/src/org/rascalmpl/library/Content.rsc @@ -2,6 +2,7 @@ @synopsis{Content provides access to the content server of the Rascal terminal for viewing interactive HTML output.} module Content +import lang::json::IO; @synopsis{Content wraps the HTTP Request/Response API to support interactive visualization types on the terminal ((RascalShell)).} @@ -80,7 +81,7 @@ which involves a handy, automatic, encoding of Rascal values into json values. data Response = response(Status status, str mimeType, map[str,str] header, str content) | fileResponse(loc file, str mimeType, map[str,str] header) - | jsonResponse(Status status, map[str,str] header, value val, str dateTimeFormat = "yyyy-MM-dd\'T\'HH:mm:ss\'Z\'") + | jsonResponse(Status status, map[str,str] header, value val, str dateTimeFormat = "yyyy-MM-dd\'T\'HH:mm:ss\'Z\'", JSONFormatter[value] formatter = str (value _) { fail; }) ; diff --git a/src/org/rascalmpl/library/lang/json/IO.java b/src/org/rascalmpl/library/lang/json/IO.java index 60f90b2b407..76b7b4fad12 100644 --- a/src/org/rascalmpl/library/lang/json/IO.java +++ b/src/org/rascalmpl/library/lang/json/IO.java @@ -131,11 +131,7 @@ public IValue readJSON(IValue type, ISourceLocation loc, IString dateTimeFormat, public IValue parseJSON(IValue type, IString src, IString dateTimeFormat, IBool lenient, IBool trackOrigins, IFunction parsers) { TypeStore store = new TypeStore(); Type start = new TypeReifier(values).valueToType((IConstructor) type, store); - - if (parsers.getType() instanceof ReifiedType && parsers.getType().getTypeParameters().getFieldType(0).isTop()) { - // ignore the default parser - parsers = null; - } + try (JsonReader in = new JsonReader(new StringReader(src.getValue()))) { in.setLenient(lenient.getValue()); @@ -153,12 +149,6 @@ public IValue parseJSON(IValue type, IString src, IString dateTimeFormat, IBool } public void writeJSON(ISourceLocation loc, IValue value, IBool unpackedLocations, IString dateTimeFormat, IBool dateTimeAsInt, IInteger indent, IBool dropOrigins, IFunction formatter) { - if (formatter.getType().getFieldType(0).isTop()) { - // ignore default function - formatter = null; - } - - try (JsonWriter out = new JsonWriter(new OutputStreamWriter(URIResolverRegistry.getInstance().getOutputStream(loc, false), Charset.forName("UTF8")))) { if (indent.intValue() > 0) { out.setIndent(" ".substring(0, indent.intValue() % 9)); @@ -179,11 +169,6 @@ public void writeJSON(ISourceLocation loc, IValue value, IBool unpackedLocations public IString asJSON(IValue value, IBool unpackedLocations, IString dateTimeFormat, IBool dateTimeAsInt, IInteger indent, IBool dropOrigins, IFunction formatter) { StringWriter string = new StringWriter(); - if (formatter.getType().getFieldType(0).isTop()) { - // ignore default function - formatter = null; - } - try (JsonWriter out = new JsonWriter(string)) { if (indent.intValue() > 0) { out.setIndent(" ".substring(0, indent.intValue() % 9)); diff --git a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java index 0e3679ce377..d0bd83f90b2 100644 --- a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java +++ b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java @@ -29,6 +29,7 @@ import org.rascalmpl.debug.IRascalMonitor; import org.rascalmpl.exceptions.Throw; +import org.rascalmpl.types.ReifiedType; import org.rascalmpl.uri.URIUtil; import org.rascalmpl.values.IRascalValueFactory; import org.rascalmpl.values.functions.IFunction; @@ -112,6 +113,11 @@ protected SimpleDateFormat initialValue() { } public JsonValueReader setParsers(IFunction parsers) { + if (parsers.getType() instanceof ReifiedType && parsers.getType().getTypeParameters().getFieldType(0).isTop()) { + // ignore the default parser + parsers = null; + } + this.parsers = parsers; return this; } diff --git a/src/org/rascalmpl/library/lang/json/internal/JsonValueWriter.java b/src/org/rascalmpl/library/lang/json/internal/JsonValueWriter.java index b27431c5bde..d72bf3790ed 100644 --- a/src/org/rascalmpl/library/lang/json/internal/JsonValueWriter.java +++ b/src/org/rascalmpl/library/lang/json/internal/JsonValueWriter.java @@ -83,6 +83,11 @@ public JsonValueWriter setDropOrigins(boolean setting) { } public JsonValueWriter setFormatters(IFunction formatters) { + if (formatters.getType().getFieldType(0).isTop()) { + // ignore default function + formatters = null; + } + this.formatters = formatters; return this; } diff --git a/src/org/rascalmpl/library/util/TermREPL.java b/src/org/rascalmpl/library/util/TermREPL.java index f149bb36340..61572137b19 100644 --- a/src/org/rascalmpl/library/util/TermREPL.java +++ b/src/org/rascalmpl/library/util/TermREPL.java @@ -238,9 +238,11 @@ private void handleJSONResponse(Map output, IConstructor re IValue dtf = kws.getParameter("dateTimeFormat"); IValue dai = kws.getParameter("dateTimeAsInt"); + IValue formatters = kws.getParameter("formatter"); JsonValueWriter writer = new JsonValueWriter() .setCalendarFormat(dtf != null ? ((IString) dtf).getValue() : "yyyy-MM-dd\'T\'HH:mm:ss\'Z\'") + .setFormatters((IFunction) formatters) .setDatesAsInt(dai != null ? ((IBool) dai).getValue() : true); final ByteArrayOutputStream baos = new ByteArrayOutputStream(); diff --git a/src/org/rascalmpl/library/util/Webserver.java b/src/org/rascalmpl/library/util/Webserver.java index 292241ed33a..88918e4c61c 100644 --- a/src/org/rascalmpl/library/util/Webserver.java +++ b/src/org/rascalmpl/library/util/Webserver.java @@ -238,9 +238,11 @@ private Response translateJsonResponse(Method method, IConstructor cons) { IValue dtf = kws.getParameter("dateTimeFormat"); IValue dai = kws.getParameter("dateTimeAsInt"); + IValue formatters = kws.getParameter("formatter"); JsonValueWriter writer = new JsonValueWriter() .setCalendarFormat(dtf != null ? ((IString) dtf).getValue() : "yyyy-MM-dd\'T\'HH:mm:ss\'Z\'") + .setFormatters((IFunction) formatters) .setDatesAsInt(dai != null ? ((IBool) dai).getValue() : true); try { diff --git a/src/org/rascalmpl/repl/REPLContentServer.java b/src/org/rascalmpl/repl/REPLContentServer.java index de811bcb6ef..1fc0e24300e 100644 --- a/src/org/rascalmpl/repl/REPLContentServer.java +++ b/src/org/rascalmpl/repl/REPLContentServer.java @@ -16,6 +16,7 @@ import org.rascalmpl.library.lang.json.internal.JsonValueWriter; import org.rascalmpl.uri.URIResolverRegistry; import org.rascalmpl.values.ValueFactoryFactory; +import org.rascalmpl.values.functions.IFunction; import com.google.gson.stream.JsonWriter; @@ -135,9 +136,11 @@ private static Response translateJsonResponse(Method method, IConstructor cons) IValue dtf = kws.getParameter("dateTimeFormat"); IValue dai = kws.getParameter("dateTimeAsInt"); + IValue formatters = kws.getParameter("formatter"); JsonValueWriter writer = new JsonValueWriter() .setCalendarFormat(dtf != null ? ((IString) dtf).getValue() : "yyyy-MM-dd\'T\'HH:mm:ss\'Z\'") + .setFormatters((IFunction) formatters) .setDatesAsInt(dai != null ? ((IBool) dai).getValue() : true); try { From 0006042e06d3ae961fb63b95aaa540b4bddc8d43 Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Mon, 17 Jun 2024 19:54:17 +0200 Subject: [PATCH 005/191] added CytoStyle structure --- src/org/rascalmpl/library/Content.rsc | 2 +- src/org/rascalmpl/library/vis/Graphs.rsc | 33 ++++++++++++++++++++++-- 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/src/org/rascalmpl/library/Content.rsc b/src/org/rascalmpl/library/Content.rsc index 9ad69215703..a4307f309d1 100644 --- a/src/org/rascalmpl/library/Content.rsc +++ b/src/org/rascalmpl/library/Content.rsc @@ -103,7 +103,7 @@ Response response(loc f, map[str,str] header = ()) = fileResponse(f, mimeTypes[f @synopsis{Utility to quickly serve any rascal value as a json text. This comes in handy for asynchronous HTTP requests from Javascript.} -default Response response(value val, map[str,str] header = ()) = jsonResponse(ok(), header, val); +default Response response(value val, map[str,str] header = (), JSONFormatter[value] formatter = str (value _) { fail; }) = jsonResponse(ok(), header, val, formatter=formatter); @synopsis{Encoding of HTTP status} diff --git a/src/org/rascalmpl/library/vis/Graphs.rsc b/src/org/rascalmpl/library/vis/Graphs.rsc index b24a4d3ce8b..1caabb779b0 100644 --- a/src/org/rascalmpl/library/vis/Graphs.rsc +++ b/src/org/rascalmpl/library/vis/Graphs.rsc @@ -311,10 +311,39 @@ data CytoStyle ) ; +@synopsis{A combinator language that translates down to strings in JSON} +@description{ +* For field names you can use the names, or the dot notation for array indices and fields of objects: `"labels.0"`, `"name.first"`. +* `and` and `or` can not be nested; this will lead to failure to select anything at all. The or must be outside and the and must be inside. +* `node()` selects all nodes +* `edge()` selects all edges +} data CytoSelector = \node() | \edge() - ; + | \id(str id) + | \and(list[CytoSelector] conjuncts) + | \or(list[CytoSelector] disjuncts) + | \equal(str field, str \value) + | \equal(str field, int limit) + | \greater(str field, int limit) + | \less(str field, int limit) + | \greaterEqual(str field, int limit) + | \lessEqual(str field, int limit) + ; + +@synopsis{Serialize a ((CytoSelector)) to string for client side expression.} +str formatCytoSelector(\node()) = "node"; +str formatCytoSelector(\edge()) = "edge"; +str formatCytoSelector(\id(str i)) = "\"\""; +str formatCytoSelector(and(list[CytoSelector] cjs)) = "<}>"; +str formatCytoSelector(or(list[CytoSelector] cjs)) = ",<}>"[..-1]; +str formatCytoSelector(equal(str field, str val)) = "[ = \"\"]"; +str formatCytoSelector(equal(str field, int lim)) = "[ = ]"; +str formatCytoSelector(greater(str field, int lim)) = "[ \> ]"; +str formatCytoSelector(greaterEqual(str field, int lim)) = "[ \>= ]"; +str formatCytoSelector(lessEqual(str field, int lim)) = "[ \<= ]"; +str formatCytoSelector(less(str field, int lim)) = "[ \< ]"; data CytoLayoutName = grid() @@ -422,7 +451,7 @@ Response (Request) graphServer(Cytoscape ch) { } Response reply(get(/^\/cytoscape/)) { - return response(ch); + return response(ch, formatter=formatCytoSelector); } // returns the main page that also contains the callbacks for retrieving data and configuration From f56300fb22b1e10072bd3f4712245ef128aec3b2 Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Mon, 17 Jun 2024 20:16:56 +0200 Subject: [PATCH 006/191] start to expand CytoStyleSelector to make use of more styling features --- src/org/rascalmpl/library/vis/Graphs.rsc | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/org/rascalmpl/library/vis/Graphs.rsc b/src/org/rascalmpl/library/vis/Graphs.rsc index 1caabb779b0..c0d3d5f7230 100644 --- a/src/org/rascalmpl/library/vis/Graphs.rsc +++ b/src/org/rascalmpl/library/vis/Graphs.rsc @@ -230,20 +230,18 @@ data CytoCurveStyle ; data CytoStyleOf - = cytoNodeStyleOf( + = cytoStyleOf( CytoSelector selector = \node(), CytoStyle style = cytoNodeStyle() ) - | cytoEdgeStyleOf( - CytoSelector selector = \edge(), - CytoStyle style = cytoEdgeStyle() - ); + ; -CytoStyleOf cytoNodeStyleOf(CytoStyle style) = cytoNodeStyleOf(selector=\node(), style=style); -CytoStyleOf cytoEdgeStyleOf(CytoStyle style) = cytoEdgeStyleOf(selector=\edge(), style=style); +CytoStyleOf cytoNodeStyleOf(CytoStyle style) = cytoStyleOf(selector=\node(), style=style); +CytoStyleOf cytoEdgeStyleOf(CytoStyle style) = cytoStyleOf(selector=\edge(), style=style); CytoStyle defaultNodeStyle() = cytoNodeStyle( + visibility = "visible", /* hidden, collapse */ width = "label", padding = "10pt", \background-color = "blue", @@ -258,6 +256,7 @@ CytoStyle defaultNodeStyle() CytoStyle defaultEdgeStyle() = cytoEdgeStyle( + visibility = "visible", /* hidden, collapse */ width = 3, \color = "red", \line-color = "black", @@ -278,6 +277,7 @@ data CytoFontWeight data CytoStyle = cytoNodeStyle( + str visibility = "visible", /* hidden, collapse */ str width = "label", str padding = "10pt", str color = "white", @@ -297,6 +297,7 @@ data CytoStyle int \line-height = 1 ) | cytoEdgeStyle( + str visibility = "visible", /* hidden, collapse */ int width = 3, str \line-color = "black", str color = "red", From f48ba151745a86690a88bc0bf2440865d0b33f32 Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Mon, 17 Jun 2024 20:47:46 +0200 Subject: [PATCH 007/191] new style feature demo with import graph (extend edges are dotted) --- .../library/lang/rascal/vis/ImportGraph.rsc | 17 ++++++++++++- src/org/rascalmpl/library/vis/Graphs.rsc | 25 +++++++++++-------- 2 files changed, 30 insertions(+), 12 deletions(-) diff --git a/src/org/rascalmpl/library/lang/rascal/vis/ImportGraph.rsc b/src/org/rascalmpl/library/lang/rascal/vis/ImportGraph.rsc index 0efc06a82a3..1455d207504 100644 --- a/src/org/rascalmpl/library/lang/rascal/vis/ImportGraph.rsc +++ b/src/org/rascalmpl/library/lang/rascal/vis/ImportGraph.rsc @@ -50,6 +50,21 @@ void importGraph(PathConfig pcfg, bool hideExternals=true) { + { | from <- bottom(m.imports + m.extends), hideExternals ==> from notin m.external} // pull the bottom modules down. ; + styles = [ + cytoStyleOf( + selector=or([ + and([\node(), id("_")]), // the top node + and([\node(), id("x")]), // the bottom node + and([\edge(), equal("source", "_")]), // edges from the top node + and([\edge(), equal("target", "x")])]), // edges to the bottom node + style=defaultNodeStyle()[visibility="hidden"] // hide it all + ), + cytoStyleOf( + selector=or([ + and([\edge(), equal("label", "E")])]), // extend edges + style=defaultEdgeStyle()[\line-style="dashed"] // are dashed + ) + ]; loc modLinker(str name) { if (loc x <- m.files[name]) return x; @@ -59,7 +74,7 @@ void importGraph(PathConfig pcfg, bool hideExternals=true) { default loc modLinker(value _) = |nothing:///|; - showInteractiveContent(graph(g, \layout=defaultDagreLayout(), nodeLinker=modLinker), title="Rascal Import/Extend Graph"); + showInteractiveContent(graph(g, \layout=defaultDagreLayout(), nodeLinker=modLinker, styles=styles), title="Rascal Import/Extend Graph"); } @synopsis{Container for everything we need to know about the modules in a project to visualize it.} diff --git a/src/org/rascalmpl/library/vis/Graphs.rsc b/src/org/rascalmpl/library/vis/Graphs.rsc index c0d3d5f7230..b767dbfdadb 100644 --- a/src/org/rascalmpl/library/vis/Graphs.rsc +++ b/src/org/rascalmpl/library/vis/Graphs.rsc @@ -45,8 +45,8 @@ graph(d, \layout=defaultDagreLayout()); graph(d, \layout=defaultDagreLayout(), nodeLabeler=str (loc l) { return l.file; }); ``` } -Content graph(lrel[&T x, &T y] v, NodeLinker[&T] nodeLinker=defaultNodeLinker, NodeLabeler[&T] nodeLabeler=defaultNodeLabeler, EdgeLabeler[&T] edgeLabeler=defaultEdgeLabeler, str title="Graph", CytoLayout \layout=defaultCoseLayout(), CytoStyle nodeStyle=defaultNodeStyle(), CytoStyle edgeStyle=defaultEdgeStyle()) - = content(title, graphServer(cytoscape(graphData(v, nodeLinker=nodeLinker, nodeLabeler=nodeLabeler, edgeLabeler=edgeLabeler), \layout=\layout, nodeStyle=nodeStyle, edgeStyle=edgeStyle))); +Content graph(lrel[&T x, &T y] v, NodeLinker[&T] nodeLinker=defaultNodeLinker, NodeLabeler[&T] nodeLabeler=defaultNodeLabeler, EdgeLabeler[&T] edgeLabeler=defaultEdgeLabeler, str title="Graph", CytoLayout \layout=defaultCoseLayout(), CytoStyle nodeStyle=defaultNodeStyle(), CytoStyle edgeStyle=defaultEdgeStyle(), list[CytoStyleOf] styles=[]) + = content(title, graphServer(cytoscape(graphData(v, nodeLinker=nodeLinker, nodeLabeler=nodeLabeler, edgeLabeler=edgeLabeler), \layout=\layout, nodeStyle=nodeStyle, edgeStyle=edgeStyle, styles=styles))); @synopsis{A graph plot from a ternary list relation where the middle column is the edge label.} @examples{ @@ -55,8 +55,8 @@ import vis::Graphs; graph([ | x <- [1..100]] + [<100,101,1>]) ``` } -Content graph(lrel[&T x, &L edge, &T y] v, NodeLinker[&T] nodeLinker=defaultNodeLinker, NodeLabeler[&T] nodeLabeler=defaultNodeLabeler, str title="Graph", CytoLayout \layout=defaultCoseLayout(), CytoStyle nodeStyle=defaultNodeStyle(), CytoStyle edgeStyle=defaultEdgeStyle()) - = content(title, graphServer(cytoscape(graphData(v, nodeLinker=nodeLinker, nodeLabeler=nodeLabeler), \layout=\layout, nodeStyle=nodeStyle, edgeStyle=edgeStyle))); +Content graph(lrel[&T x, &L edge, &T y] v, NodeLinker[&T] nodeLinker=defaultNodeLinker, NodeLabeler[&T] nodeLabeler=defaultNodeLabeler, str title="Graph", CytoLayout \layout=defaultCoseLayout(), CytoStyle nodeStyle=defaultNodeStyle(), CytoStyle edgeStyle=defaultEdgeStyle(), list[CytoStyleOf] styles=[]) + = content(title, graphServer(cytoscape(graphData(v, nodeLinker=nodeLinker, nodeLabeler=nodeLabeler), \layout=\layout, nodeStyle=nodeStyle, edgeStyle=edgeStyle, styles=styles))); @synopsis{A graph plot from a binary relation.} @examples{ @@ -65,8 +65,8 @@ import vis::Graphs; graph({ | x <- [1..100]} + {<100,1>}) ``` } -Content graph(rel[&T x, &T y] v, NodeLinker[&T] nodeLinker=defaultNodeLinker, NodeLabeler[&T] nodeLabeler=defaultNodeLabeler, EdgeLabeler[&T] edgeLabeler=defaultEdgeLabeler, str title="Graph", CytoLayout \layout=defaultCoseLayout(), CytoStyle nodeStyle=defaultNodeStyle(), CytoStyle edgeStyle=defaultEdgeStyle()) - = content(title, graphServer(cytoscape(graphData(v, nodeLinker=nodeLinker, nodeLabeler=nodeLabeler, edgeLabeler=edgeLabeler), \layout=\layout, nodeStyle=nodeStyle, edgeStyle=edgeStyle))); +Content graph(rel[&T x, &T y] v, NodeLinker[&T] nodeLinker=defaultNodeLinker, NodeLabeler[&T] nodeLabeler=defaultNodeLabeler, EdgeLabeler[&T] edgeLabeler=defaultEdgeLabeler, str title="Graph", CytoLayout \layout=defaultCoseLayout(), CytoStyle nodeStyle=defaultNodeStyle(), CytoStyle edgeStyle=defaultEdgeStyle(), list[CytoStyleOf] styles=[]) + = content(title, graphServer(cytoscape(graphData(v, nodeLinker=nodeLinker, nodeLabeler=nodeLabeler, edgeLabeler=edgeLabeler), \layout=\layout, nodeStyle=nodeStyle, edgeStyle=edgeStyle, styles=styles))); @synopsis{A graph plot from a ternary relation where the middle column is the edge label.} @examples{ @@ -75,8 +75,8 @@ import vis::Graphs; graph({ | x <- [1..100]} + {<100,101,1>}) ``` } -Content graph(rel[&T x, &L edge, &T y] v, NodeLinker[&T] nodeLinker=defaultNodeLinker, NodeLabeler[&T] nodeLabeler=defaultNodeLabeler, str title="Graph", CytoLayout \layout=defaultCoseLayout(), CytoStyle nodeStyle=defaultNodeStyle(), CytoStyle edgeStyle=defaultEdgeStyle()) - = content(title, graphServer(cytoscape(graphData(v, nodeLinker=nodeLinker, nodeLabeler=nodeLabeler), \layout=\layout, nodeStyle=nodeStyle, edgeStyle=edgeStyle))); +Content graph(rel[&T x, &L edge, &T y] v, NodeLinker[&T] nodeLinker=defaultNodeLinker, NodeLabeler[&T] nodeLabeler=defaultNodeLabeler, str title="Graph", CytoLayout \layout=defaultCoseLayout(), CytoStyle nodeStyle=defaultNodeStyle(), CytoStyle edgeStyle=defaultEdgeStyle(), list[CytoStyleOf] styles=[]) + = content(title, graphServer(cytoscape(graphData(v, nodeLinker=nodeLinker, nodeLabeler=nodeLabeler), \layout=\layout, nodeStyle=nodeStyle, edgeStyle=edgeStyle, styles=styles))); alias NodeLinker[&T] = loc (&T _id1); loc defaultNodeLinker(/loc l) = l; @@ -91,12 +91,13 @@ alias EdgeLabeler[&T]= str (&T _source, &T _target); str defaultEdgeLabeler(&T _source, &T _target) = ""; -Cytoscape cytoscape(list[CytoData] \data, \CytoLayout \layout=\defaultCoseLayout(), CytoStyle nodeStyle=defaultNodeStyle(), CytoStyle edgeStyle=defaultEdgeStyle()) +Cytoscape cytoscape(list[CytoData] \data, \CytoLayout \layout=\defaultCoseLayout(), CytoStyle nodeStyle=defaultNodeStyle(), CytoStyle edgeStyle=defaultEdgeStyle(), list[CytoStyleOf] styles=[]) = cytoscape( elements=\data, style=[ cytoNodeStyleOf(nodeStyle), - cytoEdgeStyleOf(edgeStyle) + cytoEdgeStyleOf(edgeStyle), + *styles ], \layout=\layout ); @@ -258,6 +259,7 @@ CytoStyle defaultEdgeStyle() = cytoEdgeStyle( visibility = "visible", /* hidden, collapse */ width = 3, + \line-style = "solid", /* dotted, dashed */ \color = "red", \line-color = "black", \target-arrow-color = "black", @@ -300,6 +302,7 @@ data CytoStyle str visibility = "visible", /* hidden, collapse */ int width = 3, str \line-color = "black", + str \line-style = "solid", /* dotted, dashed */ str color = "red", str \target-arrow-color = "black", str \source-arrow-color = "black", @@ -336,7 +339,7 @@ data CytoSelector @synopsis{Serialize a ((CytoSelector)) to string for client side expression.} str formatCytoSelector(\node()) = "node"; str formatCytoSelector(\edge()) = "edge"; -str formatCytoSelector(\id(str i)) = "\"\""; +str formatCytoSelector(\id(str i)) = formatCytoSelector(equal("id", i)); str formatCytoSelector(and(list[CytoSelector] cjs)) = "<}>"; str formatCytoSelector(or(list[CytoSelector] cjs)) = ",<}>"[..-1]; str formatCytoSelector(equal(str field, str val)) = "[ = \"\"]"; From 6fbb9cc15ea30ef5f74a26c9e9deb5e4e276e020 Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Mon, 17 Jun 2024 21:09:55 +0200 Subject: [PATCH 008/191] transitively closed edges are now only 25 percent visible --- .../rascalmpl/library/lang/rascal/vis/ImportGraph.rsc | 9 +++++++++ src/org/rascalmpl/library/vis/Graphs.rsc | 8 +++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/org/rascalmpl/library/lang/rascal/vis/ImportGraph.rsc b/src/org/rascalmpl/library/lang/rascal/vis/ImportGraph.rsc index 1455d207504..5be60af861d 100644 --- a/src/org/rascalmpl/library/lang/rascal/vis/ImportGraph.rsc +++ b/src/org/rascalmpl/library/lang/rascal/vis/ImportGraph.rsc @@ -50,6 +50,9 @@ void importGraph(PathConfig pcfg, bool hideExternals=true) { + { | from <- bottom(m.imports + m.extends), hideExternals ==> from notin m.external} // pull the bottom modules down. ; + nonTransitiveEdges = transitiveReduction(g<0,2>); + transitiveEdges = g<0,2> - nonTransitiveEdges; + styles = [ cytoStyleOf( selector=or([ @@ -63,7 +66,13 @@ void importGraph(PathConfig pcfg, bool hideExternals=true) { selector=or([ and([\edge(), equal("label", "E")])]), // extend edges style=defaultEdgeStyle()[\line-style="dashed"] // are dashed + ), + *[ cytoStyleOf( + selector=and([\edge(),equal("source", f),equal("target", t)]), + style=defaultEdgeStyle()[opacity="50%"][\line-opacity="0.25"] ) + | <- transitiveEdges + ] ]; loc modLinker(str name) { if (loc x <- m.files[name]) diff --git a/src/org/rascalmpl/library/vis/Graphs.rsc b/src/org/rascalmpl/library/vis/Graphs.rsc index b767dbfdadb..d78df87448d 100644 --- a/src/org/rascalmpl/library/vis/Graphs.rsc +++ b/src/org/rascalmpl/library/vis/Graphs.rsc @@ -243,6 +243,7 @@ CytoStyleOf cytoEdgeStyleOf(CytoStyle style) = cytoStyleOf(selector=\edge(), sty CytoStyle defaultNodeStyle() = cytoNodeStyle( visibility = "visible", /* hidden, collapse */ + opacity = "1", width = "label", padding = "10pt", \background-color = "blue", @@ -258,6 +259,8 @@ CytoStyle defaultNodeStyle() CytoStyle defaultEdgeStyle() = cytoEdgeStyle( visibility = "visible", /* hidden, collapse */ + opacity = "1", + \line-opacity = "1", width = 3, \line-style = "solid", /* dotted, dashed */ \color = "red", @@ -280,10 +283,11 @@ data CytoFontWeight data CytoStyle = cytoNodeStyle( str visibility = "visible", /* hidden, collapse */ + str opacity = "1", str width = "label", str padding = "10pt", str color = "white", - str \text-opacity = "100%", + str \text-opacity = "1", str \font-family = "", str \font-size = "12pt", str \font-style = "", @@ -300,6 +304,8 @@ data CytoStyle ) | cytoEdgeStyle( str visibility = "visible", /* hidden, collapse */ + str opacity = "1", + str \line-opacity = "1", int width = 3, str \line-color = "black", str \line-style = "solid", /* dotted, dashed */ From a7ba959eada49935518ecd2c88fa42cbd94951a5 Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Mon, 17 Jun 2024 21:24:12 +0200 Subject: [PATCH 009/191] avoid edge crossings by sorting edges --- .../library/lang/rascal/vis/ImportGraph.rsc | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/org/rascalmpl/library/lang/rascal/vis/ImportGraph.rsc b/src/org/rascalmpl/library/lang/rascal/vis/ImportGraph.rsc index 5be60af861d..933dbdf9078 100644 --- a/src/org/rascalmpl/library/lang/rascal/vis/ImportGraph.rsc +++ b/src/org/rascalmpl/library/lang/rascal/vis/ImportGraph.rsc @@ -26,6 +26,7 @@ import util::FileSystem; import util::IDEServices; import IO; import analysis::graphs::Graph; +import Set; @synopsis{If `projectName` is an open project in the current IDE, the visualize its import/extend graph.} void importGraph(str projectName, bool hideExternals=true) { @@ -44,14 +45,15 @@ void importGraph(PathConfig pcfg, bool hideExternals=true) { m = getProjectModel(pcfg.srcs); // let's start with a simple graph and elaborate on details in later versions - g = { | <- m.imports, hideExternals ==> to notin m.external} - + { | <- m.extends, hideExternals ==> to notin m.external} + g = { | <- sort(m.imports), hideExternals ==> to notin m.external} + + { | <- sort(m.extends), hideExternals ==> to notin m.external} + { <"_", "_", to> | to <- top(m.imports + m.extends) } // pull up the top modules + { | from <- bottom(m.imports + m.extends), hideExternals ==> from notin m.external} // pull the bottom modules down. ; - nonTransitiveEdges = transitiveReduction(g<0,2>); - transitiveEdges = g<0,2> - nonTransitiveEdges; + nonTransitiveEdges = transitiveReduction(m.imports + m.extends); + cyclicNodes = { x | <- (m.imports + m.extends)+}; + transitiveEdges = { | <- (m.imports + m.extends), notin nonTransitiveEdges, x notin cyclicNodes, y notin cyclicNodes}; styles = [ cytoStyleOf( @@ -69,7 +71,7 @@ void importGraph(PathConfig pcfg, bool hideExternals=true) { ), *[ cytoStyleOf( selector=and([\edge(),equal("source", f),equal("target", t)]), - style=defaultEdgeStyle()[opacity="50%"][\line-opacity="0.25"] + style=defaultEdgeStyle()[opacity=".25"][\line-opacity="0.25"] ) | <- transitiveEdges ] From 70ef51c4e09a77da31aa62e3ed32355e72a8e073 Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Mon, 17 Jun 2024 21:31:24 +0200 Subject: [PATCH 010/191] details --- src/org/rascalmpl/library/lang/rascal/vis/ImportGraph.rsc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/org/rascalmpl/library/lang/rascal/vis/ImportGraph.rsc b/src/org/rascalmpl/library/lang/rascal/vis/ImportGraph.rsc index 933dbdf9078..f92011d20a5 100644 --- a/src/org/rascalmpl/library/lang/rascal/vis/ImportGraph.rsc +++ b/src/org/rascalmpl/library/lang/rascal/vis/ImportGraph.rsc @@ -70,8 +70,8 @@ void importGraph(PathConfig pcfg, bool hideExternals=true) { style=defaultEdgeStyle()[\line-style="dashed"] // are dashed ), *[ cytoStyleOf( - selector=and([\edge(),equal("source", f),equal("target", t)]), - style=defaultEdgeStyle()[opacity=".25"][\line-opacity="0.25"] + selector=and([\edge(),equal("source", f),equal("target", t)]), // any transitive edge + style=defaultEdgeStyle()[opacity=".25"][\line-opacity="0.25"] // will be made 25% opaque ) | <- transitiveEdges ] From f9ced768d83134151781e94a4475ec4c425e9f16 Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Mon, 17 Jun 2024 22:14:13 +0200 Subject: [PATCH 011/191] bottom node stretching made layout worse --- .../library/lang/rascal/vis/ImportGraph.rsc | 11 +++++------ src/org/rascalmpl/library/vis/Graphs.rsc | 12 ++++++++++-- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/org/rascalmpl/library/lang/rascal/vis/ImportGraph.rsc b/src/org/rascalmpl/library/lang/rascal/vis/ImportGraph.rsc index f92011d20a5..faa469425ce 100644 --- a/src/org/rascalmpl/library/lang/rascal/vis/ImportGraph.rsc +++ b/src/org/rascalmpl/library/lang/rascal/vis/ImportGraph.rsc @@ -48,20 +48,18 @@ void importGraph(PathConfig pcfg, bool hideExternals=true) { g = { | <- sort(m.imports), hideExternals ==> to notin m.external} + { | <- sort(m.extends), hideExternals ==> to notin m.external} + { <"_", "_", to> | to <- top(m.imports + m.extends) } // pull up the top modules - + { | from <- bottom(m.imports + m.extends), hideExternals ==> from notin m.external} // pull the bottom modules down. ; nonTransitiveEdges = transitiveReduction(m.imports + m.extends); cyclicNodes = { x | <- (m.imports + m.extends)+}; - transitiveEdges = { | <- (m.imports + m.extends), notin nonTransitiveEdges, x notin cyclicNodes, y notin cyclicNodes}; + transitiveEdges = { | <- (m.imports + m.extends - nonTransitiveEdges), x notin cyclicNodes, y notin cyclicNodes}; styles = [ cytoStyleOf( selector=or([ and([\node(), id("_")]), // the top node - and([\node(), id("x")]), // the bottom node - and([\edge(), equal("source", "_")]), // edges from the top node - and([\edge(), equal("target", "x")])]), // edges to the bottom node + and([\edge(), equal("source", "_")]) // edges from the top node + ]), style=defaultNodeStyle()[visibility="hidden"] // hide it all ), cytoStyleOf( @@ -76,6 +74,7 @@ void importGraph(PathConfig pcfg, bool hideExternals=true) { | <- transitiveEdges ] ]; + loc modLinker(str name) { if (loc x <- m.files[name]) return x; @@ -85,7 +84,7 @@ void importGraph(PathConfig pcfg, bool hideExternals=true) { default loc modLinker(value _) = |nothing:///|; - showInteractiveContent(graph(g, \layout=defaultDagreLayout(), nodeLinker=modLinker, styles=styles), title="Rascal Import/Extend Graph"); + showInteractiveContent(graph(g, \layout=defaultDagreLayout()[ranker=\tight-tree()], nodeLinker=modLinker, styles=styles), title="Rascal Import/Extend Graph"); } @synopsis{Container for everything we need to know about the modules in a project to visualize it.} diff --git a/src/org/rascalmpl/library/vis/Graphs.rsc b/src/org/rascalmpl/library/vis/Graphs.rsc index d78df87448d..ff72af6fe15 100644 --- a/src/org/rascalmpl/library/vis/Graphs.rsc +++ b/src/org/rascalmpl/library/vis/Graphs.rsc @@ -396,10 +396,17 @@ data CytoLayout(CytoLayoutName name = dagre(), bool animate=false) ) | dagreLayout( CytoLayoutName name = dagre(), - num spacingFactor = .1 + num spacingFactor = .1, + DagreRanker ranker = \network-simplex() // network-simples tight-tree, or longest-path ) ; +data DagreRanker + = \network-simplex() + | \tight-tree() + | \longest-path() + ; + CytoLayout defaultCoseLayout() = coseLayout( name=cose(), @@ -441,7 +448,8 @@ CytoLayout defaultDagreLayout(num spacingFactor=1) = dagreLayout( name=CytoLayoutName::dagre(), animate=false, - spacingFactor=spacingFactor + spacingFactor=spacingFactor, + ranker=\network-simplex() ); From d79c215c64ff9430cf5c10ab0181a02c906809ec Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Tue, 18 Jun 2024 10:58:45 +0200 Subject: [PATCH 012/191] refactored vis::Graph to keep all optional config functions into one constructor --- src/org/rascalmpl/library/lang/json/IO.java | 1 - .../library/lang/rascal/vis/ImportGraph.rsc | 29 +++-- src/org/rascalmpl/library/vis/Graphs.rsc | 113 ++++++++++++------ 3 files changed, 99 insertions(+), 44 deletions(-) diff --git a/src/org/rascalmpl/library/lang/json/IO.java b/src/org/rascalmpl/library/lang/json/IO.java index 76b7b4fad12..6db83ff7032 100644 --- a/src/org/rascalmpl/library/lang/json/IO.java +++ b/src/org/rascalmpl/library/lang/json/IO.java @@ -36,7 +36,6 @@ import io.usethesource.vallang.IBool; import io.usethesource.vallang.IConstructor; import io.usethesource.vallang.IInteger; -import io.usethesource.vallang.ISet; import io.usethesource.vallang.ISourceLocation; import io.usethesource.vallang.IString; import io.usethesource.vallang.IValue; diff --git a/src/org/rascalmpl/library/lang/rascal/vis/ImportGraph.rsc b/src/org/rascalmpl/library/lang/rascal/vis/ImportGraph.rsc index faa469425ce..38908f8c586 100644 --- a/src/org/rascalmpl/library/lang/rascal/vis/ImportGraph.rsc +++ b/src/org/rascalmpl/library/lang/rascal/vis/ImportGraph.rsc @@ -45,17 +45,23 @@ void importGraph(PathConfig pcfg, bool hideExternals=true) { m = getProjectModel(pcfg.srcs); // let's start with a simple graph and elaborate on details in later versions - g = { | <- sort(m.imports), hideExternals ==> to notin m.external} - + { | <- sort(m.extends), hideExternals ==> to notin m.external} - + { <"_", "_", to> | to <- top(m.imports + m.extends) } // pull up the top modules + g = { | <- sort(m.imports), hideExternals ==> to notin m.external} + + { | <- sort(m.extends), hideExternals ==> to notin m.external} + + { <"_" , to> | to <- top(m.imports + m.extends) } // pull up the top modules ; + str nodeClass(str n) = "rascal.project" when n notin m.external; + str nodeClass(str n) = "rascal.external" when n in m.external; + + str edgeClass(str from, str to) = "rascal.import" when in m.imports; + str edgeClass(str from, str to) = "rascal.extend" when in m.extends; + nonTransitiveEdges = transitiveReduction(m.imports + m.extends); - cyclicNodes = { x | <- (m.imports + m.extends)+}; - transitiveEdges = { | <- (m.imports + m.extends - nonTransitiveEdges), x notin cyclicNodes, y notin cyclicNodes}; + cyclicNodes = { x | <- (m.imports + m.extends)+}; + transitiveEdges = { | <- (m.imports + m.extends - nonTransitiveEdges), x notin cyclicNodes, y notin cyclicNodes}; styles = [ - cytoStyleOf( + cytoStyleOf( selector=or([ and([\node(), id("_")]), // the top node and([\edge(), equal("source", "_")]) // edges from the top node @@ -84,7 +90,16 @@ void importGraph(PathConfig pcfg, bool hideExternals=true) { default loc modLinker(value _) = |nothing:///|; - showInteractiveContent(graph(g, \layout=defaultDagreLayout()[ranker=\tight-tree()], nodeLinker=modLinker, styles=styles), title="Rascal Import/Extend Graph"); + cfg = cytoGraphConfig( + \layout=dagreLayout(ranker=\tight-tree()), + styles=styles, + title="Rascal Import/Extend Graph", + nodeClassifier=nodeClass, + edgeClassifier=edgeClass, + nodeLinker=modLinker + ); + + showInteractiveContent(graph(g, cfg=cfg), title=cfg.title); } @synopsis{Container for everything we need to know about the modules in a project to visualize it.} diff --git a/src/org/rascalmpl/library/vis/Graphs.rsc b/src/org/rascalmpl/library/vis/Graphs.rsc index ff72af6fe15..2c0d99bf827 100644 --- a/src/org/rascalmpl/library/vis/Graphs.rsc +++ b/src/org/rascalmpl/library/vis/Graphs.rsc @@ -7,7 +7,7 @@ } @contributor{Jurgen J. Vinju - Jurgen.Vinju@cwi.nl - CWI} @contributor{Tijs van der Storm - storm@cwi.nl - CWI} -@synopsis{Simple data visualization using graphs} +@synopsis{Simple data visualization using graphs; based on cytoscape.js} @description{ This modules provides a simple API to create graph visuals for Rascal (relational) data, based on [Cytoscape.js](https://js.cytoscape.org/). @@ -26,6 +26,41 @@ import util::IDEServices; import Content; import ValueIO; +@synopsis{Optional configuration attributes for graph style and graph layout} +@description{ +These configuration options are used to map input graph data to layout properties +and style properties. + +* title - does what it says +* nodeLinker - makes nodes clickable by providing an editor location +* nodeLabeler - allows simplification or elaboration on node labels beyond their identity string +* nodeClassifier - labels nodes with classes in order to later select them for specific styling +* edgeLabeler - allows simplification or elaboration on edge labels +* layout - defines and configured the graph layout algorithm +* nodeStyle - defines the default style for all nodes +* edgeStyle - defines the default style for all edges +* style - collects specific styles for specific ((CytoSelector)) edge/node selectors using ((CytoStyleOf)) tuples. + +Typically the functions passed into this configuration are closures that capture and use the original +input data to find out about where to link and how to classify. The `&T` parameter reflects the type of +the original input `Graph[&T]`; so that is the type of the nodes. Often this would be `loc` or `str`. +} +data CytoGraphConfig = cytoGraphConfig( + str title="Graph", + + NodeLinker[&T] nodeLinker = defaultNodeLinker, + NodeLabeler[&T] nodeLabeler = defaultNodeLabeler, + NodeClassifier[&T] nodeClassifier = defaultNodeClassifier, + EdgeLabeler[&T] edgeLabeler = defaultEdgeLabeler, + EdgeClassifier[&T] edgeClassifier = defaultEdgeClassifier, + + CytoLayout \layout = defaultCoseLayout(), + + CytoStyle nodeStyle = defaultNodeStyle(), + CytoStyle edgeStyle = defaultEdgeStyle(), + list[CytoStyleOf] styles = [] +); + @synopsis{A graph plot from a binary list relation.} @examples{ ```rascal-shell @@ -45,8 +80,8 @@ graph(d, \layout=defaultDagreLayout()); graph(d, \layout=defaultDagreLayout(), nodeLabeler=str (loc l) { return l.file; }); ``` } -Content graph(lrel[&T x, &T y] v, NodeLinker[&T] nodeLinker=defaultNodeLinker, NodeLabeler[&T] nodeLabeler=defaultNodeLabeler, EdgeLabeler[&T] edgeLabeler=defaultEdgeLabeler, str title="Graph", CytoLayout \layout=defaultCoseLayout(), CytoStyle nodeStyle=defaultNodeStyle(), CytoStyle edgeStyle=defaultEdgeStyle(), list[CytoStyleOf] styles=[]) - = content(title, graphServer(cytoscape(graphData(v, nodeLinker=nodeLinker, nodeLabeler=nodeLabeler, edgeLabeler=edgeLabeler), \layout=\layout, nodeStyle=nodeStyle, edgeStyle=edgeStyle, styles=styles))); +Content graph(lrel[&T x, &T y] v, CytoGraphConfig cfg = cytoGraphConfig()) + = content(cfg.title, graphServer(cytoscape(graphData(v, cfg=cfg)))); @synopsis{A graph plot from a ternary list relation where the middle column is the edge label.} @examples{ @@ -55,18 +90,18 @@ import vis::Graphs; graph([ | x <- [1..100]] + [<100,101,1>]) ``` } -Content graph(lrel[&T x, &L edge, &T y] v, NodeLinker[&T] nodeLinker=defaultNodeLinker, NodeLabeler[&T] nodeLabeler=defaultNodeLabeler, str title="Graph", CytoLayout \layout=defaultCoseLayout(), CytoStyle nodeStyle=defaultNodeStyle(), CytoStyle edgeStyle=defaultEdgeStyle(), list[CytoStyleOf] styles=[]) - = content(title, graphServer(cytoscape(graphData(v, nodeLinker=nodeLinker, nodeLabeler=nodeLabeler), \layout=\layout, nodeStyle=nodeStyle, edgeStyle=edgeStyle, styles=styles))); +Content graph(lrel[&T x, &L edge, &T y] v, CytoGraphConfig cfg=cytoGraphConfig()) + = content(cfg.title, graphServer(cytoscape(graphData(v, cfg=cfg), cfg=cfg))); @synopsis{A graph plot from a binary relation.} @examples{ ```rascal-shell import vis::Graphs; graph({ | x <- [1..100]} + {<100,1>}) -``` +``` } -Content graph(rel[&T x, &T y] v, NodeLinker[&T] nodeLinker=defaultNodeLinker, NodeLabeler[&T] nodeLabeler=defaultNodeLabeler, EdgeLabeler[&T] edgeLabeler=defaultEdgeLabeler, str title="Graph", CytoLayout \layout=defaultCoseLayout(), CytoStyle nodeStyle=defaultNodeStyle(), CytoStyle edgeStyle=defaultEdgeStyle(), list[CytoStyleOf] styles=[]) - = content(title, graphServer(cytoscape(graphData(v, nodeLinker=nodeLinker, nodeLabeler=nodeLabeler, edgeLabeler=edgeLabeler), \layout=\layout, nodeStyle=nodeStyle, edgeStyle=edgeStyle, styles=styles))); +Content graph(rel[&T x, &T y] v, CytoGraphConfig cfg=cytoGraphConfig()) + = content(cfg.title, graphServer(cytoscape(graphData(v, cfg=cfg), cfg=cfg))); @synopsis{A graph plot from a ternary relation where the middle column is the edge label.} @examples{ @@ -75,8 +110,8 @@ import vis::Graphs; graph({ | x <- [1..100]} + {<100,101,1>}) ``` } -Content graph(rel[&T x, &L edge, &T y] v, NodeLinker[&T] nodeLinker=defaultNodeLinker, NodeLabeler[&T] nodeLabeler=defaultNodeLabeler, str title="Graph", CytoLayout \layout=defaultCoseLayout(), CytoStyle nodeStyle=defaultNodeStyle(), CytoStyle edgeStyle=defaultEdgeStyle(), list[CytoStyleOf] styles=[]) - = content(title, graphServer(cytoscape(graphData(v, nodeLinker=nodeLinker, nodeLabeler=nodeLabeler), \layout=\layout, nodeStyle=nodeStyle, edgeStyle=edgeStyle, styles=styles))); +Content graph(rel[&T x, &L edge, &T y] v, CytoGraphConfig cfg=cytoGraphConfig()) + = content(cfg.title, graphServer(cytoscape(graphData(v, cfg=cfg), cfg=cfg))); alias NodeLinker[&T] = loc (&T _id1); loc defaultNodeLinker(/loc l) = l; @@ -87,58 +122,64 @@ str defaultNodeLabeler(/str s) = s; str defaultNodeLabeler(loc l) = l.file != "" ? l.file : ""; default str defaultNodeLabeler(&T v) = ""; +alias NodeClassifier[&T] = str (&T _id3); +str defaultNodeClassifier(&T _) = "node"; + +alias EdgeClassifier[&T] = str (&T _from, &T _to); +str defaultEdgeClassifier(&T _, &T _) = "edge"; + alias EdgeLabeler[&T]= str (&T _source, &T _target); str defaultEdgeLabeler(&T _source, &T _target) = ""; -Cytoscape cytoscape(list[CytoData] \data, \CytoLayout \layout=\defaultCoseLayout(), CytoStyle nodeStyle=defaultNodeStyle(), CytoStyle edgeStyle=defaultEdgeStyle(), list[CytoStyleOf] styles=[]) +Cytoscape cytoscape(list[CytoData] \data, CytoGraphConfig cfg=cytoGraphConfig()) = cytoscape( elements=\data, style=[ - cytoNodeStyleOf(nodeStyle), - cytoEdgeStyleOf(edgeStyle), - *styles + cytoNodeStyleOf(cfg.nodeStyle), + cytoEdgeStyleOf(cfg.edgeStyle), + *cfg.styles ], - \layout=\layout + \layout=cfg.\layout ); -list[CytoData] graphData(rel[loc x, loc y] v, NodeLinker[loc] nodeLinker=defaultNodeLinker, NodeLabeler[loc] nodeLabeler=defaultNodeLabeler, EdgeLabeler[loc] edgeLabeler=defaultEdgeLabeler) - = [cytodata(\node("", label=nodeLabeler(e), editor="")) | e <- {*v, *v}] + - [cytodata(\edge("", "", label=edgeLabeler(from, to))) | <- v] +list[CytoData] graphData(rel[loc x, loc y] v, CytoGraphConfig cfg=cytoGraphConfig()) + = [cytodata(\node("", label=cfg.nodeLabeler(e), editor="", class=cfg.nodeClassifier(e))) | e <- {*v, *v}] + + [cytodata(\edge("", "", label=cfg.edgeLabeler(from, to))) | <- v] ; -default list[CytoData] graphData(rel[&T x, &T y] v, NodeLinker[&T] nodeLinker=defaultNodeLinker, NodeLabeler[&T] nodeLabeler=defaultNodeLabeler, EdgeLabeler[&T] edgeLabeler=defaultEdgeLabeler) - = [cytodata(\node("", label=nodeLabeler(e), editor="")) | e <- {*v, *v}] + - [cytodata(\edge("", "", label=edgeLabeler(from, to))) | <- v] +default list[CytoData] graphData(rel[&T x, &T y] v, CytoGraphConfig cfg=cytoGraphConfig()) + = [cytodata(\node("", label=cfg.nodeLabeler(e), editor="", class=cfg.nodeClassifier(e))) | e <- {*v, *v}] + + [cytodata(\edge("", "", label=cfg.edgeLabeler(from, to))) | <- v] ; -list[CytoData] graphData(lrel[loc x, &L edge, loc y] v, NodeLinker[&T] nodeLinker=defaultNodeLinker, NodeLabeler[&T] nodeLabeler=defaultNodeLabeler, EdgeLabeler[&T] edgeLabeler=defaultEdgeLabeler) - = [cytodata(\node("", label=nodeLabeler(e), editor="")) | e <- {*v, *v}] + +list[CytoData] graphData(lrel[loc x, &L edge, loc y] v, CytoGraphConfig cfg=cytoGraphConfig()) + = [cytodata(\node("", label=cfg.nodeLabeler(e), editor="", class=cfg.nodeClassifier(e))) | e <- {*v, *v}] + [cytodata(\edge("", "", label="")) | <- v] ; -default list[CytoData] graphData(lrel[&T x, &L edge, &T y] v, NodeLinker[&T] nodeLinker=defaultNodeLinker, NodeLabeler[&T] nodeLabeler=defaultNodeLabeler, EdgeLabeler[&T] edgeLabeler=defaultEdgeLabeler) - = [cytodata(\node("", label=nodeLabeler(e), editor="")) | e <- {*v, *v}] + +default list[CytoData] graphData(lrel[&T x, &L edge, &T y] v, CytoGraphConfig cfg=cytoGraphConfig()) + = [cytodata(\node("", label=cfg.nodeLabeler(e), editor="", class=cfg.nodeClassifier(e))) | e <- {*v, *v}] + [cytodata(\edge("", "", label="")) | <- v] ; -list[CytoData] graphData(lrel[loc x, loc y] v, NodeLinker[loc] nodeLinker=defaultNodeLinker, NodeLabeler[loc] nodeLabeler=defaultNodeLabeler, EdgeLabeler[loc] edgeLabeler=defaultEdgeLabeler) - = [cytodata(\node("", label=nodeLabeler(e), editor="")) | e <- {*v, *v}] + - [cytodata(\edge("", "", label=edgeLabeler(from, to))) | <- v] +list[CytoData] graphData(lrel[loc x, loc y] v, CytoGraphConfig cfg=cytoGraphConfig()) + = [cytodata(\node("", label=cfg.nodeLabeler(e), editor="", class=cfg.nodeClassifier(e))) | e <- {*v, *v}] + + [cytodata(\edge("", "", label=cfg.edgeLabeler(from, to))) | <- v] ; -default list[CytoData] graphData(lrel[&T x, &T y] v, NodeLinker[&T] nodeLinker=defaultNodeLinker, NodeLabeler[&T] nodeLabeler=defaultNodeLabeler, EdgeLabeler[&T] edgeLabeler=defaultEdgeLabeler) - = [cytodata(\node("", label=nodeLabeler(e), editor="")) | e <- {*v, *v}] + - [cytodata(\edge("", "", label=edgeLabeler(from, to))) | <- v] +default list[CytoData] graphData(lrel[&T x, &T y] v, CytoGraphConfig cfg=cytoGraphConfig()) + = [cytodata(\node("", label=cfg.nodeLabeler(e), editor="", class=cfg.nodeClassifier(e))) | e <- {*v, *v}] + + [cytodata(\edge("", "", label=cfg.edgeLabeler(from, to))) | <- v] ; -list[CytoData] graphData(rel[loc x, &L edge, loc y] v, NodeLinker[loc] nodeLinker=defaultNodeLinker, NodeLabeler[loc] nodeLabeler=defaultNodeLabeler, EdgeLabeler[&T] edgeLabeler=defaultEdgeLabeler) - = [cytodata(\node("", label=nodeLabeler(e), editor="")) | e <- {*v, *v}] + +list[CytoData] graphData(rel[loc x, &L edge, loc y] v, CytoGraphConfig cfg=cytoGraphConfig()) + = [cytodata(\node("", label=cfg.nodeLabeler(e), editor="", class=cfg.nodeClassifier(e))) | e <- {*v, *v}] + [cytodata(\edge("", "", label="")) | <- v] ; -default list[CytoData] graphData(rel[&T x, &L edge, &T y] v, NodeLinker[&T] nodeLinker=defaultNodeLinker, NodeLabeler[&T] nodeLabeler=defaultNodeLabeler, EdgeLabeler[&T] edgeLabeler=defaultEdgeLabeler) - = [cytodata(\node("", label=nodeLabeler(e), editor="")) | e <- {*v, *v}] + +default list[CytoData] graphData(rel[&T x, &L edge, &T y] v, CytoGraphConfig cfg=cytoGraphConfig()) + = [cytodata(\node("", label=cfg.nodeLabeler(e), editor="", class=cfg.nodeClassifier(e))) | e <- {*v, *v}] + [cytodata(\edge("", "", label="")) | <- v] ; @@ -181,7 +222,7 @@ data CytoData = cytodata(CytoElement \data); data CytoElement - = \node(str id, str label=id, str editor="|none:///|") + = \node(str id, str label=id, str editor="|none:///|", str class="node") | \edge(str source, str target, str id="-", str label="") ; From fcec7b47bf091dfdb613127f3963bf07a7252932 Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Tue, 18 Jun 2024 13:50:51 +0200 Subject: [PATCH 013/191] fixes #1979 --- src/org/rascalmpl/interpreter/result/ConstructorFunction.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/org/rascalmpl/interpreter/result/ConstructorFunction.java b/src/org/rascalmpl/interpreter/result/ConstructorFunction.java index 54fb43423f4..a20d3fb08e8 100644 --- a/src/org/rascalmpl/interpreter/result/ConstructorFunction.java +++ b/src/org/rascalmpl/interpreter/result/ConstructorFunction.java @@ -157,7 +157,7 @@ public Result computeDefaultKeywordParameter(String label, IConstructor } else { Expression def = getKeywordParameterDefaults().get(kwparam); - IValue res = def.interpret(eval).value; + IValue res = def.interpret(eval).getValue(); if (!res.getType().isSubtypeOf(kwType)) { throw new UnexpectedKeywordArgumentType(kwparam, kwType, res.getType(), ctx.getCurrentAST()); From 620b409f4f0813f7497dacde089d37a795c8fecd Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Tue, 18 Jun 2024 14:31:55 +0200 Subject: [PATCH 014/191] working with new API for graphs --- .../library/lang/rascal/vis/ImportGraph.rsc | 11 +-- src/org/rascalmpl/library/vis/Graphs.rsc | 80 ++++++++++++------- 2 files changed, 54 insertions(+), 37 deletions(-) diff --git a/src/org/rascalmpl/library/lang/rascal/vis/ImportGraph.rsc b/src/org/rascalmpl/library/lang/rascal/vis/ImportGraph.rsc index 38908f8c586..293635c5fff 100644 --- a/src/org/rascalmpl/library/lang/rascal/vis/ImportGraph.rsc +++ b/src/org/rascalmpl/library/lang/rascal/vis/ImportGraph.rsc @@ -50,11 +50,8 @@ void importGraph(PathConfig pcfg, bool hideExternals=true) { + { <"_" , to> | to <- top(m.imports + m.extends) } // pull up the top modules ; - str nodeClass(str n) = "rascal.project" when n notin m.external; - str nodeClass(str n) = "rascal.external" when n in m.external; - - str edgeClass(str from, str to) = "rascal.import" when in m.imports; - str edgeClass(str from, str to) = "rascal.extend" when in m.extends; + str nodeClass(str n) = n in m.external ? "external" : "project"; + str edgeClass(str from, str to) = in m.imports ? "import" : "extend"; nonTransitiveEdges = transitiveReduction(m.imports + m.extends); cyclicNodes = { x | <- (m.imports + m.extends)+}; @@ -70,7 +67,7 @@ void importGraph(PathConfig pcfg, bool hideExternals=true) { ), cytoStyleOf( selector=or([ - and([\edge(), equal("label", "E")])]), // extend edges + and([\edge(), className("extend")])]), // extend edges style=defaultEdgeStyle()[\line-style="dashed"] // are dashed ), *[ cytoStyleOf( @@ -91,7 +88,7 @@ void importGraph(PathConfig pcfg, bool hideExternals=true) { default loc modLinker(value _) = |nothing:///|; cfg = cytoGraphConfig( - \layout=dagreLayout(ranker=\tight-tree()), + \layout=defaultDagreLayout()[ranker=\network-simplex()], styles=styles, title="Rascal Import/Extend Graph", nodeClassifier=nodeClass, diff --git a/src/org/rascalmpl/library/vis/Graphs.rsc b/src/org/rascalmpl/library/vis/Graphs.rsc index 2c0d99bf827..1e502f801c5 100644 --- a/src/org/rascalmpl/library/vis/Graphs.rsc +++ b/src/org/rascalmpl/library/vis/Graphs.rsc @@ -61,12 +61,46 @@ data CytoGraphConfig = cytoGraphConfig( list[CytoStyleOf] styles = [] ); +@synopsis{A NodeLinker maps node identities to a source location to link to} +alias NodeLinker[&T] = loc (&T _id1); + +@synopsis{The default node linker assumes any loc found in the node identity is a proper link.} +loc defaultNodeLinker(/loc l) = l; +default loc defaultNodeLinker(&T _) = |nothing:///|; + +@synopsis{A NodeLabeler maps node identies to descriptive node labels} +alias NodeLabeler[&T]= str (&T _id2); + +@synopsis{The default node labeler searches for any `str`` in the identity, or otherwise a file name of a `loc`} +str defaultNodeLabeler(/str s) = s; +str defaultNodeLabeler(loc l) = l.file != "" ? l.file : ""; +default str defaultNodeLabeler(&T v) = ""; + +@synopsis{A NodeClassifier maps node identities to classes that are used later to select specific layout and coloring options.} +alias NodeClassifier[&T] = str (&T _id3); + +@synopsis{The default class for all nodes is `"node"``} +str defaultNodeClassifier(&T _) = "node"; + +@synopsis{An EdgeClassifier maps edge identities to classes that are used later to select specific layout and coloring options.} +alias EdgeClassifier[&T] = str (&T _from, &T _to); + +@synopsis{The default class for all edges is `"edge"`} +str defaultEdgeClassifier(&T _, &T _) = "edge"; + +@synopsis{An EdgeLabeler maps edge identies to descriptive edge labels.} +alias EdgeLabeler[&T]= str (&T _source, &T _target); + +@synopsis{The default edge labeler returns the empty label for all edges.} +str defaultEdgeLabeler(&T _source, &T _target) = ""; + + @synopsis{A graph plot from a binary list relation.} @examples{ ```rascal-shell import vis::Graphs; graph([ | x <- [1..100]] + [<100,1>]) -graph([ | x <- [1..100]] + [<100,1>], \layout=\defaultCircleLayout()) +graph([ | x <- [1..100]] + [<100,1>], cfg=cytoGraphConfig(\layout=\defaultCircleLayout())) ``` Providing locations as node identities automatically transforms them to node links: @@ -77,7 +111,7 @@ d = [<|std:///|, e> | e <- |std:///|.ls]; d += [ | <_, e> <- d, isDirectory(e), f <- e.ls]; graph(d, \layout=defaultDagreLayout()); // here we adapt the node labeler to show only the last file name in the path of the location: -graph(d, \layout=defaultDagreLayout(), nodeLabeler=str (loc l) { return l.file; }); +graph(d, \layout=defaultDagreLayout(), cfg=cytoGraphConfig(nodeLabeler=str (loc l) { return l.file; })); ``` } Content graph(lrel[&T x, &T y] v, CytoGraphConfig cfg = cytoGraphConfig()) @@ -113,25 +147,6 @@ graph({ | x <- [1..100]} + {<100,101,1>}) Content graph(rel[&T x, &L edge, &T y] v, CytoGraphConfig cfg=cytoGraphConfig()) = content(cfg.title, graphServer(cytoscape(graphData(v, cfg=cfg), cfg=cfg))); -alias NodeLinker[&T] = loc (&T _id1); -loc defaultNodeLinker(/loc l) = l; -default loc defaultNodeLinker(&T _) = |nothing:///|; - -alias NodeLabeler[&T]= str (&T _id2); -str defaultNodeLabeler(/str s) = s; -str defaultNodeLabeler(loc l) = l.file != "" ? l.file : ""; -default str defaultNodeLabeler(&T v) = ""; - -alias NodeClassifier[&T] = str (&T _id3); -str defaultNodeClassifier(&T _) = "node"; - -alias EdgeClassifier[&T] = str (&T _from, &T _to); -str defaultEdgeClassifier(&T _, &T _) = "edge"; - -alias EdgeLabeler[&T]= str (&T _source, &T _target); -str defaultEdgeLabeler(&T _source, &T _target) = ""; - - Cytoscape cytoscape(list[CytoData] \data, CytoGraphConfig cfg=cytoGraphConfig()) = cytoscape( elements=\data, @@ -145,42 +160,42 @@ Cytoscape cytoscape(list[CytoData] \data, CytoGraphConfig cfg=cytoGraphConfig()) list[CytoData] graphData(rel[loc x, loc y] v, CytoGraphConfig cfg=cytoGraphConfig()) = [cytodata(\node("", label=cfg.nodeLabeler(e), editor="", class=cfg.nodeClassifier(e))) | e <- {*v, *v}] + - [cytodata(\edge("", "", label=cfg.edgeLabeler(from, to))) | <- v] + [cytodata(\edge("", "", label=cfg.edgeLabeler(from, to), class=cfg.edgeClassifier(from,to))) | <- v] ; default list[CytoData] graphData(rel[&T x, &T y] v, CytoGraphConfig cfg=cytoGraphConfig()) = [cytodata(\node("", label=cfg.nodeLabeler(e), editor="", class=cfg.nodeClassifier(e))) | e <- {*v, *v}] + - [cytodata(\edge("", "", label=cfg.edgeLabeler(from, to))) | <- v] + [cytodata(\edge("", "", label=cfg.edgeLabeler(from, to), class=cfg.edgeClassifier(from,to))) | <- v] ; list[CytoData] graphData(lrel[loc x, &L edge, loc y] v, CytoGraphConfig cfg=cytoGraphConfig()) = [cytodata(\node("", label=cfg.nodeLabeler(e), editor="", class=cfg.nodeClassifier(e))) | e <- {*v, *v}] + - [cytodata(\edge("", "", label="")) | <- v] + [cytodata(\edge("", "", label="", class=cfg.edgeClassifier(from,to))) | <- v] ; default list[CytoData] graphData(lrel[&T x, &L edge, &T y] v, CytoGraphConfig cfg=cytoGraphConfig()) = [cytodata(\node("", label=cfg.nodeLabeler(e), editor="", class=cfg.nodeClassifier(e))) | e <- {*v, *v}] + - [cytodata(\edge("", "", label="")) | <- v] + [cytodata(\edge("", "", label="", class=cfg.edgeClassifier(from,to))) | <- v] ; list[CytoData] graphData(lrel[loc x, loc y] v, CytoGraphConfig cfg=cytoGraphConfig()) = [cytodata(\node("", label=cfg.nodeLabeler(e), editor="", class=cfg.nodeClassifier(e))) | e <- {*v, *v}] + - [cytodata(\edge("", "", label=cfg.edgeLabeler(from, to))) | <- v] + [cytodata(\edge("", "", label=cfg.edgeLabeler(from, to), class=cfg.edgeClassifier(from,to))) | <- v] ; default list[CytoData] graphData(lrel[&T x, &T y] v, CytoGraphConfig cfg=cytoGraphConfig()) = [cytodata(\node("", label=cfg.nodeLabeler(e), editor="", class=cfg.nodeClassifier(e))) | e <- {*v, *v}] + - [cytodata(\edge("", "", label=cfg.edgeLabeler(from, to))) | <- v] + [cytodata(\edge("", "", label=cfg.edgeLabeler(from, to), class=cfg.edgeClassifier(from,to))) | <- v] ; list[CytoData] graphData(rel[loc x, &L edge, loc y] v, CytoGraphConfig cfg=cytoGraphConfig()) = [cytodata(\node("", label=cfg.nodeLabeler(e), editor="", class=cfg.nodeClassifier(e))) | e <- {*v, *v}] + - [cytodata(\edge("", "", label="")) | <- v] + [cytodata(\edge("", "", label="", class=cfg.edgeClassifier(from,to))) | <- v] ; default list[CytoData] graphData(rel[&T x, &L edge, &T y] v, CytoGraphConfig cfg=cytoGraphConfig()) = [cytodata(\node("", label=cfg.nodeLabeler(e), editor="", class=cfg.nodeClassifier(e))) | e <- {*v, *v}] + - [cytodata(\edge("", "", label="")) | <- v] + [cytodata(\edge("", "", label="", class=cfg.edgeClassifier(from,to))) | <- v] ; data CytoNodeShape @@ -223,7 +238,7 @@ data CytoData data CytoElement = \node(str id, str label=id, str editor="|none:///|", str class="node") - | \edge(str source, str target, str id="-", str label="") + | \edge(str source, str target, str id="-", str label="", str class="edge") ; data CytoHorizontalAlign @@ -381,14 +396,19 @@ data CytoSelector | \less(str field, int limit) | \greaterEqual(str field, int limit) | \lessEqual(str field, int limit) + | \className(str) ; +@synopsis{Utility to generate class attributes with multiple names consistently.} +CytoSelector classNames(set[str] names) = \className(" <}>"[..-1]); + @synopsis{Serialize a ((CytoSelector)) to string for client side expression.} str formatCytoSelector(\node()) = "node"; str formatCytoSelector(\edge()) = "edge"; str formatCytoSelector(\id(str i)) = formatCytoSelector(equal("id", i)); str formatCytoSelector(and(list[CytoSelector] cjs)) = "<}>"; str formatCytoSelector(or(list[CytoSelector] cjs)) = ",<}>"[..-1]; +str formatCytoSelector(className(str class)) = "."; str formatCytoSelector(equal(str field, str val)) = "[ = \"\"]"; str formatCytoSelector(equal(str field, int lim)) = "[ = ]"; str formatCytoSelector(greater(str field, int lim)) = "[ \> ]"; From b602685036c608683cfa011fc9885d3446f7fb7e Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Tue, 18 Jun 2024 14:39:56 +0200 Subject: [PATCH 015/191] added doc strings --- src/org/rascalmpl/library/vis/Graphs.rsc | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/org/rascalmpl/library/vis/Graphs.rsc b/src/org/rascalmpl/library/vis/Graphs.rsc index 1e502f801c5..7324c3ae0ba 100644 --- a/src/org/rascalmpl/library/vis/Graphs.rsc +++ b/src/org/rascalmpl/library/vis/Graphs.rsc @@ -25,6 +25,7 @@ import lang::html::AST; import util::IDEServices; import Content; import ValueIO; +import Set; @synopsis{Optional configuration attributes for graph style and graph layout} @description{ @@ -147,6 +148,11 @@ graph({ | x <- [1..100]} + {<100,101,1>}) Content graph(rel[&T x, &L edge, &T y] v, CytoGraphConfig cfg=cytoGraphConfig()) = content(cfg.title, graphServer(cytoscape(graphData(v, cfg=cfg), cfg=cfg))); +@synopsis{This core workhorse mixes the graph data with the configuration to obtain visualizable CytoScape.js data-structure.} +@description{ +This data-structure is serialized to JSON and communicated directly to initialize cytoscape.js. +The serialization is done by the generic ((lang::json::IO)) library under the hood of a ((util::Webserver)). +} Cytoscape cytoscape(list[CytoData] \data, CytoGraphConfig cfg=cytoGraphConfig()) = cytoscape( elements=\data, @@ -158,41 +164,49 @@ Cytoscape cytoscape(list[CytoData] \data, CytoGraphConfig cfg=cytoGraphConfig()) \layout=cfg.\layout ); +@synopsis{Turns a `rel[loc from, loc to]` into a graph} list[CytoData] graphData(rel[loc x, loc y] v, CytoGraphConfig cfg=cytoGraphConfig()) = [cytodata(\node("", label=cfg.nodeLabeler(e), editor="", class=cfg.nodeClassifier(e))) | e <- {*v, *v}] + [cytodata(\edge("", "", label=cfg.edgeLabeler(from, to), class=cfg.edgeClassifier(from,to))) | <- v] ; +@synopsis{Turns any `rel[&T from, &T to]` into a graph} default list[CytoData] graphData(rel[&T x, &T y] v, CytoGraphConfig cfg=cytoGraphConfig()) = [cytodata(\node("", label=cfg.nodeLabeler(e), editor="", class=cfg.nodeClassifier(e))) | e <- {*v, *v}] + [cytodata(\edge("", "", label=cfg.edgeLabeler(from, to), class=cfg.edgeClassifier(from,to))) | <- v] ; +@synopsis{Turns any `lrel[loc from, &L edge, loc to]` into a graph} list[CytoData] graphData(lrel[loc x, &L edge, loc y] v, CytoGraphConfig cfg=cytoGraphConfig()) = [cytodata(\node("", label=cfg.nodeLabeler(e), editor="", class=cfg.nodeClassifier(e))) | e <- {*v, *v}] + [cytodata(\edge("", "", label="", class=cfg.edgeClassifier(from,to))) | <- v] ; +@synopsis{Turns any `lrel[&T from, &L edge, &T to]` into a graph} default list[CytoData] graphData(lrel[&T x, &L edge, &T y] v, CytoGraphConfig cfg=cytoGraphConfig()) = [cytodata(\node("", label=cfg.nodeLabeler(e), editor="", class=cfg.nodeClassifier(e))) | e <- {*v, *v}] + [cytodata(\edge("", "", label="", class=cfg.edgeClassifier(from,to))) | <- v] ; +@synopsis{Turns any `lrel[loc from, loc to]` into a graph} list[CytoData] graphData(lrel[loc x, loc y] v, CytoGraphConfig cfg=cytoGraphConfig()) = [cytodata(\node("", label=cfg.nodeLabeler(e), editor="", class=cfg.nodeClassifier(e))) | e <- {*v, *v}] + [cytodata(\edge("", "", label=cfg.edgeLabeler(from, to), class=cfg.edgeClassifier(from,to))) | <- v] ; +@synopsis{Turns any `lrel[&T from, &T to]` into a graph} default list[CytoData] graphData(lrel[&T x, &T y] v, CytoGraphConfig cfg=cytoGraphConfig()) = [cytodata(\node("", label=cfg.nodeLabeler(e), editor="", class=cfg.nodeClassifier(e))) | e <- {*v, *v}] + [cytodata(\edge("", "", label=cfg.edgeLabeler(from, to), class=cfg.edgeClassifier(from,to))) | <- v] ; +@synopsis{Turns any `rel[loc from, &L edge, loc to]` into a graph} list[CytoData] graphData(rel[loc x, &L edge, loc y] v, CytoGraphConfig cfg=cytoGraphConfig()) = [cytodata(\node("", label=cfg.nodeLabeler(e), editor="", class=cfg.nodeClassifier(e))) | e <- {*v, *v}] + [cytodata(\edge("", "", label="", class=cfg.edgeClassifier(from,to))) | <- v] ; +@synopsis{Turns any `rel[&T from, &L edge, &T to]` into a graph} default list[CytoData] graphData(rel[&T x, &L edge, &T y] v, CytoGraphConfig cfg=cytoGraphConfig()) = [cytodata(\node("", label=cfg.nodeLabeler(e), editor="", class=cfg.nodeClassifier(e))) | e <- {*v, *v}] + [cytodata(\edge("", "", label="", class=cfg.edgeClassifier(from,to))) | <- v] From 4c35d1203cd32e5cde0a4e3722b61a3fc425bdef Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Tue, 18 Jun 2024 22:18:52 +0200 Subject: [PATCH 016/191] fixed the edge classifiers --- .../library/analysis/graphs/Graph.rsc | 3 + .../library/lang/rascal/vis/ImportGraph.rsc | 37 ++++++------ src/org/rascalmpl/library/vis/Graphs.rsc | 60 ++++++++++--------- 3 files changed, 56 insertions(+), 44 deletions(-) diff --git a/src/org/rascalmpl/library/analysis/graphs/Graph.rsc b/src/org/rascalmpl/library/analysis/graphs/Graph.rsc index dc9301f5c3a..c10bbc51c2e 100644 --- a/src/org/rascalmpl/library/analysis/graphs/Graph.rsc +++ b/src/org/rascalmpl/library/analysis/graphs/Graph.rsc @@ -289,3 +289,6 @@ reduction's worst case complexity is in the same order as transitive closure its * reduces cyclic sub-graphs to "empty" } Graph[&T] transitiveReduction(Graph[&T] g) = g - (g o g+); + +@synopsis{Select the short-cut edges, the ones that transitively close at least two other edges.} +Graph[&T] transitiveEdges(Graph[&T] g) = g o g+; diff --git a/src/org/rascalmpl/library/lang/rascal/vis/ImportGraph.rsc b/src/org/rascalmpl/library/lang/rascal/vis/ImportGraph.rsc index 293635c5fff..70475d79c9d 100644 --- a/src/org/rascalmpl/library/lang/rascal/vis/ImportGraph.rsc +++ b/src/org/rascalmpl/library/lang/rascal/vis/ImportGraph.rsc @@ -50,32 +50,35 @@ void importGraph(PathConfig pcfg, bool hideExternals=true) { + { <"_" , to> | to <- top(m.imports + m.extends) } // pull up the top modules ; - str nodeClass(str n) = n in m.external ? "external" : "project"; - str edgeClass(str from, str to) = in m.imports ? "import" : "extend"; - - nonTransitiveEdges = transitiveReduction(m.imports + m.extends); - cyclicNodes = { x | <- (m.imports + m.extends)+}; - transitiveEdges = { | <- (m.imports + m.extends - nonTransitiveEdges), x notin cyclicNodes, y notin cyclicNodes}; + list[str] nodeClass(str n) = [ + *["external" | n in m.external], + *["project" | n notin m.external] + ]; + list[str] edgeClass(str from, str to) = [ + *["extend" | in m.extends], + *["import" | in m.imports], + *["transitive" | in g o g+] + ]; + styles = [ cytoStyleOf( selector=or([ - and([\node(), id("_")]), // the top node - and([\edge(), equal("source", "_")]) // edges from the top node + \node(id("_")), + \edge(equal("source", "_")) ]), - style=defaultNodeStyle()[visibility="hidden"] // hide it all + style=defaultNodeStyle()[visibility="hidden"] ), + cytoStyleOf( - selector=or([ - and([\edge(), className("extend")])]), // extend edges - style=defaultEdgeStyle()[\line-style="dashed"] // are dashed + selector=\edge(className("extend")), + style=defaultEdgeStyle()[\line-style="dashed"] ), - *[ cytoStyleOf( - selector=and([\edge(),equal("source", f),equal("target", t)]), // any transitive edge - style=defaultEdgeStyle()[opacity=".25"][\line-opacity="0.25"] // will be made 25% opaque + + cytoStyleOf( + selector=\edge(className("transitive")), + style=defaultEdgeStyle()[opacity=".25"][\line-opacity="0.25"] ) - | <- transitiveEdges - ] ]; loc modLinker(str name) { diff --git a/src/org/rascalmpl/library/vis/Graphs.rsc b/src/org/rascalmpl/library/vis/Graphs.rsc index 7324c3ae0ba..788629c58f3 100644 --- a/src/org/rascalmpl/library/vis/Graphs.rsc +++ b/src/org/rascalmpl/library/vis/Graphs.rsc @@ -78,16 +78,16 @@ str defaultNodeLabeler(loc l) = l.file != "" ? l.file : ""; default str defaultNodeLabeler(&T v) = ""; @synopsis{A NodeClassifier maps node identities to classes that are used later to select specific layout and coloring options.} -alias NodeClassifier[&T] = str (&T _id3); +alias NodeClassifier[&T] = list[str] (&T _id3); -@synopsis{The default class for all nodes is `"node"``} -str defaultNodeClassifier(&T _) = "node"; +@synopsis{The default classifier produces no classes} +list[str] defaultNodeClassifier(&T _) = []; @synopsis{An EdgeClassifier maps edge identities to classes that are used later to select specific layout and coloring options.} -alias EdgeClassifier[&T] = str (&T _from, &T _to); +alias EdgeClassifier[&T] = list[str] (&T _from, &T _to); -@synopsis{The default class for all edges is `"edge"`} -str defaultEdgeClassifier(&T _, &T _) = "edge"; +@synopsis{The default edge classifier produces no classes} +list[str] defaultEdgeClassifier(&T _, &T _) = []; @synopsis{An EdgeLabeler maps edge identies to descriptive edge labels.} alias EdgeLabeler[&T]= str (&T _source, &T _target); @@ -166,50 +166,50 @@ Cytoscape cytoscape(list[CytoData] \data, CytoGraphConfig cfg=cytoGraphConfig()) @synopsis{Turns a `rel[loc from, loc to]` into a graph} list[CytoData] graphData(rel[loc x, loc y] v, CytoGraphConfig cfg=cytoGraphConfig()) - = [cytodata(\node("", label=cfg.nodeLabeler(e), editor="", class=cfg.nodeClassifier(e))) | e <- {*v, *v}] + - [cytodata(\edge("", "", label=cfg.edgeLabeler(from, to), class=cfg.edgeClassifier(from,to))) | <- v] + = [cytodata(\node("", label=cfg.nodeLabeler(e), editor=""), classes=cfg.nodeClassifier(e)) | e <- {*v, *v}] + + [cytodata(\edge("", "", label=cfg.edgeLabeler(from, to)), classes=cfg.edgeClassifier(from,to)) | <- v] ; @synopsis{Turns any `rel[&T from, &T to]` into a graph} default list[CytoData] graphData(rel[&T x, &T y] v, CytoGraphConfig cfg=cytoGraphConfig()) - = [cytodata(\node("", label=cfg.nodeLabeler(e), editor="", class=cfg.nodeClassifier(e))) | e <- {*v, *v}] + - [cytodata(\edge("", "", label=cfg.edgeLabeler(from, to), class=cfg.edgeClassifier(from,to))) | <- v] + = [cytodata(\node("", label=cfg.nodeLabeler(e), editor=""), classes=cfg.nodeClassifier(e)) | e <- {*v, *v}] + + [cytodata(\edge("", "", label=cfg.edgeLabeler(from, to)), classes=cfg.edgeClassifier(from,to)) | <- v] ; @synopsis{Turns any `lrel[loc from, &L edge, loc to]` into a graph} list[CytoData] graphData(lrel[loc x, &L edge, loc y] v, CytoGraphConfig cfg=cytoGraphConfig()) - = [cytodata(\node("", label=cfg.nodeLabeler(e), editor="", class=cfg.nodeClassifier(e))) | e <- {*v, *v}] + - [cytodata(\edge("", "", label="", class=cfg.edgeClassifier(from,to))) | <- v] + = [cytodata(\node("", label=cfg.nodeLabeler(e), editor=""), classes=cfg.nodeClassifier(e)) | e <- {*v, *v}] + + [cytodata(\edge("", "", label=""), classes=cfg.edgeClassifier(from,to)) | <- v] ; @synopsis{Turns any `lrel[&T from, &L edge, &T to]` into a graph} default list[CytoData] graphData(lrel[&T x, &L edge, &T y] v, CytoGraphConfig cfg=cytoGraphConfig()) - = [cytodata(\node("", label=cfg.nodeLabeler(e), editor="", class=cfg.nodeClassifier(e))) | e <- {*v, *v}] + - [cytodata(\edge("", "", label="", class=cfg.edgeClassifier(from,to))) | <- v] + = [cytodata(\node("", label=cfg.nodeLabeler(e), editor=""), classes=cfg.nodeClassifier(e)) | e <- {*v, *v}] + + [cytodata(\edge("", "", label=""), classes=cfg.edgeClassifier(from,to)) | <- v] ; @synopsis{Turns any `lrel[loc from, loc to]` into a graph} list[CytoData] graphData(lrel[loc x, loc y] v, CytoGraphConfig cfg=cytoGraphConfig()) - = [cytodata(\node("", label=cfg.nodeLabeler(e), editor="", class=cfg.nodeClassifier(e))) | e <- {*v, *v}] + - [cytodata(\edge("", "", label=cfg.edgeLabeler(from, to), class=cfg.edgeClassifier(from,to))) | <- v] + = [cytodata(\node("", label=cfg.nodeLabeler(e), editor=""), classes=cfg.nodeClassifier(e)) | e <- {*v, *v}] + + [cytodata(\edge("", "", label=cfg.edgeLabeler(from, to)), classes=cfg.edgeClassifier(from,to)) | <- v] ; @synopsis{Turns any `lrel[&T from, &T to]` into a graph} default list[CytoData] graphData(lrel[&T x, &T y] v, CytoGraphConfig cfg=cytoGraphConfig()) - = [cytodata(\node("", label=cfg.nodeLabeler(e), editor="", class=cfg.nodeClassifier(e))) | e <- {*v, *v}] + - [cytodata(\edge("", "", label=cfg.edgeLabeler(from, to), class=cfg.edgeClassifier(from,to))) | <- v] + = [cytodata(\node("", label=cfg.nodeLabeler(e), editor=""), classes=cfg.nodeClassifier(e)) | e <- {*v, *v}] + + [cytodata(\edge("", "", label=cfg.edgeLabeler(from, to)), classes=cfg.edgeClassifier(from,to)) | <- v] ; @synopsis{Turns any `rel[loc from, &L edge, loc to]` into a graph} list[CytoData] graphData(rel[loc x, &L edge, loc y] v, CytoGraphConfig cfg=cytoGraphConfig()) - = [cytodata(\node("", label=cfg.nodeLabeler(e), editor="", class=cfg.nodeClassifier(e))) | e <- {*v, *v}] + - [cytodata(\edge("", "", label="", class=cfg.edgeClassifier(from,to))) | <- v] + = [cytodata(\node("", label=cfg.nodeLabeler(e), editor=""), classes=cfg.nodeClassifier(e)) | e <- {*v, *v}] + + [cytodata(\edge("", "", label=""), classes=cfg.edgeClassifier(from,to)) | <- v] ; @synopsis{Turns any `rel[&T from, &L edge, &T to]` into a graph} default list[CytoData] graphData(rel[&T x, &L edge, &T y] v, CytoGraphConfig cfg=cytoGraphConfig()) - = [cytodata(\node("", label=cfg.nodeLabeler(e), editor="", class=cfg.nodeClassifier(e))) | e <- {*v, *v}] + - [cytodata(\edge("", "", label="", class=cfg.edgeClassifier(from,to))) | <- v] + = [cytodata(\node("", label=cfg.nodeLabeler(e), editor=""), classes=cfg.nodeClassifier(e)) | e <- {*v, *v}] + + [cytodata(\edge("", "", label=""), classes=cfg.edgeClassifier(from,to)) | <- v] ; data CytoNodeShape @@ -248,11 +248,11 @@ data Cytoscape ); data CytoData - = cytodata(CytoElement \data); + = cytodata(CytoElement \data, list[str] classes=[]); data CytoElement - = \node(str id, str label=id, str editor="|none:///|", str class="node") - | \edge(str source, str target, str id="-", str label="", str class="edge") + = \node(str id, str label=id, str editor="|none:///|") + | \edge(str source, str target, str id="-", str label="") ; data CytoHorizontalAlign @@ -384,7 +384,7 @@ data CytoStyle str \source-arrow-color = "black", CytoArrowHeadStyle \target-arrow-shape = CytoArrowHeadStyle::triangle(), CytoArrowHeadStyle \source-arrow-shape = CytoArrowHeadStyle::none(), - CytoCurveStyle \curve-style = CytoCurveStyle::bezier(), + CytoCurveStyle \curve-style = CytoCurveStyle::\unbundled-bezier(), int \source-text-offset = 1, int \target-text-offset = 1, str label = "data(label)" @@ -413,8 +413,14 @@ data CytoSelector | \className(str) ; +@synopsis{Short-hand for a node with a single condition} +CytoSelector \node(CytoSelector condition) = and([\node(), condition]); + +@synopsis{Short-hand for a node with a single condition} +CytoSelector \edge(CytoSelector condition) = and([\edge(), condition]); + @synopsis{Utility to generate class attributes with multiple names consistently.} -CytoSelector classNames(set[str] names) = \className(" <}>"[..-1]); +str more(set[str] names) = " <}>"[..-1]; @synopsis{Serialize a ((CytoSelector)) to string for client side expression.} str formatCytoSelector(\node()) = "node"; From c99359c6fd5e7418c20240dac26b21c9f9879e4e Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Tue, 18 Jun 2024 22:35:57 +0200 Subject: [PATCH 017/191] highlight cyclic edges --- .../rascalmpl/library/lang/rascal/vis/ImportGraph.rsc | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/org/rascalmpl/library/lang/rascal/vis/ImportGraph.rsc b/src/org/rascalmpl/library/lang/rascal/vis/ImportGraph.rsc index 70475d79c9d..a342f916aa5 100644 --- a/src/org/rascalmpl/library/lang/rascal/vis/ImportGraph.rsc +++ b/src/org/rascalmpl/library/lang/rascal/vis/ImportGraph.rsc @@ -55,10 +55,13 @@ void importGraph(PathConfig pcfg, bool hideExternals=true) { *["project" | n notin m.external] ]; + gClosed = g+; + list[str] edgeClass(str from, str to) = [ *["extend" | in m.extends], *["import" | in m.imports], - *["transitive" | in g o g+] + *["transitive" | in g o gClosed, notin gClosed, notin gClosed], + *["cyclic" | in gClosed] ]; styles = [ @@ -78,6 +81,11 @@ void importGraph(PathConfig pcfg, bool hideExternals=true) { cytoStyleOf( selector=\edge(className("transitive")), style=defaultEdgeStyle()[opacity=".25"][\line-opacity="0.25"] + ), + + cytoStyleOf( + selector=\edge(className("cyclic")), + style=defaultEdgeStyle()[opacity="1"][\line-opacity="1"][\width=10] ) ]; From f7e268c52b530d86980240017ebfb9e13e84cf9f Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Tue, 18 Jun 2024 22:58:27 +0200 Subject: [PATCH 018/191] can not style an edge with the defaultNodeStyler (infinite recursio --- .../library/lang/rascal/vis/ImportGraph.rsc | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/org/rascalmpl/library/lang/rascal/vis/ImportGraph.rsc b/src/org/rascalmpl/library/lang/rascal/vis/ImportGraph.rsc index a342f916aa5..07e0939441c 100644 --- a/src/org/rascalmpl/library/lang/rascal/vis/ImportGraph.rsc +++ b/src/org/rascalmpl/library/lang/rascal/vis/ImportGraph.rsc @@ -66,11 +66,13 @@ void importGraph(PathConfig pcfg, bool hideExternals=true) { styles = [ cytoStyleOf( - selector=or([ - \node(id("_")), - \edge(equal("source", "_")) - ]), - style=defaultNodeStyle()[visibility="hidden"] + selector=\edge(equal("source", "_")), + style=defaultEdgeStyle()[visibility="hidden"] + ), + + cytoStyleOf( + selector=\node(id("_")), + style=defaultNodeStyle()[visibility="hidden"] ), cytoStyleOf( @@ -81,7 +83,8 @@ void importGraph(PathConfig pcfg, bool hideExternals=true) { cytoStyleOf( selector=\edge(className("transitive")), style=defaultEdgeStyle()[opacity=".25"][\line-opacity="0.25"] - ), + ) + , cytoStyleOf( selector=\edge(className("cyclic")), From c425f825d0df75d22c55b1acda90c10ad1624f54 Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Wed, 19 Jun 2024 11:38:39 +0200 Subject: [PATCH 019/191] documented graph styling feature --- src/org/rascalmpl/library/vis/Graphs.rsc | 57 ++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/src/org/rascalmpl/library/vis/Graphs.rsc b/src/org/rascalmpl/library/vis/Graphs.rsc index 788629c58f3..c7652926381 100644 --- a/src/org/rascalmpl/library/vis/Graphs.rsc +++ b/src/org/rascalmpl/library/vis/Graphs.rsc @@ -46,6 +46,63 @@ Typically the functions passed into this configuration are closures that capture input data to find out about where to link and how to classify. The `&T` parameter reflects the type of the original input `Graph[&T]`; so that is the type of the nodes. Often this would be `loc` or `str`. } +@examples{ + +Let's experiment with a number of styling parameters based on the shape of a graph: +```rascal-shell +import vis::Graphs; +// let's play with the geneology of the "Simpsons" +g = { + <"Abraham Simpson", "Homer Simpson">, + <"Mona Simpson", "Homer Simpson">, + <"Homer Simpson", "Bart Simpson">, + <"Homer Simpson", "Lisa Simpson">, + <"Homer Simpson", "Maggie Simpson">, + <"Marge Simpson", "Bart Simpson">, + <"Marge Simpson", "Lisa Simpson">, + <"Marge Simpson", "Maggie Simpson">, + <"Bart Simpson", "Rod Flanders">, + <"Bart Simpson", "Todd Flanders">, + <"Lisa Simpson", "Bart Simpson">, + <"Abraham Simpson", "Patty Bouvier">, + <"Abraham Simpson", "Selma Bouvier">, + <"Mona Simpson", "Patty Bouvier">, + <"Mona Simpson", "Selma Bouvier"> +}; +// visualizing this without styling: +graph(g); +// to style nodes, let's select some special nodes and "classify" them first. We reuse some generic graph analysis tools. +import analysis::graphs::Graph; +list[str] nodeClassifier(str simpson) = [ + *["top" | simpson in top(g)], + *["bottom" | simpson in bottom(g)] +]; +// once classified, we can style each node according to their assigned classes. Nodes can be in more than one class. +styles = [ + cytoStyleOf( + selector=or([\node(className("top")),\node(className("bottom"))]), + style=defaultNodeStyle()[shape=CytoNodeShape::diamond()] + ) +]; +// we pick a sensible layout +lyt = defaultDagreLayout(); +// we wrap the styling information into a configuration wrapper: +cfg = cytoGraphConfig(nodeClassifier=nodeClassifier, styles=styles, \layout=lyt); +// and now we see the effect: +graph(g, cfg=cfg) +// now let's style some edges: +list[str] edgeClassifier(str from, str to) = ["grandparent" | in g o g]; +// add another styling element +styles += [ + cytoStyleOf( + selector=edge(className("grandparent")), + style=defaultEdgeStyle()[\line-style="dashed"] + ) +]; +// and draw again (while adding the grandparent edges too) +graph(g + (g o g), cytoGraphConfig(nodeClassifier=nodeClassifier, edgeClassifier=edgeClassifier, styles=styles, \layout=lyt)) +``` +} data CytoGraphConfig = cytoGraphConfig( str title="Graph", From cd8724f8d96765226d61ac0794ce1499d31a6ae3 Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Wed, 19 Jun 2024 12:03:57 +0200 Subject: [PATCH 020/191] set tutor to errorsAsWarnings due to bootstrap change in jsonResponse parameters --- pom.xml | 2 +- src/org/rascalmpl/library/Content.rsc | 19 +++++++++++-------- src/org/rascalmpl/library/vis/Graphs.rsc | 2 +- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/pom.xml b/pom.xml index afb406045ce..b130ab325c1 100644 --- a/pom.xml +++ b/pom.xml @@ -164,7 +164,7 @@ false false - false + true ${project.build.outputDirectory} ${project.basedir}/LICENSE |http://github.com/usethesource/rascal/blob/main| diff --git a/src/org/rascalmpl/library/Content.rsc b/src/org/rascalmpl/library/Content.rsc index a4307f309d1..74cfb32f15f 100644 --- a/src/org/rascalmpl/library/Content.rsc +++ b/src/org/rascalmpl/library/Content.rsc @@ -84,27 +84,30 @@ data Response | jsonResponse(Status status, map[str,str] header, value val, str dateTimeFormat = "yyyy-MM-dd\'T\'HH:mm:ss\'Z\'", JSONFormatter[value] formatter = str (value _) { fail; }) ; - @synopsis{Utility to quickly render a string as HTML content} Response response(str content, map[str,str] header = ()) = response(ok(), "text/html", header, content); - @synopsis{Utility to quickly report an HTTP error with a user-defined message} Response response(Status status, str explanation, map[str,str] header = ()) = response(status, "text/plain", header, explanation); - @synopsis{Utility to quickly make a plaintext response.} Response plain(str text) = response(ok(), "text/plain", (), text); - @synopsis{Utility to serve a file from any source location.} Response response(loc f, map[str,str] header = ()) = fileResponse(f, mimeTypes[f.extension]?"text/plain", header); +@synopsis{Utility to quickly serve any rascal value as a json text.} +@benefits{ +This comes in handy for asynchronous HTTP requests from Javascript clients. Rascal Values are +fully transformed to their respective JSON serialized form before being communicated over HTTP. +} +default Response response(value val, map[str,str] header = ()) = jsonResponse(ok(), header, val); -@synopsis{Utility to quickly serve any rascal value as a json text. This comes in handy for -asynchronous HTTP requests from Javascript.} -default Response response(value val, map[str,str] header = (), JSONFormatter[value] formatter = str (value _) { fail; }) = jsonResponse(ok(), header, val, formatter=formatter); - +@synopsis{Utility to quickly serve any rascal value as a json text, formatting data-types on-the-fly using a `formatter` function} +@benefits{ +Fast way of producing JSON strings for embedded DSLs on the Rascal side. +} +Response response(value val, JSONFormatter[value] formatter, map[str,str] header = ()) = jsonResponse(ok(), header, val, formatter=formatter); @synopsis{Encoding of HTTP status} data Status diff --git a/src/org/rascalmpl/library/vis/Graphs.rsc b/src/org/rascalmpl/library/vis/Graphs.rsc index c7652926381..4c93dcbab02 100644 --- a/src/org/rascalmpl/library/vis/Graphs.rsc +++ b/src/org/rascalmpl/library/vis/Graphs.rsc @@ -607,7 +607,7 @@ Response (Request) graphServer(Cytoscape ch) { } Response reply(get(/^\/cytoscape/)) { - return response(ch, formatter=formatCytoSelector); + return response(ch, formatCytoSelector); } // returns the main page that also contains the callbacks for retrieving data and configuration From 7b66cd28c7d54492392171300d32a3adb1582dbd Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Wed, 19 Jun 2024 12:45:07 +0200 Subject: [PATCH 021/191] better curves --- src/org/rascalmpl/library/vis/Graphs.rsc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/org/rascalmpl/library/vis/Graphs.rsc b/src/org/rascalmpl/library/vis/Graphs.rsc index 4c93dcbab02..433a51aa645 100644 --- a/src/org/rascalmpl/library/vis/Graphs.rsc +++ b/src/org/rascalmpl/library/vis/Graphs.rsc @@ -396,7 +396,7 @@ CytoStyle defaultEdgeStyle() \source-arrow-color = "black", \target-arrow-shape = CytoArrowHeadStyle::triangle(), \source-arrow-shape = CytoArrowHeadStyle::none(), - \curve-style = bezier(), + \curve-style = \unbundled-bezier(), \label = "data(label)" ); From e1599182735dee27ee7283524778677069ce4e5f Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Wed, 26 Jun 2024 11:59:55 +0200 Subject: [PATCH 022/191] this fixes #1987 but breaks the handling of default keyword parameters. Have to bring that back somehow by expecting NULL in the specific loops for keyword parameters --- src/org/rascalmpl/library/lang/json/IO.java | 18 +++++- src/org/rascalmpl/library/lang/json/IO.rsc | 27 +++++++- .../lang/json/internal/JsonValueReader.java | 61 ++++++++++++++++--- 3 files changed, 94 insertions(+), 12 deletions(-) diff --git a/src/org/rascalmpl/library/lang/json/IO.java b/src/org/rascalmpl/library/lang/json/IO.java index 6db83ff7032..d4f56a375ba 100644 --- a/src/org/rascalmpl/library/lang/json/IO.java +++ b/src/org/rascalmpl/library/lang/json/IO.java @@ -19,6 +19,12 @@ import java.io.StringReader; import java.io.StringWriter; import java.nio.charset.Charset; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Spliterator; +import java.util.Spliterators; +import java.util.stream.Collectors; +import java.util.stream.StreamSupport; import org.rascalmpl.debug.IRascalMonitor; import org.rascalmpl.exceptions.RuntimeExceptionFactory; @@ -36,8 +42,10 @@ import io.usethesource.vallang.IBool; import io.usethesource.vallang.IConstructor; import io.usethesource.vallang.IInteger; +import io.usethesource.vallang.IMap; import io.usethesource.vallang.ISourceLocation; import io.usethesource.vallang.IString; +import io.usethesource.vallang.ITuple; import io.usethesource.vallang.IValue; import io.usethesource.vallang.type.Type; import io.usethesource.vallang.type.TypeStore; @@ -102,7 +110,7 @@ public IValue fromJSON(IValue type, IString src) { } - public IValue readJSON(IValue type, ISourceLocation loc, IString dateTimeFormat, IBool lenient, IBool trackOrigins, IFunction parsers) { + public IValue readJSON(IValue type, ISourceLocation loc, IString dateTimeFormat, IBool lenient, IBool trackOrigins, IFunction parsers, IMap nulls) { TypeStore store = new TypeStore(); Type start = new TypeReifier(values).valueToType((IConstructor) type, store); @@ -116,6 +124,7 @@ public IValue readJSON(IValue type, ISourceLocation loc, IString dateTimeFormat, return new JsonValueReader(values, store, monitor, trackOrigins.getValue() ? loc : null) .setCalendarFormat(dateTimeFormat.getValue()) .setParsers(parsers) + .setNulls(unreify(null)) .read(in, start); } catch (IOException e) { @@ -127,6 +136,13 @@ public IValue readJSON(IValue type, ISourceLocation loc, IString dateTimeFormat, } } + private Map unreify(IMap nulls) { + var tr = new TypeReifier(values); + return nulls.stream() + .map(t -> (ITuple) t) + .collect(Collectors.toMap(t -> tr.valueToType((IConstructor) t.get(0)), t -> t.get(1))); + } + public IValue parseJSON(IValue type, IString src, IString dateTimeFormat, IBool lenient, IBool trackOrigins, IFunction parsers) { TypeStore store = new TypeStore(); Type start = new TypeReifier(values).valueToType((IConstructor) type, store); diff --git a/src/org/rascalmpl/library/lang/json/IO.rsc b/src/org/rascalmpl/library/lang/json/IO.rsc index 740c14f4e2a..c70df892214 100644 --- a/src/org/rascalmpl/library/lang/json/IO.rsc +++ b/src/org/rascalmpl/library/lang/json/IO.rsc @@ -14,6 +14,8 @@ module lang::json::IO +import util::Maybe; + @javaClass{org.rascalmpl.library.lang.json.IO} @deprecated{ use writeJSON @@ -45,8 +47,31 @@ In general the translation behaves as follows: * If loc is expected than strings which look like URI are parsed (containing :/) or a file:/// URI is build, or if an object is found each separate field of a location object is read from the respective properties: { scheme : str, authority: str?, path: str?, fragment: str?, query: str?, offset: int, length: int, begin: [bl, bc], end: [el, ec]} * Go to ((JSONParser)) to find out how to use the optional `parsers` parameter. +* if the parser finds a `null` JSON value, it will lookup in the `nulls` map based on the currently expected type which value to return, or throw an exception otherwise. +First the expected type is used as a literal lookup, and then each value is tested if the current type is a subtype of it. } -java &T readJSON(type[&T] expected, loc src, str dateTimeFormat = "yyyy-MM-dd\'T\'HH:mm:ssZZZZZ", bool lenient=false, bool trackOrigins=false, JSONParser[value] parser = (type[value] _, str _) { throw ""; }); +java &T readJSON( + type[&T] expected, + loc src, + str dateTimeFormat = "yyyy-MM-dd\'T\'HH:mm:ssZZZZZ", + bool lenient=false, + bool trackOrigins=false, + JSONParser[value] parser = (type[value] _, str _) { throw ""; }, + map [type[value] forType, value nullValue] nulls = defaultJSONNULLValues); + +public map[type[value] forType, value nullValue] defaultJSONNULLValues = ( + #Maybe[value] : nothing(), + #node : "null"(), + #int : -1, + #real : -1.0, + #rat :-1r1, + #value : "null"(), + #str : "", + #list[value] : [], + #set[value] : {}, + #map[value,value] : (), + #loc : |unknown:///| +); @javaClass{org.rascalmpl.library.lang.json.IO} @synopsis{parses JSON values from a string. diff --git a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java index d0bd83f90b2..a5ef6b33274 100644 --- a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java +++ b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java @@ -66,6 +66,7 @@ public class JsonValueReader { private VarHandle lineHandler; private VarHandle lineStartHandler; private IFunction parsers; + private Map nulls = Collections.emptyMap(); /** * @param vf factory which will be used to construct values @@ -98,6 +99,10 @@ public JsonValueReader(IRascalValueFactory vf, IRascalMonitor monitor, ISourceLo this(vf, new TypeStore(), monitor, src); } + public JsonValueReader setNulls(Map nulls) { + this.nulls = nulls; + return this; + } /** * Builder method to set the format to use for all date-time values encoded as strings */ @@ -140,7 +145,8 @@ public IValue visitInteger(Type type) throws IOException { case STRING: return vf.integer(in.nextString()); case NULL: - return null; + in.nextNull(); + return inferNullValue(nulls, type); default: throw new IOException("Expected integer but got " + in.peek()); } @@ -158,7 +164,8 @@ public IValue visitReal(Type type) throws IOException { case STRING: return vf.real(in.nextString()); case NULL: - return null; + in.nextNull(); + return inferNullValue(nulls, type); default: throw new IOException("Expected integer but got " + in.peek()); } @@ -168,6 +175,38 @@ public IValue visitReal(Type type) throws IOException { } } + private IValue inferNullValue(Map nulls, Type expected) { + IValue nullValue = nulls.get(expected); + + if (nullValue != null) { + return nullValue; + } + + for (Type superType : nulls.keySet()) { + if (superType.isTop() || superType.isNode()) { + continue; // those are last resorts. + } + + if (expected.isSubtypeOf(superType)) { + return nulls.get(superType); + } + } + + Type node = TypeFactory.getInstance().nodeType(); + Type value = TypeFactory.getInstance().valueType(); + + if (expected.isSubtypeOf(node) && nulls.containsKey(node)) { + return nulls.get(node); + } + + if (expected.isSubtypeOf(value) && nulls.containsKey(value)) { + return nulls.get(value); + } + + /* this will trigger an NPE somewhere */ + return null; + } + @Override public IValue visitExternal(Type type) throws IOException { throw new IOException("External type " + type + "is not implemented yet by the json reader:" + in.getPath()); @@ -176,7 +215,7 @@ public IValue visitExternal(Type type) throws IOException { @Override public IValue visitString(Type type) throws IOException { if (isNull()) { - return null; + return inferNullValue(nulls, type); } return vf.string(in.nextString()); @@ -185,7 +224,7 @@ public IValue visitString(Type type) throws IOException { @Override public IValue visitTuple(Type type) throws IOException { if (isNull()) { - return null; + return inferNullValue(nulls, type); } List l = new ArrayList<>(); @@ -334,7 +373,7 @@ public IValue visitValue(Type type) throws IOException { return vf.string(in.nextName()); case NULL: in.nextNull(); - return null; + return inferNullValue(nulls, type); default: throw new IOException("Did not expect end of Json value here, while looking for " + type + " + at " + in.getPath()); } @@ -361,7 +400,7 @@ else if (val.contains("://")) { public IValue visitRational(Type type) throws IOException { if (isNull()) { - return null; + return inferNullValue(nulls, type); } switch (in.peek()) { @@ -400,7 +439,7 @@ public IValue visitRational(Type type) throws IOException { @Override public IValue visitMap(Type type) throws IOException { if (isNull()) { - return null; + return inferNullValue(nulls, type); } IMapWriter w = vf.mapWriter(); @@ -444,7 +483,7 @@ public IValue visitAlias(Type type) throws IOException { @Override public IValue visitBool(Type type) throws IOException { if (isNull()) { - return null; + return inferNullValue(nulls, type); } return vf.bool(in.nextBoolean()); } @@ -661,7 +700,7 @@ public IValue visitDateTime(Type type) throws IOException { @Override public IValue visitList(Type type) throws IOException { if (isNull()) { - return null; + return inferNullValue(nulls, type); } IListWriter w = vf.listWriter(); @@ -677,7 +716,7 @@ public IValue visitList(Type type) throws IOException { public IValue visitSet(Type type) throws IOException { if (isNull()) { - return null; + return inferNullValue(nulls, type); } ISetWriter w = vf.setWriter(); @@ -706,4 +745,6 @@ private boolean isNull() throws IOException { return res; } + + } \ No newline at end of file From 596755a3f1038e5e7e8f626fce6b3a33735217d6 Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Wed, 26 Jun 2024 13:24:35 +0200 Subject: [PATCH 023/191] fixed default values for keyword parameters in JSON parser --- .../lang/json/internal/JsonValueReader.java | 54 +++++++------------ 1 file changed, 20 insertions(+), 34 deletions(-) diff --git a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java index a5ef6b33274..f8382b9fccd 100644 --- a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java +++ b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java @@ -176,35 +176,14 @@ public IValue visitReal(Type type) throws IOException { } private IValue inferNullValue(Map nulls, Type expected) { - IValue nullValue = nulls.get(expected); - - if (nullValue != null) { - return nullValue; - } - - for (Type superType : nulls.keySet()) { - if (superType.isTop() || superType.isNode()) { - continue; // those are last resorts. - } - - if (expected.isSubtypeOf(superType)) { - return nulls.get(superType); - } - } - - Type node = TypeFactory.getInstance().nodeType(); - Type value = TypeFactory.getInstance().valueType(); - - if (expected.isSubtypeOf(node) && nulls.containsKey(node)) { - return nulls.get(node); - } - - if (expected.isSubtypeOf(value) && nulls.containsKey(value)) { - return nulls.get(value); - } - - /* this will trigger an NPE somewhere */ - return null; + return nulls.keySet().stream() + .sorted((x,y) -> x.compareTo(y)) // smaller types are matched first + .filter(superType -> expected.isSubtypeOf(superType)) // remove any type that does not fit + .findFirst() // give the most specific match + .map(t -> nulls.get(t)) // lookup the corresponding null value + .orElse(null); // or muddle on and throw NPE elsewhere + + // The NPE triggering "elsewhere" should help with fault localization. } @Override @@ -536,6 +515,10 @@ private int getCol() { @Override public IValue visitAbstractData(Type type) throws IOException { + if (isNull()) { + return inferNullValue(nulls, type); + } + if (in.peek() == JsonToken.STRING) { var stringInput = in.nextString(); @@ -573,7 +556,7 @@ public IValue visitAbstractData(Type type) throws IOException { } } - assert in.peek() == JsonToken.BEGIN_OBJECT; + assert in.peek() == JsonToken.BEGIN_OBJECT || in.peek() == JsonToken.NULL; Set alternatives = store.lookupAlternatives(type); if (alternatives.size() > 1) { @@ -605,10 +588,13 @@ public IValue visitAbstractData(Type type) throws IOException { } } else if (cons.hasKeywordField(label, store)) { - IValue val = read(in, store.getKeywordParameterType(cons, label)); - if (val != null) { - // if the value is null we'd use the default value of the defined field in the constructor - kwParams.put(label, val); + if (!isNull()) { // lookahead for null to give default parameters the preference. + IValue val = read(in, store.getKeywordParameterType(cons, label)); + // null can still happen if the nulls map doesn't have a default + if (val != null) { + // if the value is null we'd use the default value of the defined field in the constructor + kwParams.put(label, val); + } } } else { // its a normal arg, pass its label to the child From 00a391cf580578bdb89a056f85123565aa1ab55b Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Thu, 27 Jun 2024 10:16:12 +0200 Subject: [PATCH 024/191] refactored and added explicit support for Maybe --- src/org/rascalmpl/library/lang/json/IO.java | 8 +- src/org/rascalmpl/library/lang/json/IO.rsc | 10 +- .../lang/json/internal/JsonValueReader.java | 132 +++++++++++++----- 3 files changed, 108 insertions(+), 42 deletions(-) diff --git a/src/org/rascalmpl/library/lang/json/IO.java b/src/org/rascalmpl/library/lang/json/IO.java index d4f56a375ba..cd960c9d7ab 100644 --- a/src/org/rascalmpl/library/lang/json/IO.java +++ b/src/org/rascalmpl/library/lang/json/IO.java @@ -20,12 +20,7 @@ import java.io.StringWriter; import java.nio.charset.Charset; import java.util.Map; -import java.util.Map.Entry; -import java.util.Spliterator; -import java.util.Spliterators; import java.util.stream.Collectors; -import java.util.stream.StreamSupport; - import org.rascalmpl.debug.IRascalMonitor; import org.rascalmpl.exceptions.RuntimeExceptionFactory; import org.rascalmpl.library.lang.json.internal.IValueAdapter; @@ -143,7 +138,7 @@ private Map unreify(IMap nulls) { .collect(Collectors.toMap(t -> tr.valueToType((IConstructor) t.get(0)), t -> t.get(1))); } - public IValue parseJSON(IValue type, IString src, IString dateTimeFormat, IBool lenient, IBool trackOrigins, IFunction parsers) { + public IValue parseJSON(IValue type, IString src, IString dateTimeFormat, IBool lenient, IBool trackOrigins, IFunction parsers, IMap nulls) { TypeStore store = new TypeStore(); Type start = new TypeReifier(values).valueToType((IConstructor) type, store); @@ -153,6 +148,7 @@ public IValue parseJSON(IValue type, IString src, IString dateTimeFormat, IBool return new JsonValueReader(values, store, monitor, trackOrigins.getValue() ? URIUtil.rootLocation("unknown") : null) .setCalendarFormat(dateTimeFormat.getValue()) .setParsers(parsers) + .setNulls(unreify(nulls)) .read(in, start); } catch (IOException e) { diff --git a/src/org/rascalmpl/library/lang/json/IO.rsc b/src/org/rascalmpl/library/lang/json/IO.rsc index c70df892214..e642ef7231a 100644 --- a/src/org/rascalmpl/library/lang/json/IO.rsc +++ b/src/org/rascalmpl/library/lang/json/IO.rsc @@ -76,7 +76,15 @@ public map[type[value] forType, value nullValue] defaultJSONNULLValues = ( @javaClass{org.rascalmpl.library.lang.json.IO} @synopsis{parses JSON values from a string. In general the translation behaves as the same as for ((readJSON)).} -java &T parseJSON(type[&T] expected, str src, str dateTimeFormat = "yyyy-MM-dd\'T\'HH:mm:ssZZZZZ", bool lenient=false, bool trackOrigins=false, JSONParser[value] parser = (type[value] _, str _) { throw ""; }); +java &T parseJSON( + type[&T] expected, + str src, + str dateTimeFormat = "yyyy-MM-dd\'T\'HH:mm:ssZZZZZ", + bool lenient=false, + bool trackOrigins=false, + JSONParser[value] parser = (type[value] _, str _) { throw ""; }, + map[type[value] forType, value nullValue] null = defaultJSONNULLValues +); @javaClass{org.rascalmpl.library.lang.json.IO} @synopsis{writes `val` to the location `target`} diff --git a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java index f8382b9fccd..1d300675c64 100644 --- a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java +++ b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java @@ -67,6 +67,11 @@ public class JsonValueReader { private VarHandle lineStartHandler; private IFunction parsers; private Map nulls = Collections.emptyMap(); + private final Type ParameterT = TF.parameterType("A"); + private final Type Maybe; + private final Type Maybe_nothing; + private final Type Maybe_just; + /** * @param vf factory which will be used to construct values @@ -77,6 +82,12 @@ public JsonValueReader(IRascalValueFactory vf, TypeStore store, IRascalMonitor m this.store = store; this.monitor = monitor; this.src = src; + + // WARNING: this clones the definitions of util::Maybe until we can reuse compiler-generated code + this.Maybe = TF.abstractDataType(store, "Maybe", ParameterT); + this.Maybe_nothing = TF.constructor(store, Maybe, "nothing"); + this.Maybe_just = TF.constructor(store, Maybe, "just", ParameterT, "val"); + setCalendarFormat("yyyy-MM-dd'T'HH:mm:ssZ"); if (src != null) { @@ -94,6 +105,14 @@ public JsonValueReader(IRascalValueFactory vf, TypeStore store, IRascalMonitor m } } } + + private IConstructor justCons(IValue val) { + return vf.constructor(Maybe_just, val); + } + + private final IConstructor nothingCons() { + return vf.constructor(Maybe_nothing); + } public JsonValueReader(IRascalValueFactory vf, IRascalMonitor monitor, ISourceLocation src) { this(vf, new TypeStore(), monitor, src); @@ -512,52 +531,71 @@ private int getCol() { } } - - @Override - public IValue visitAbstractData(Type type) throws IOException { - if (isNull()) { - return inferNullValue(nulls, type); + /** + * Expecting an ADT we found NULL on the lookahead. + * This is either a Maybe or we can use the map + * of null values. + */ + private IValue visitNullAsAbstractData(Type type) { + if (type.isSubtypeOf(Maybe)) { + return nothingCons(); } - if (in.peek() == JsonToken.STRING) { - var stringInput = in.nextString(); + return inferNullValue(nulls, type); + } - // might be a parsable string. let's see. - if (parsers != null) { - var reified = new org.rascalmpl.types.TypeReifier(vf).typeToValue(type, new TypeStore(), vf.map()); - - try { - return parsers.call(Collections.emptyMap(), reified, vf.string(stringInput)); - } - catch (Throw t) { - Type excType = t.getException().getType(); + /** + * Expecting an ADT we found a string value instead. + * Now we can (try to) apply the parsers that were passed in. + * If that does not fly, we can interpret strings as nullary ADT + * constructors. + */ + private IValue visitStringAsAbstractData(Type type) throws IOException { + var stringInput = in.nextString(); + + // might be a parsable string. let's see. + if (parsers != null) { + var reified = new org.rascalmpl.types.TypeReifier(vf).typeToValue(type, new TypeStore(), vf.map()); + + try { + return parsers.call(Collections.emptyMap(), reified, vf.string(stringInput)); + } + catch (Throw t) { + Type excType = t.getException().getType(); - if (excType.isAbstractData() && ((IConstructor) t.getException()).getConstructorType().getName().equals("ParseError")) { - throw new IOException(t); // an actual parse error is meaningful to report - } - // otherwise we fall through to enum recognition + if (excType.isAbstractData() && ((IConstructor) t.getException()).getConstructorType().getName().equals("ParseError")) { + throw new IOException(t); // an actual parse error is meaningful to report } + // otherwise we fall through to enum recognition } + } - // enum! - Set enumCons = store.lookupConstructor(type, stringInput); + // enum! + Set enumCons = store.lookupConstructor(type, stringInput); - for (Type candidate : enumCons) { - if (candidate.getArity() == 0) { - return vf.constructor(candidate); - } - } - - if (parsers != null) { - throw new IOException("parser failed to recognize \"" + stringInput + "\" and no nullary constructor found for " + type + "either"); - } - else { - throw new IOException("no nullary constructor found for " + type); + for (Type candidate : enumCons) { + if (candidate.getArity() == 0) { + return vf.constructor(candidate); } } + + if (parsers != null) { + throw new IOException("parser failed to recognize \"" + stringInput + "\" and no nullary constructor found for " + type + "either"); + } + else { + throw new IOException("no nullary constructor found for " + type + ", that matches " + stringInput); + } + } - assert in.peek() == JsonToken.BEGIN_OBJECT || in.peek() == JsonToken.NULL; - + /** + * This is the main workhorse. Every object is mapped one-to-one to an ADT constructor + * instance. The field names (keyword parameters and positional) are mapped to field + * names of the object. The name of the constructor is _not_ consequential. + * @param type + * @return + * @throws IOException + */ + private IValue visitObjectAsAbstractData(Type type) throws IOException { Set alternatives = store.lookupAlternatives(type); if (alternatives.size() > 1) { monitor.warning("selecting arbitrary constructor for " + type, vf.sourceLocation(in.getPath())); @@ -620,6 +658,30 @@ else if (cons.hasKeywordField(label, store)) { return vf.constructor(cons, args, kwParams); } + + @Override + public IValue visitAbstractData(Type type) throws IOException { + if (type.isSubtypeOf(Maybe)) { + if (in.peek() == JsonToken.NULL) { + return nothingCons(); + } + else { + // dive into the wrapped type, and wrap the result. Could be a str, int, or anything. + return justCons(type.getTypeParameters().getFieldType(0).accept(this)); + } + } + + switch (in.peek()) { + case NULL: + return visitNullAsAbstractData(type); + case STRING: + return visitStringAsAbstractData(type); + case BEGIN_OBJECT: + return visitObjectAsAbstractData(type); + default: + throw new IOException("Expected ADT:" + type + ", but found " + in.peek().toString()); + } + } @Override public IValue visitConstructor(Type type) throws IOException { From 0a6cf52d509f5c251882cfa9af7c00464f96e4b8 Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Thu, 27 Jun 2024 10:26:22 +0200 Subject: [PATCH 025/191] factored out UtilMaybe for future maintainability --- .../lang/json/internal/JsonValueReader.java | 28 ++--------- src/org/rascalmpl/values/maybe/UtilMaybe.java | 46 +++++++++++++++++++ 2 files changed, 50 insertions(+), 24 deletions(-) create mode 100644 src/org/rascalmpl/values/maybe/UtilMaybe.java diff --git a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java index 1d300675c64..5f1eda57493 100644 --- a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java +++ b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java @@ -33,6 +33,7 @@ import org.rascalmpl.uri.URIUtil; import org.rascalmpl.values.IRascalValueFactory; import org.rascalmpl.values.functions.IFunction; +import org.rascalmpl.values.maybe.UtilMaybe; import io.usethesource.vallang.IConstructor; import io.usethesource.vallang.IInteger; @@ -67,10 +68,6 @@ public class JsonValueReader { private VarHandle lineStartHandler; private IFunction parsers; private Map nulls = Collections.emptyMap(); - private final Type ParameterT = TF.parameterType("A"); - private final Type Maybe; - private final Type Maybe_nothing; - private final Type Maybe_just; /** @@ -83,11 +80,6 @@ public JsonValueReader(IRascalValueFactory vf, TypeStore store, IRascalMonitor m this.monitor = monitor; this.src = src; - // WARNING: this clones the definitions of util::Maybe until we can reuse compiler-generated code - this.Maybe = TF.abstractDataType(store, "Maybe", ParameterT); - this.Maybe_nothing = TF.constructor(store, Maybe, "nothing"); - this.Maybe_just = TF.constructor(store, Maybe, "just", ParameterT, "val"); - setCalendarFormat("yyyy-MM-dd'T'HH:mm:ssZ"); if (src != null) { @@ -105,14 +97,6 @@ public JsonValueReader(IRascalValueFactory vf, TypeStore store, IRascalMonitor m } } } - - private IConstructor justCons(IValue val) { - return vf.constructor(Maybe_just, val); - } - - private final IConstructor nothingCons() { - return vf.constructor(Maybe_nothing); - } public JsonValueReader(IRascalValueFactory vf, IRascalMonitor monitor, ISourceLocation src) { this(vf, new TypeStore(), monitor, src); @@ -537,10 +521,6 @@ private int getCol() { * of null values. */ private IValue visitNullAsAbstractData(Type type) { - if (type.isSubtypeOf(Maybe)) { - return nothingCons(); - } - return inferNullValue(nulls, type); } @@ -661,13 +641,13 @@ else if (cons.hasKeywordField(label, store)) { @Override public IValue visitAbstractData(Type type) throws IOException { - if (type.isSubtypeOf(Maybe)) { + if (UtilMaybe.isMaybe(type)) { if (in.peek() == JsonToken.NULL) { - return nothingCons(); + return UtilMaybe.nothing(); } else { // dive into the wrapped type, and wrap the result. Could be a str, int, or anything. - return justCons(type.getTypeParameters().getFieldType(0).accept(this)); + return UtilMaybe.just(type.getTypeParameters().getFieldType(0).accept(this)); } } diff --git a/src/org/rascalmpl/values/maybe/UtilMaybe.java b/src/org/rascalmpl/values/maybe/UtilMaybe.java new file mode 100644 index 00000000000..d44b26f4937 --- /dev/null +++ b/src/org/rascalmpl/values/maybe/UtilMaybe.java @@ -0,0 +1,46 @@ +package org.rascalmpl.values.maybe; + +import org.rascalmpl.values.IRascalValueFactory; + +import io.usethesource.vallang.IConstructor; +import io.usethesource.vallang.IValue; +import io.usethesource.vallang.type.Type; +import io.usethesource.vallang.type.TypeFactory; +import io.usethesource.vallang.type.TypeStore; + +/** + * Static factory for Maybe[&A] instances. + * WARNING: this clones the definitions of util::Maybe until we can reuse compiler-generated code + */ +public class UtilMaybe { + private static final TypeStore store = new TypeStore(); + private static final TypeFactory TF = TypeFactory.getInstance(); + private static final Type ParameterT = TF.parameterType("A"); + public static final Type Maybe; + private static final Type Maybe_nothing; + private static final Type Maybe_just; + + static { + Maybe = TF.abstractDataType(store, "Maybe", ParameterT); + Maybe_nothing = TF.constructor(store, Maybe, "nothing"); + Maybe_just = TF.constructor(store, Maybe, "just", ParameterT, "val"); + } + + public static boolean isMaybe(Type t) { + return t.isSubtypeOf(Maybe); + } + + /** + * create `just(val)` of type `Maybe[typeOf(val)]` + */ + public static IConstructor just(IValue val) { + return IRascalValueFactory.getInstance().constructor(Maybe_just, val); + } + + /** + * Create `nothing()` of type `Maybe[void]` + */ + public static IConstructor nothing() { + return IRascalValueFactory.getInstance().constructor(Maybe_nothing); + } +} From 73086f27a98668c80180e38855143b6744744eff Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Thu, 27 Jun 2024 10:36:31 +0200 Subject: [PATCH 026/191] fixed bug --- src/org/rascalmpl/library/lang/json/IO.rsc | 2 +- .../rascalmpl/library/lang/json/internal/JsonValueReader.java | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/org/rascalmpl/library/lang/json/IO.rsc b/src/org/rascalmpl/library/lang/json/IO.rsc index e642ef7231a..eef9a6c1027 100644 --- a/src/org/rascalmpl/library/lang/json/IO.rsc +++ b/src/org/rascalmpl/library/lang/json/IO.rsc @@ -83,7 +83,7 @@ java &T parseJSON( bool lenient=false, bool trackOrigins=false, JSONParser[value] parser = (type[value] _, str _) { throw ""; }, - map[type[value] forType, value nullValue] null = defaultJSONNULLValues + map[type[value] forType, value nullValue] nulls = defaultJSONNULLValues ); @javaClass{org.rascalmpl.library.lang.json.IO} diff --git a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java index 5f1eda57493..c3c38087959 100644 --- a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java +++ b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java @@ -643,6 +643,7 @@ else if (cons.hasKeywordField(label, store)) { public IValue visitAbstractData(Type type) throws IOException { if (UtilMaybe.isMaybe(type)) { if (in.peek() == JsonToken.NULL) { + in.nextNull(); return UtilMaybe.nothing(); } else { From cdab1db283b0f9e30de3a374256c4d8af962ae22 Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Thu, 27 Jun 2024 10:49:44 +0200 Subject: [PATCH 027/191] more checking on the provided null values --- .../lang/json/internal/JsonValueReader.java | 5 ++++ .../tests/library/lang/json/JSONIOTests.rsc | 26 +++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java index c3c38087959..0794ede2e62 100644 --- a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java +++ b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java @@ -184,6 +184,7 @@ private IValue inferNullValue(Map nulls, Type expected) { .filter(superType -> expected.isSubtypeOf(superType)) // remove any type that does not fit .findFirst() // give the most specific match .map(t -> nulls.get(t)) // lookup the corresponding null value + .filter(r -> r.getType().isSubtypeOf(expected)) // the value in the table still has to fit the currently expected type .orElse(null); // or muddle on and throw NPE elsewhere // The NPE triggering "elsewhere" should help with fault localization. @@ -671,6 +672,10 @@ public IValue visitConstructor(Type type) throws IOException { @Override public IValue visitNode(Type type) throws IOException { + if (isNull()) { + return inferNullValue(nulls, type); + } + in.beginObject(); int startPos = getPos(); int startLine = getLine(); diff --git a/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc b/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc index ef8e837ee0f..21e5c9acc61 100644 --- a/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc +++ b/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc @@ -3,6 +3,7 @@ module lang::rascal::tests::library::lang::json::JSONIOTests import String; import lang::json::IO; import util::UUID; +import util::Maybe; import IO; loc targetFile = |memory://test-tmp/test-<"">.json|; @@ -69,4 +70,29 @@ test bool originTracking() { } return true; +} + +data Cons = cons(str bla = "null"); + +test bool dealWithNull() { + // use the default nulls map + assert parseJSON(#map[str,value], "{\"bla\": null}") == ("bla":"null"()); + + // using our own nulls map + assert parseJSON(#map[str,value], "{\"bla\": null}", nulls=(#value:-1)) == ("bla":-1); + + // conflicting entries in the nulls maps: more specific goes first: + assert parseJSON(#map[str,node], "{\"bla\": null}", nulls=(#value:-1, #node:"null"())) == ("bla":"null"()); + + // the builtin Maybe interpreter with null + assert parseJSON(#map[str,Maybe[str]], "{\"bla\": null}") == ("bla":nothing()); + + // the builtin Maybe interpreter with non-null + assert parseJSON(#map[str,Maybe[str]], "{\"bla\": \"foo\"}") == ("bla":just("foo")); + + // keyword parameters and null + assert parseJSON(#Cons, "{\"bla\": \"foo\"}") == cons(bla="foo"); + assert parseJSON(#Cons, "{\"bla\": null}") == cons(); + + return true; } \ No newline at end of file From 7cff3fdeb6a24f52d367a60fbdfa4d8667dd5e29 Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Thu, 27 Jun 2024 10:56:20 +0200 Subject: [PATCH 028/191] writer can deal with Maybe too --- .../library/lang/json/internal/JsonValueWriter.java | 10 ++++++++++ src/org/rascalmpl/values/maybe/UtilMaybe.java | 8 ++++++++ 2 files changed, 18 insertions(+) diff --git a/src/org/rascalmpl/library/lang/json/internal/JsonValueWriter.java b/src/org/rascalmpl/library/lang/json/internal/JsonValueWriter.java index d72bf3790ed..72d7886a88d 100644 --- a/src/org/rascalmpl/library/lang/json/internal/JsonValueWriter.java +++ b/src/org/rascalmpl/library/lang/json/internal/JsonValueWriter.java @@ -19,6 +19,7 @@ import org.rascalmpl.exceptions.Throw; import org.rascalmpl.values.functions.IFunction; +import org.rascalmpl.values.maybe.UtilMaybe; import com.google.gson.stream.JsonWriter; @@ -236,6 +237,15 @@ public Void visitNode(INode o) throws IOException { @Override public Void visitConstructor(IConstructor o) throws IOException { + if (UtilMaybe.isMaybe(o.getType())) { + if (UtilMaybe.isNothing(o)) { + out.nullValue(); + } + else { + o.get(0).accept(this); + } + } + if (formatters != null) { try { var formatted = formatters.call(o); diff --git a/src/org/rascalmpl/values/maybe/UtilMaybe.java b/src/org/rascalmpl/values/maybe/UtilMaybe.java index d44b26f4937..4dc79c7604a 100644 --- a/src/org/rascalmpl/values/maybe/UtilMaybe.java +++ b/src/org/rascalmpl/values/maybe/UtilMaybe.java @@ -30,6 +30,14 @@ public static boolean isMaybe(Type t) { return t.isSubtypeOf(Maybe); } + public static boolean isNothing(IConstructor v) { + return v.getConstructorType().getName().equals("nothing"); + } + + public static boolean isJust(IConstructor v) { + return !isNothing(v); + } + /** * create `just(val)` of type `Maybe[typeOf(val)]` */ From 9768cb83d109bb5d34f364294962eb5b188a30ac Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Thu, 27 Jun 2024 11:54:33 +0200 Subject: [PATCH 029/191] radically improved error reporting of JSON parser --- .../exceptions/RuntimeExceptionFactory.java | 7 + src/org/rascalmpl/library/lang/json/IO.java | 2 +- src/org/rascalmpl/library/lang/json/IO.rsc | 8 + .../lang/json/internal/JsonValueReader.java | 1264 +++++++++-------- 4 files changed, 660 insertions(+), 621 deletions(-) diff --git a/src/org/rascalmpl/exceptions/RuntimeExceptionFactory.java b/src/org/rascalmpl/exceptions/RuntimeExceptionFactory.java index 50c37b54b61..2e54b541f5d 100644 --- a/src/org/rascalmpl/exceptions/RuntimeExceptionFactory.java +++ b/src/org/rascalmpl/exceptions/RuntimeExceptionFactory.java @@ -649,6 +649,13 @@ public static Throw noSuchKey(IValue v, AbstractAST ast, StackTrace trace) { public static Throw parseError(ISourceLocation loc) { return new Throw(VF.constructor(ParseError, loc)); } + + public static Throw jsonParseError(ISourceLocation loc, String cause, String path) { + return new Throw(VF.constructor(ParseError, loc) + .asWithKeywordParameters().setParameter("reason", VF.string(cause)) + .asWithKeywordParameters().setParameter("path", VF.string(path))); + } + public static Throw parseError(ISourceLocation loc, AbstractAST ast, StackTrace trace) { return new Throw(VF.constructor(ParseError, loc), ast != null ? ast.getLocation() : null, trace); diff --git a/src/org/rascalmpl/library/lang/json/IO.java b/src/org/rascalmpl/library/lang/json/IO.java index cd960c9d7ab..cc8c4929888 100644 --- a/src/org/rascalmpl/library/lang/json/IO.java +++ b/src/org/rascalmpl/library/lang/json/IO.java @@ -119,7 +119,7 @@ public IValue readJSON(IValue type, ISourceLocation loc, IString dateTimeFormat, return new JsonValueReader(values, store, monitor, trackOrigins.getValue() ? loc : null) .setCalendarFormat(dateTimeFormat.getValue()) .setParsers(parsers) - .setNulls(unreify(null)) + .setNulls(unreify(nulls)) .read(in, start); } catch (IOException e) { diff --git a/src/org/rascalmpl/library/lang/json/IO.rsc b/src/org/rascalmpl/library/lang/json/IO.rsc index eef9a6c1027..ac97e2762e6 100644 --- a/src/org/rascalmpl/library/lang/json/IO.rsc +++ b/src/org/rascalmpl/library/lang/json/IO.rsc @@ -16,6 +16,14 @@ module lang::json::IO import util::Maybe; +@synopsis{JSON parse errors have more information than general parse errors} +@description{ +* `location` is the place where the parsing got stuck (going from left to right). +* `cause` is a factual diagnosis of what was expected at that position, versus what was found. +* `path` is a path query string into the JSON value from the root down to the leaf where the error was detected. +} +data RuntimeException = ParseError(loc location, str cause="", str path=""); + @javaClass{org.rascalmpl.library.lang.json.IO} @deprecated{ use writeJSON diff --git a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java index 0794ede2e62..65e6c0e3c85 100644 --- a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java +++ b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java @@ -12,6 +12,7 @@ */ package org.rascalmpl.library.lang.json.internal; +import java.io.EOFException; import java.io.IOException; import java.io.StringReader; import java.lang.invoke.MethodHandles; @@ -27,7 +28,9 @@ import java.util.Map; import java.util.Set; +import org.apache.commons.lang.ObjectUtils.Null; import org.rascalmpl.debug.IRascalMonitor; +import org.rascalmpl.exceptions.RuntimeExceptionFactory; import org.rascalmpl.exceptions.Throw; import org.rascalmpl.types.ReifiedType; import org.rascalmpl.uri.URIUtil; @@ -48,8 +51,11 @@ import io.usethesource.vallang.type.TypeFactory; import io.usethesource.vallang.type.TypeStore; +import com.google.gson.JsonParseException; +import com.google.gson.JsonSyntaxException; import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonToken; +import com.google.gson.stream.MalformedJsonException; /** * This class streams a JSON stream directly to an IValue representation and validates the content @@ -57,728 +63,746 @@ */ public class JsonValueReader { - private static final TypeFactory TF = TypeFactory.getInstance(); - private final TypeStore store; - private final IRascalValueFactory vf; - private ThreadLocal format; - private final IRascalMonitor monitor; - private ISourceLocation src; - private VarHandle posHandler; - private VarHandle lineHandler; - private VarHandle lineStartHandler; - private IFunction parsers; - private Map nulls = Collections.emptyMap(); - - - /** - * @param vf factory which will be used to construct values - * @param store type store to lookup constructors of abstract data-types in and the types of keyword fields - */ - public JsonValueReader(IRascalValueFactory vf, TypeStore store, IRascalMonitor monitor, ISourceLocation src) { - this.vf = vf; - this.store = store; - this.monitor = monitor; - this.src = src; + private final class ExpectedTypeDispatcher implements ITypeVisitor { + private final JsonReader in; - setCalendarFormat("yyyy-MM-dd'T'HH:mm:ssZ"); + private ExpectedTypeDispatcher(JsonReader in) { + this.in = in; + } - if (src != null) { + @Override + public IValue visitInteger(Type type) throws IOException { try { - var lookup = MethodHandles.lookup(); - var privateLookup = MethodHandles.privateLookupIn(JsonReader.class, lookup); - this.posHandler = privateLookup.findVarHandle(JsonReader.class, "pos", int.class); - this.lineHandler = privateLookup.findVarHandle(JsonReader.class, "lineNumber", int.class); - this.lineStartHandler = privateLookup.findVarHandle(JsonReader.class, "lineStart", int.class); - } - catch (NoSuchFieldException | SecurityException | IllegalAccessException e) { - // we disable the origin tracking if we can not get to the fields - src = null; - monitor.warning("Unable to retrieve origin information due to: " + e.getMessage(), src); + switch (in.peek()) { + case NUMBER: + return vf.integer(in.nextLong()); + case STRING: + return vf.integer(in.nextString()); + case NULL: + in.nextNull(); + return inferNullValue(nulls, type); + default: + throw parseErrorHere("Expected integer but got " + in.peek()); + } + } + catch (NumberFormatException e) { + throw parseErrorHere("Expected integer but got " + e.getMessage()); } } - } - - public JsonValueReader(IRascalValueFactory vf, IRascalMonitor monitor, ISourceLocation src) { - this(vf, new TypeStore(), monitor, src); - } - - public JsonValueReader setNulls(Map nulls) { - this.nulls = nulls; - return this; - } - /** - * Builder method to set the format to use for all date-time values encoded as strings - */ - public JsonValueReader setCalendarFormat(String format) { - // SimpleDateFormat is not thread safe, so here we make sure - // we can use objects of this reader in different threads at the same time - this.format = new ThreadLocal() { - protected SimpleDateFormat initialValue() { - return new SimpleDateFormat(format); + + public IValue visitReal(Type type) throws IOException { + try { + switch (in.peek()) { + case NUMBER: + return vf.real(in.nextDouble()); + case STRING: + return vf.real(in.nextString()); + case NULL: + in.nextNull(); + return inferNullValue(nulls, type); + default: + throw parseErrorHere("Expected integer but got " + in.peek()); + } } - }; - return this; - } + catch (NumberFormatException e) { + throw parseErrorHere("Expected integer but got " + e.getMessage()); + } + } - public JsonValueReader setParsers(IFunction parsers) { - if (parsers.getType() instanceof ReifiedType && parsers.getType().getTypeParameters().getFieldType(0).isTop()) { - // ignore the default parser - parsers = null; + private IValue inferNullValue(Map nulls, Type expected) { + return nulls.keySet().stream() + .sorted((x,y) -> x.compareTo(y)) // smaller types are matched first + .filter(superType -> expected.isSubtypeOf(superType)) // remove any type that does not fit + .findFirst() // give the most specific match + .map(t -> nulls.get(t)) // lookup the corresponding null value + .filter(r -> r.getType().isSubtypeOf(expected)) // the value in the table still has to fit the currently expected type + .orElse(null); // or muddle on and throw NPE elsewhere + + // The NPE triggering "elsewhere" should help with fault localization. } - this.parsers = parsers; - return this; - } + @Override + public IValue visitExternal(Type type) throws IOException { + throw parseErrorHere("External type " + type + "is not implemented yet by the json reader:" + in.getPath()); + } - /** - * Read and validate a Json stream as an IValue - * @param in json stream - * @param expected type to validate against (recursively) - * @return an IValue of the expected type - * @throws IOException when either a parse error or a validation error occurs - */ - public IValue read(JsonReader in, Type expected) throws IOException { - IValue res = expected.accept(new ITypeVisitor() { - @Override - public IValue visitInteger(Type type) throws IOException { - try { - switch (in.peek()) { - case NUMBER: - return vf.integer(in.nextLong()); - case STRING: - return vf.integer(in.nextString()); - case NULL: - in.nextNull(); - return inferNullValue(nulls, type); - default: - throw new IOException("Expected integer but got " + in.peek()); - } - } - catch (NumberFormatException e) { - throw new IOException("Expected integer but got " + e.getMessage()); - } + @Override + public IValue visitString(Type type) throws IOException { + if (isNull()) { + return inferNullValue(nulls, type); } - public IValue visitReal(Type type) throws IOException { - try { - switch (in.peek()) { - case NUMBER: - return vf.real(in.nextDouble()); - case STRING: - return vf.real(in.nextString()); - case NULL: - in.nextNull(); - return inferNullValue(nulls, type); - default: - throw new IOException("Expected integer but got " + in.peek()); - } + return vf.string(in.nextString()); + } + + @Override + public IValue visitTuple(Type type) throws IOException { + if (isNull()) { + return inferNullValue(nulls, type); + } + + List l = new ArrayList<>(); + in.beginArray(); + + if (type.hasFieldNames()) { + for (int i = 0; i < type.getArity(); i++) { + l.add(read(in, type.getFieldType(i))); } - catch (NumberFormatException e) { - throw new IOException("Expected integer but got " + e.getMessage()); + } + else { + for (int i = 0; i < type.getArity(); i++) { + l.add(read(in, type.getFieldType(i))); } } - - private IValue inferNullValue(Map nulls, Type expected) { - return nulls.keySet().stream() - .sorted((x,y) -> x.compareTo(y)) // smaller types are matched first - .filter(superType -> expected.isSubtypeOf(superType)) // remove any type that does not fit - .findFirst() // give the most specific match - .map(t -> nulls.get(t)) // lookup the corresponding null value - .filter(r -> r.getType().isSubtypeOf(expected)) // the value in the table still has to fit the currently expected type - .orElse(null); // or muddle on and throw NPE elsewhere - // The NPE triggering "elsewhere" should help with fault localization. - } + in.endArray(); + return vf.tuple(l.toArray(new IValue[l.size()])); + } + + @Override + public IValue visitVoid(Type type) throws IOException { + throw parseErrorHere("Can not read json values of type void: " + in.getPath()); + } - @Override - public IValue visitExternal(Type type) throws IOException { - throw new IOException("External type " + type + "is not implemented yet by the json reader:" + in.getPath()); + @Override + public IValue visitFunction(Type type) throws IOException { + throw parseErrorHere("Can not read json values of function types: " + in.getPath()); + } + + @Override + public IValue visitSourceLocation(Type type) throws IOException { + switch (in.peek()) { + case STRING: + return sourceLocationString(); + case BEGIN_OBJECT: + return sourceLocationObject(); + default: + throw parseErrorHere("Could not find string or source location object here: " + in.getPath()); } + } + + private IValue sourceLocationObject() throws IOException { + String scheme = null; + String authority = null; + String path = null; + String fragment = ""; + String query = ""; + int offset = -1; + int length = -1; + int beginLine = -1; + int endLine = -1; + int beginColumn = -1; + int endColumn = -1; - @Override - public IValue visitString(Type type) throws IOException { - if (isNull()) { - return inferNullValue(nulls, type); - } - - return vf.string(in.nextString()); + in.beginObject(); + + while (in.hasNext()) { + String name = in.nextName(); + switch (name) { + case "scheme": + scheme = in.nextString(); + break; + case "authority": + authority = in.nextString(); + break; + case "path": + path = in.nextString(); + break; + case "fragment": + fragment = in.nextString(); + break; + case "query": + query = in.nextString(); + break; + case "offset": + offset = in.nextInt(); + break; + case "length": + length = in.nextInt(); + break; + case "start": + case "begin": + in.beginArray(); + beginLine = in.nextInt(); + beginColumn = in.nextInt(); + in.endArray(); + break; + case "end": + in.beginArray(); + endLine = in.nextInt(); + endColumn = in.nextInt(); + in.endArray(); + break; + default: + throw parseErrorHere("unexpected property name " + name + " :" + in.getPath()); + } } - @Override - public IValue visitTuple(Type type) throws IOException { - if (isNull()) { - return inferNullValue(nulls, type); + in.endObject(); + try { + ISourceLocation root; + if (scheme != null && authority != null && query != null && fragment != null) { + root = vf.sourceLocation(scheme, authority, path, query, fragment); } - - List l = new ArrayList<>(); - in.beginArray(); - - if (type.hasFieldNames()) { - for (int i = 0; i < type.getArity(); i++) { - l.add(read(in, type.getFieldType(i))); - } + else if (scheme != null) { + root = vf.sourceLocation(scheme, authority == null ? "" : authority, path); + } + else if (path != null) { + root = URIUtil.createFileLocation(path); } else { - for (int i = 0; i < type.getArity(); i++) { - l.add(read(in, type.getFieldType(i))); - } + throw parseErrorHere("Could not parse complete source location: " + in.getPath()); } - - in.endArray(); - return vf.tuple(l.toArray(new IValue[l.size()])); - } - - @Override - public IValue visitVoid(Type type) throws IOException { - throw new IOException("Can not read json values of type void: " + in.getPath()); + if (offset != -1 && length != -1 && beginLine != -1 && endLine != -1 && beginColumn != -1 && endColumn != -1) { + return vf.sourceLocation(root, offset, length, beginLine, endLine, beginColumn, endColumn); + } + if (offset != -1 && length != -1) { + return vf.sourceLocation(root, offset, length); + } + return root; + } catch (URISyntaxException e) { + throw parseErrorHere(e.getMessage()); } + } - @Override - public IValue visitFunction(Type type) throws IOException { - throw new IOException("Can not read json values of function types: " + in.getPath()); + @Override + public IValue visitValue(Type type) throws IOException { + switch (in.peek()) { + case NUMBER: + try { + return vf.integer(in.nextLong()); + } catch (NumberFormatException e) { + return vf.real(in.nextDouble()); + } + case STRING: + return visitString(TF.stringType()); + case BEGIN_ARRAY: + return visitList(TF.listType(TF.valueType())); + case BEGIN_OBJECT: + return visitNode(TF.nodeType()); + case BOOLEAN: + return visitBool(TF.nodeType()); + case NAME: + // this would be weird though + return vf.string(in.nextName()); + case NULL: + in.nextNull(); + return inferNullValue(nulls, type); + default: + throw parseErrorHere("Did not expect end of Json value here, while looking for " + type + " + at " + in.getPath()); } - - @Override - public IValue visitSourceLocation(Type type) throws IOException { - switch (in.peek()) { - case STRING: - return sourceLocationString(); - case BEGIN_OBJECT: - return sourceLocationObject(); - default: - throw new IOException("Could not find string or source location object here: " + in.getPath()); - } - } - - private IValue sourceLocationObject() throws IOException { - String scheme = null; - String authority = null; - String path = null; - String fragment = ""; - String query = ""; - int offset = -1; - int length = -1; - int beginLine = -1; - int endLine = -1; - int beginColumn = -1; - int endColumn = -1; - - in.beginObject(); - - while (in.hasNext()) { - String name = in.nextName(); - switch (name) { - case "scheme": - scheme = in.nextString(); - break; - case "authority": - authority = in.nextString(); - break; - case "path": - path = in.nextString(); - break; - case "fragment": - fragment = in.nextString(); - break; - case "query": - query = in.nextString(); - break; - case "offset": - offset = in.nextInt(); - break; - case "length": - length = in.nextInt(); - break; - case "start": - case "begin": - in.beginArray(); - beginLine = in.nextInt(); - beginColumn = in.nextInt(); - in.endArray(); - break; - case "end": - in.beginArray(); - endLine = in.nextInt(); - endColumn = in.nextInt(); - in.endArray(); - break; - default: - throw new IOException("unexpected property name " + name + " :" + in.getPath()); - } - } - - in.endObject(); + } + + private IValue sourceLocationString() throws IOException { try { - ISourceLocation root; - if (scheme != null && authority != null && query != null && fragment != null) { - root = vf.sourceLocation(scheme, authority, path, query, fragment); - } - else if (scheme != null) { - root = vf.sourceLocation(scheme, authority == null ? "" : authority, path); + String val = in.nextString().trim(); + + if (val.startsWith("|") && (val.endsWith("|") || val.endsWith(")"))) { + return new StandardTextReader().read(vf, new StringReader(val)); } - else if (path != null) { - root = URIUtil.createFileLocation(path); + else if (val.contains("://")) { + return vf.sourceLocation(URIUtil.createFromEncoded(val)); } else { - throw new IOException("Could not parse complete source location: " + in.getPath()); - } - if (offset != -1 && length != -1 && beginLine != -1 && endLine != -1 && beginColumn != -1 && endColumn != -1) { - return vf.sourceLocation(root, offset, length, beginLine, endLine, beginColumn, endColumn); + // will be simple interpreted as an absolute file name + return URIUtil.createFileLocation(val); } - if (offset != -1 && length != -1) { - return vf.sourceLocation(root, offset, length); - } - return root; - } catch (URISyntaxException e) { - throw new IOException(e); - } - } - - @Override - public IValue visitValue(Type type) throws IOException { - switch (in.peek()) { - case NUMBER: - try { - return vf.integer(in.nextLong()); - } catch (NumberFormatException e) { - return vf.real(in.nextDouble()); - } - case STRING: - return visitString(TF.stringType()); - case BEGIN_ARRAY: - return visitList(TF.listType(TF.valueType())); - case BEGIN_OBJECT: - return visitNode(TF.nodeType()); - case BOOLEAN: - return visitBool(TF.nodeType()); - case NAME: - // this would be weird though - return vf.string(in.nextName()); - case NULL: - in.nextNull(); - return inferNullValue(nulls, type); - default: - throw new IOException("Did not expect end of Json value here, while looking for " + type + " + at " + in.getPath()); + } + catch (URISyntaxException e) { + throw parseErrorHere(e.getMessage()); } + } + + public IValue visitRational(Type type) throws IOException { + if (isNull()) { + return inferNullValue(nulls, type); } - private IValue sourceLocationString() throws IOException { - try { - String val = in.nextString().trim(); - - if (val.startsWith("|") && (val.endsWith("|") || val.endsWith(")"))) { - return new StandardTextReader().read(vf, new StringReader(val)); + switch (in.peek()) { + case BEGIN_OBJECT: + in.beginObject(); + IInteger nomO = null, denomO = null; + while (in.hasNext()) { + switch (in.nextName()) { + case "nominator": + nomO = (IInteger) read(in, TF.integerType()); + case "denominator": + denomO = (IInteger) read(in, TF.integerType()); } - else if (val.contains("://")) { - return vf.sourceLocation(URIUtil.createFromEncoded(val)); - } - else { - // will be simple interpreted as an absolute file name - return URIUtil.createFileLocation(val); - } - } catch (URISyntaxException e) { - throw new IOException("could not parse URI:" + in.getPath() + " due to " + e.getMessage(), e); } - } - - public IValue visitRational(Type type) throws IOException { - if (isNull()) { - return inferNullValue(nulls, type); - } - - switch (in.peek()) { - case BEGIN_OBJECT: - in.beginObject(); - IInteger nomO = null, denomO = null; - while (in.hasNext()) { - switch (in.nextName()) { - case "nominator": - nomO = (IInteger) read(in, TF.integerType()); - case "denominator": - denomO = (IInteger) read(in, TF.integerType()); - } - } - in.endObject(); + in.endObject(); - if (nomO == null || denomO == null) { - throw new IOException("Did not find all fields of expected rational at " + in.getPath()); - } + if (nomO == null || denomO == null) { + throw parseErrorHere("Did not find all fields of expected rational at " + in.getPath()); + } - return vf.rational(nomO, denomO); - case BEGIN_ARRAY: - in.beginArray(); - IInteger nomA = (IInteger) read(in, TF.integerType()); - IInteger denomA = (IInteger) read(in, TF.integerType()); - in.endArray(); - return vf.rational(nomA, denomA); - case STRING: - return vf.rational(in.nextString()); - default: - throw new IOException("Expected integer but got " + in.peek()); - } + return vf.rational(nomO, denomO); + case BEGIN_ARRAY: + in.beginArray(); + IInteger nomA = (IInteger) read(in, TF.integerType()); + IInteger denomA = (IInteger) read(in, TF.integerType()); + in.endArray(); + return vf.rational(nomA, denomA); + case STRING: + return vf.rational(in.nextString()); + default: + throw parseErrorHere("Expected integer but got " + in.peek()); + } + } + + @Override + public IValue visitMap(Type type) throws IOException { + if (isNull()) { + return inferNullValue(nulls, type); } + IMapWriter w = vf.mapWriter(); - @Override - public IValue visitMap(Type type) throws IOException { - if (isNull()) { - return inferNullValue(nulls, type); - } - IMapWriter w = vf.mapWriter(); - - switch (in.peek()) { - case BEGIN_OBJECT: - in.beginObject(); - if (!type.getKeyType().isString()) { - throw new IOException("Can not read JSon object as a map if the key type of the map (" + type + ") is not a string at " + in.getPath()); - } - - while (in.hasNext()) { - w.put(vf.string(in.nextName()), read(in, type.getValueType())); - } - in.endObject(); - return w.done(); - case BEGIN_ARRAY: + switch (in.peek()) { + case BEGIN_OBJECT: + in.beginObject(); + if (!type.getKeyType().isString()) { + throw parseErrorHere("Can not read JSon object as a map if the key type of the map (" + type + ") is not a string at " + in.getPath()); + } + + while (in.hasNext()) { + w.put(vf.string(in.nextName()), read(in, type.getValueType())); + } + in.endObject(); + return w.done(); + case BEGIN_ARRAY: + in.beginArray(); + while (in.hasNext()) { in.beginArray(); - while (in.hasNext()) { - in.beginArray(); - IValue key = read(in, type.getKeyType()); - IValue value = read(in, type.getValueType()); - w.put(key,value); - in.endArray(); - } + IValue key = read(in, type.getKeyType()); + IValue value = read(in, type.getValueType()); + w.put(key,value); in.endArray(); - return w.done(); - default: - throw new IOException("Expected a map encoded as an object or an nested array to match " + type); - } - } - - @Override - public IValue visitAlias(Type type) throws IOException { - while (type.isAliased()) { - type = type.getAliased(); - } - - return type.accept(this); + } + in.endArray(); + return w.done(); + default: + throw parseErrorHere("Expected a map encoded as an object or an nested array to match " + type); } - - @Override - public IValue visitBool(Type type) throws IOException { - if (isNull()) { - return inferNullValue(nulls, type); - } - return vf.bool(in.nextBoolean()); + } + + @Override + public IValue visitAlias(Type type) throws IOException { + while (type.isAliased()) { + type = type.getAliased(); } - private int getPos() { - if (src == null) { - return 0; - } + return type.accept(this); + } - try { - return (int) posHandler.get(in) - 1; - } - catch (IllegalArgumentException | SecurityException e) { - // stop trying to recover the positions - src = null; - return 0; - } + @Override + public IValue visitBool(Type type) throws IOException { + if (isNull()) { + return inferNullValue(nulls, type); } + return vf.bool(in.nextBoolean()); + } - private int getLine() { - if (src == null) { - return 0; - } + private int getPos() { + try { + return Math.max(0, (int) posHandler.get(in) - 1); + } + catch (IllegalArgumentException | SecurityException e) { + // stop trying to recover the positions + src = null; + return 0; + } + } - try { - return (int) lineHandler.get(in) + 1; - } - catch (IllegalArgumentException | SecurityException e) { - // stop trying to recover the positions - src = null; - return 0; - } + private int getLine() { + if (src == null) { + return 0; } - private int getCol() { - if (src == null) { - return 0; - } + try { + return (int) lineHandler.get(in) + 1; + } + catch (IllegalArgumentException | SecurityException e) { + // stop trying to recover the positions + src = null; + return 0; + } + } - try { - return getPos() - (int) lineStartHandler.get(in); - } - catch (IllegalArgumentException | SecurityException e) { - // stop trying to recover the positions - src = null; - return 0; - } + private int getCol() { + if (src == null) { + return 0; } - /** - * Expecting an ADT we found NULL on the lookahead. - * This is either a Maybe or we can use the map - * of null values. - */ - private IValue visitNullAsAbstractData(Type type) { - return inferNullValue(nulls, type); + try { + return getPos() - (int) lineStartHandler.get(in); } + catch (IllegalArgumentException | SecurityException e) { + // stop trying to recover the positions + src = null; + return 0; + } + } - /** - * Expecting an ADT we found a string value instead. - * Now we can (try to) apply the parsers that were passed in. - * If that does not fly, we can interpret strings as nullary ADT - * constructors. - */ - private IValue visitStringAsAbstractData(Type type) throws IOException { - var stringInput = in.nextString(); + protected Throw parseErrorHere(String cause) { + var location = src == null ? URIUtil.rootLocation("unknown") : src; + int offset = getPos(); + int line = getLine(); + int col = getCol(); + + return RuntimeExceptionFactory.jsonParseError( + vf.sourceLocation(location, offset, 1, line, line, col, col + 1), + cause, + in.getPath()); + } - // might be a parsable string. let's see. - if (parsers != null) { - var reified = new org.rascalmpl.types.TypeReifier(vf).typeToValue(type, new TypeStore(), vf.map()); - - try { - return parsers.call(Collections.emptyMap(), reified, vf.string(stringInput)); - } - catch (Throw t) { - Type excType = t.getException().getType(); + /** + * Expecting an ADT we found NULL on the lookahead. + * This is either a Maybe or we can use the map + * of null values. + */ + private IValue visitNullAsAbstractData(Type type) { + return inferNullValue(nulls, type); + } - if (excType.isAbstractData() && ((IConstructor) t.getException()).getConstructorType().getName().equals("ParseError")) { - throw new IOException(t); // an actual parse error is meaningful to report - } - // otherwise we fall through to enum recognition - } + /** + * Expecting an ADT we found a string value instead. + * Now we can (try to) apply the parsers that were passed in. + * If that does not fly, we can interpret strings as nullary ADT + * constructors. + */ + private IValue visitStringAsAbstractData(Type type) throws IOException { + var stringInput = in.nextString(); + + // might be a parsable string. let's see. + if (parsers != null) { + var reified = new org.rascalmpl.types.TypeReifier(vf).typeToValue(type, new TypeStore(), vf.map()); + + try { + return parsers.call(Collections.emptyMap(), reified, vf.string(stringInput)); } + catch (Throw t) { + Type excType = t.getException().getType(); - // enum! - Set enumCons = store.lookupConstructor(type, stringInput); - - for (Type candidate : enumCons) { - if (candidate.getArity() == 0) { - return vf.constructor(candidate); + if (excType.isAbstractData() && ((IConstructor) t.getException()).getConstructorType().getName().equals("ParseError")) { + throw t; // that's a real parse error to report } - } - - if (parsers != null) { - throw new IOException("parser failed to recognize \"" + stringInput + "\" and no nullary constructor found for " + type + "either"); - } - else { - throw new IOException("no nullary constructor found for " + type + ", that matches " + stringInput); + // otherwise we fall through to enum recognition } } - /** - * This is the main workhorse. Every object is mapped one-to-one to an ADT constructor - * instance. The field names (keyword parameters and positional) are mapped to field - * names of the object. The name of the constructor is _not_ consequential. - * @param type - * @return - * @throws IOException - */ - private IValue visitObjectAsAbstractData(Type type) throws IOException { - Set alternatives = store.lookupAlternatives(type); - if (alternatives.size() > 1) { - monitor.warning("selecting arbitrary constructor for " + type, vf.sourceLocation(in.getPath())); + // enum! + Set enumCons = store.lookupConstructor(type, stringInput); + + for (Type candidate : enumCons) { + if (candidate.getArity() == 0) { + return vf.constructor(candidate); } - Type cons = alternatives.iterator().next(); - - in.beginObject(); - int startPos = getPos(); - int startLine = getLine(); - int startCol = getCol(); - - IValue[] args = new IValue[cons.getArity()]; - Map kwParams = new HashMap<>(); - - if (!cons.hasFieldNames() && cons.getArity() != 0) { - throw new IOException("For the object encoding constructors must have field names " + in.getPath()); + } + + if (parsers != null) { + throw parseErrorHere("parser failed to recognize \"" + stringInput + "\" and no nullary constructor found for " + type + "either"); + } + else { + throw parseErrorHere("no nullary constructor found for " + type + ", that matches " + stringInput); + } + } + + /** + * This is the main workhorse. Every object is mapped one-to-one to an ADT constructor + * instance. The field names (keyword parameters and positional) are mapped to field + * names of the object. The name of the constructor is _not_ consequential. + * @param type + * @return + * @throws IOException + */ + private IValue visitObjectAsAbstractData(Type type) throws IOException { + Set alternatives = store.lookupAlternatives(type); + if (alternatives.size() > 1) { + monitor.warning("selecting arbitrary constructor for " + type, vf.sourceLocation(in.getPath())); + } + Type cons = alternatives.iterator().next(); + + in.beginObject(); + int startPos = getPos(); + int startLine = getLine(); + int startCol = getCol(); + + IValue[] args = new IValue[cons.getArity()]; + Map kwParams = new HashMap<>(); + + if (!cons.hasFieldNames() && cons.getArity() != 0) { + throw parseErrorHere("For the object encoding constructors must have field names " + in.getPath()); + } + + while (in.hasNext()) { + String label = in.nextName(); + if (cons.hasField(label)) { + IValue val = read(in, cons.getFieldType(label)); + if (val != null) { + args[cons.getFieldIndex(label)] = val; + } + else { + throw parseErrorHere("Could not parse argument " + label + ":" + in.getPath()); + } } - - while (in.hasNext()) { - String label = in.nextName(); - if (cons.hasField(label)) { - IValue val = read(in, cons.getFieldType(label)); + else if (cons.hasKeywordField(label, store)) { + if (!isNull()) { // lookahead for null to give default parameters the preference. + IValue val = read(in, store.getKeywordParameterType(cons, label)); + // null can still happen if the nulls map doesn't have a default if (val != null) { - args[cons.getFieldIndex(label)] = val; - } - else { - throw new IOException("Could not parse argument " + label + ":" + in.getPath()); + // if the value is null we'd use the default value of the defined field in the constructor + kwParams.put(label, val); } } - else if (cons.hasKeywordField(label, store)) { - if (!isNull()) { // lookahead for null to give default parameters the preference. - IValue val = read(in, store.getKeywordParameterType(cons, label)); - // null can still happen if the nulls map doesn't have a default - if (val != null) { - // if the value is null we'd use the default value of the defined field in the constructor - kwParams.put(label, val); - } - } - } - else { // its a normal arg, pass its label to the child - throw new IOException("Unknown field " + label + ":" + in.getPath()); - } } - - in.endObject(); - int endPos = getPos(); - int endLine = getLine(); - int endCol = getCol(); - - for (int i = 0; i < args.length; i++) { - if (args[i] == null) { - throw new IOException("Missing argument " + cons.getFieldName(i) + " to " + cons + ":" + in.getPath()); - } + else { // its a normal arg, pass its label to the child + throw parseErrorHere("Unknown field " + label + ":" + in.getPath()); } - - if (src != null) { - kwParams.put(kwParams.containsKey("src") ? "rascal-src" : "src", vf.sourceLocation(src, startPos, endPos - startPos + 1, startLine, endLine, startCol, endCol + 1)); + } + + in.endObject(); + int endPos = getPos(); + int endLine = getLine(); + int endCol = getCol(); + + for (int i = 0; i < args.length; i++) { + if (args[i] == null) { + throw parseErrorHere("Missing argument " + cons.getFieldName(i) + " to " + cons + ":" + in.getPath()); } + } + + if (src != null) { + kwParams.put(kwParams.containsKey("src") ? "rascal-src" : "src", vf.sourceLocation(src, startPos, endPos - startPos + 1, startLine, endLine, startCol, endCol + 1)); + } - return vf.constructor(cons, args, kwParams); - } + return vf.constructor(cons, args, kwParams); + } - @Override - public IValue visitAbstractData(Type type) throws IOException { - if (UtilMaybe.isMaybe(type)) { - if (in.peek() == JsonToken.NULL) { - in.nextNull(); - return UtilMaybe.nothing(); - } - else { - // dive into the wrapped type, and wrap the result. Could be a str, int, or anything. - return UtilMaybe.just(type.getTypeParameters().getFieldType(0).accept(this)); - } + @Override + public IValue visitAbstractData(Type type) throws IOException { + if (UtilMaybe.isMaybe(type)) { + if (in.peek() == JsonToken.NULL) { + in.nextNull(); + return UtilMaybe.nothing(); } - - switch (in.peek()) { - case NULL: - return visitNullAsAbstractData(type); - case STRING: - return visitStringAsAbstractData(type); - case BEGIN_OBJECT: - return visitObjectAsAbstractData(type); - default: - throw new IOException("Expected ADT:" + type + ", but found " + in.peek().toString()); + else { + // dive into the wrapped type, and wrap the result. Could be a str, int, or anything. + return UtilMaybe.just(type.getTypeParameters().getFieldType(0).accept(this)); } } - - @Override - public IValue visitConstructor(Type type) throws IOException { - return read(in, type.getAbstractDataType()); + + switch (in.peek()) { + case NULL: + return visitNullAsAbstractData(type); + case STRING: + return visitStringAsAbstractData(type); + case BEGIN_OBJECT: + return visitObjectAsAbstractData(type); + default: + throw parseErrorHere("Expected ADT:" + type + ", but found " + in.peek().toString()); } - - @Override - public IValue visitNode(Type type) throws IOException { - if (isNull()) { - return inferNullValue(nulls, type); - } + } - in.beginObject(); - int startPos = getPos(); - int startLine = getLine(); - int startCol = getCol(); - - Map kws = new HashMap<>(); - - while (in.hasNext()) { - String kwName = in.nextName(); - IValue value = read(in, TF.valueType()); - - if (value != null) { - kws.put(kwName, value); - } - } - - in.endObject(); - int endPos = getPos(); - int endLine = getLine(); - int endCol = getCol(); + @Override + public IValue visitConstructor(Type type) throws IOException { + return read(in, type.getAbstractDataType()); + } - if (src != null) { - kws.put(kws.containsKey("src") ? "rascal-src" : "src", vf.sourceLocation(src, startPos, endPos - startPos + 1, startLine, endLine, startCol, endCol + 1)); - } - - return vf.node("object", new IValue[] { }, kws); + @Override + public IValue visitNode(Type type) throws IOException { + if (isNull()) { + return inferNullValue(nulls, type); } + + in.beginObject(); + int startPos = getPos(); + int startLine = getLine(); + int startCol = getCol(); + + Map kws = new HashMap<>(); - @Override - public IValue visitNumber(Type type) throws IOException { - return visitInteger(type); + while (in.hasNext()) { + String kwName = in.nextName(); + IValue value = read(in, TF.valueType()); + + if (value != null) { + kws.put(kwName, value); + } } - @Override - public IValue visitParameter(Type type) throws IOException { - return type.getBound().accept(this); + in.endObject(); + int endPos = getPos(); + int endLine = getLine(); + int endCol = getCol(); + + if (src != null) { + kws.put(kws.containsKey("src") ? "rascal-src" : "src", vf.sourceLocation(src, startPos, endPos - startPos + 1, startLine, endLine, startCol, endCol + 1)); } - @Override - public IValue visitDateTime(Type type) throws IOException { - try { - switch (in.peek()) { - case STRING: - Date parsedDate = format.get().parse(in.nextString()); - return vf.datetime(parsedDate.toInstant().toEpochMilli()); - case NUMBER: - return vf.datetime(in.nextLong()); - default: - throw new IOException("Expected a datetime instant " + in.getPath()); - } - } catch (ParseException e) { - throw new IOException("Could not parse date: " + in.getPath()); + return vf.node("object", new IValue[] { }, kws); + } + + @Override + public IValue visitNumber(Type type) throws IOException { + return visitInteger(type); + } + + @Override + public IValue visitParameter(Type type) throws IOException { + return type.getBound().accept(this); + } + + @Override + public IValue visitDateTime(Type type) throws IOException { + try { + switch (in.peek()) { + case STRING: + Date parsedDate = format.get().parse(in.nextString()); + return vf.datetime(parsedDate.toInstant().toEpochMilli()); + case NUMBER: + return vf.datetime(in.nextLong()); + default: + throw parseErrorHere("Expected a datetime instant " + in.getPath()); } + } catch (ParseException e) { + throw parseErrorHere("Could not parse date: " + in.getPath()); } - - @Override - public IValue visitList(Type type) throws IOException { - if (isNull()) { - return inferNullValue(nulls, type); - } + } - IListWriter w = vf.listWriter(); - in.beginArray(); - while (in.hasNext()) { - // here we pass label from the higher context - w.append(read(in, type.getElementType())); - } + @Override + public IValue visitList(Type type) throws IOException { + if (isNull()) { + return inferNullValue(nulls, type); + } - in.endArray(); - return w.done(); + IListWriter w = vf.listWriter(); + in.beginArray(); + while (in.hasNext()) { + // here we pass label from the higher context + w.append(read(in, type.getElementType())); } - - public IValue visitSet(Type type) throws IOException { - if (isNull()) { - return inferNullValue(nulls, type); - } - ISetWriter w = vf.setWriter(); - in.beginArray(); - while (in.hasNext()) { - // here we pass label from the higher context - w.insert(read(in, type.getElementType())); - } + in.endArray(); + return w.done(); + } + + public IValue visitSet(Type type) throws IOException { + if (isNull()) { + return inferNullValue(nulls, type); + } - in.endArray(); - return w.done(); + ISetWriter w = vf.setWriter(); + in.beginArray(); + while (in.hasNext()) { + // here we pass label from the higher context + w.insert(read(in, type.getElementType())); } - private boolean isNull() throws IOException { - // we use null in JSon to encode optional values. - // this will be mapped to keyword parameters in Rascal, - // or an exception if we really need a value - if (in.peek() == JsonToken.NULL) { - in.nextNull(); - return true; - } - return false; + in.endArray(); + return w.done(); + } + + private boolean isNull() throws IOException { + // we use null in JSon to encode optional values. + // this will be mapped to keyword parameters in Rascal, + // or an exception if we really need a value + if (in.peek() == JsonToken.NULL) { + in.nextNull(); + return true; + } + return false; + } + } + + private static final TypeFactory TF = TypeFactory.getInstance(); + private final TypeStore store; + private final IRascalValueFactory vf; + private ThreadLocal format; + private final IRascalMonitor monitor; + private ISourceLocation src; + private VarHandle posHandler; + private VarHandle lineHandler; + private VarHandle lineStartHandler; + private IFunction parsers; + private Map nulls = Collections.emptyMap(); + + + /** + * @param vf factory which will be used to construct values + * @param store type store to lookup constructors of abstract data-types in and the types of keyword fields + */ + public JsonValueReader(IRascalValueFactory vf, TypeStore store, IRascalMonitor monitor, ISourceLocation src) { + this.vf = vf; + this.store = store; + this.monitor = monitor; + this.src = (src == null) ? URIUtil.rootLocation("unknown") : src; + + setCalendarFormat("yyyy-MM-dd'T'HH:mm:ssZ"); + + // this is for origin tracking as well as accurate parse errors + try { + var lookup = MethodHandles.lookup(); + var privateLookup = MethodHandles.privateLookupIn(JsonReader.class, lookup); + this.posHandler = privateLookup.findVarHandle(JsonReader.class, "pos", int.class); + this.lineHandler = privateLookup.findVarHandle(JsonReader.class, "lineNumber", int.class); + this.lineStartHandler = privateLookup.findVarHandle(JsonReader.class, "lineStart", int.class); + } + catch (NoSuchFieldException | SecurityException | IllegalAccessException e) { + // we disable the origin tracking if we can not get to the fields + src = null; + monitor.warning("Unable to retrieve origin information due to: " + e.getMessage(), src); + } + } + + public JsonValueReader(IRascalValueFactory vf, IRascalMonitor monitor, ISourceLocation src) { + this(vf, new TypeStore(), monitor, src); + } + + public JsonValueReader setNulls(Map nulls) { + this.nulls = nulls; + return this; + } + /** + * Builder method to set the format to use for all date-time values encoded as strings + */ + public JsonValueReader setCalendarFormat(String format) { + // SimpleDateFormat is not thread safe, so here we make sure + // we can use objects of this reader in different threads at the same time + this.format = new ThreadLocal() { + protected SimpleDateFormat initialValue() { + return new SimpleDateFormat(format); } + }; + return this; + } + + public JsonValueReader setParsers(IFunction parsers) { + if (parsers.getType() instanceof ReifiedType && parsers.getType().getTypeParameters().getFieldType(0).isTop()) { + // ignore the default parser + parsers = null; + } - }); - - return res; + this.parsers = parsers; + return this; } + /** + * Read and validate a Json stream as an IValue + * @param in json stream + * @param expected type to validate against (recursively) + * @return an IValue of the expected type + * @throws IOException when either a parse error or a validation error occurs + */ + public IValue read(JsonReader in, Type expected) throws IOException { + var dispatch = new ExpectedTypeDispatcher(in); + try { + return expected.accept(dispatch); + } + catch (EOFException | JsonParseException | NumberFormatException | MalformedJsonException | IllegalStateException | NullPointerException e) { + throw dispatch.parseErrorHere(e.getMessage()); + } + } } \ No newline at end of file From 50b7fe6beec10254153ccdb4108ec8b49ffb8692 Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Thu, 27 Jun 2024 12:03:41 +0200 Subject: [PATCH 030/191] can still turn off origin tracking --- .../lang/json/internal/JsonValueReader.java | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java index 65e6c0e3c85..bde3e95a654 100644 --- a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java +++ b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java @@ -28,7 +28,6 @@ import java.util.Map; import java.util.Set; -import org.apache.commons.lang.ObjectUtils.Null; import org.rascalmpl.debug.IRascalMonitor; import org.rascalmpl.exceptions.RuntimeExceptionFactory; import org.rascalmpl.exceptions.Throw; @@ -52,7 +51,6 @@ import io.usethesource.vallang.type.TypeStore; import com.google.gson.JsonParseException; -import com.google.gson.JsonSyntaxException; import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonToken; import com.google.gson.stream.MalformedJsonException; @@ -404,6 +402,10 @@ public IValue visitBool(Type type) throws IOException { } private int getPos() { + if (src == null) { + return 0; + } + try { return Math.max(0, (int) posHandler.get(in) - 1); } @@ -572,7 +574,7 @@ else if (cons.hasKeywordField(label, store)) { } } - if (src != null) { + if (originTracking) { kwParams.put(kwParams.containsKey("src") ? "rascal-src" : "src", vf.sourceLocation(src, startPos, endPos - startPos + 1, startLine, endLine, startCol, endCol + 1)); } @@ -637,7 +639,7 @@ public IValue visitNode(Type type) throws IOException { int endLine = getLine(); int endCol = getCol(); - if (src != null) { + if (originTracking) { kws.put(kws.containsKey("src") ? "rascal-src" : "src", vf.sourceLocation(src, startPos, endPos - startPos + 1, startLine, endLine, startCol, endCol + 1)); } @@ -722,6 +724,7 @@ private boolean isNull() throws IOException { private ThreadLocal format; private final IRascalMonitor monitor; private ISourceLocation src; + private boolean originTracking; private VarHandle posHandler; private VarHandle lineHandler; private VarHandle lineStartHandler; @@ -738,6 +741,7 @@ public JsonValueReader(IRascalValueFactory vf, TypeStore store, IRascalMonitor m this.store = store; this.monitor = monitor; this.src = (src == null) ? URIUtil.rootLocation("unknown") : src; + setCalendarFormat("yyyy-MM-dd'T'HH:mm:ssZ"); @@ -748,9 +752,11 @@ public JsonValueReader(IRascalValueFactory vf, TypeStore store, IRascalMonitor m this.posHandler = privateLookup.findVarHandle(JsonReader.class, "pos", int.class); this.lineHandler = privateLookup.findVarHandle(JsonReader.class, "lineNumber", int.class); this.lineStartHandler = privateLookup.findVarHandle(JsonReader.class, "lineStart", int.class); + this.originTracking = (src != null); } catch (NoSuchFieldException | SecurityException | IllegalAccessException e) { // we disable the origin tracking if we can not get to the fields + originTracking = false; src = null; monitor.warning("Unable to retrieve origin information due to: " + e.getMessage(), src); } From 149e5462a7f6d8ef059144eaf0f409f0a772a1b5 Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Thu, 27 Jun 2024 12:04:46 +0200 Subject: [PATCH 031/191] better error message --- src/org/rascalmpl/library/lang/json/IO.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/org/rascalmpl/library/lang/json/IO.java b/src/org/rascalmpl/library/lang/json/IO.java index cc8c4929888..6c216dc218a 100644 --- a/src/org/rascalmpl/library/lang/json/IO.java +++ b/src/org/rascalmpl/library/lang/json/IO.java @@ -126,8 +126,7 @@ public IValue readJSON(IValue type, ISourceLocation loc, IString dateTimeFormat, throw RuntimeExceptionFactory.io(values.string(e.getMessage()), null, null); } catch (NullPointerException e) { - e.printStackTrace(); - throw RuntimeExceptionFactory.io(values.string("NPE"), null, null); + throw RuntimeExceptionFactory.io(values.string("NPE in error handling code"), null, null); } } From f32eb53af6a3314bc655960cf663469bb88d8936 Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Thu, 27 Jun 2024 15:23:35 +0200 Subject: [PATCH 032/191] improved error reporting around quotes names with unbalanced quotes, and quoted strings with unbalanced quotes --- src/org/rascalmpl/library/lang/json/IO.rsc | 2 +- .../lang/json/internal/JsonValueReader.java | 67 +++++++++++++------ 2 files changed, 47 insertions(+), 22 deletions(-) diff --git a/src/org/rascalmpl/library/lang/json/IO.rsc b/src/org/rascalmpl/library/lang/json/IO.rsc index ac97e2762e6..c49a54b46ff 100644 --- a/src/org/rascalmpl/library/lang/json/IO.rsc +++ b/src/org/rascalmpl/library/lang/json/IO.rsc @@ -72,7 +72,7 @@ public map[type[value] forType, value nullValue] defaultJSONNULLValues = ( #node : "null"(), #int : -1, #real : -1.0, - #rat :-1r1, + #rat : -1r1, #value : "null"(), #str : "", #list[value] : [], diff --git a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java index bde3e95a654..d9b603bbadb 100644 --- a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java +++ b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java @@ -63,11 +63,34 @@ public class JsonValueReader { private final class ExpectedTypeDispatcher implements ITypeVisitor { private final JsonReader in; + private int lastPos; private ExpectedTypeDispatcher(JsonReader in) { this.in = in; } + /** + * Wrapping in.nextString for better error reporting + */ + private String nextString() throws IOException { + // need to cache the last position before parsing the string, because + // when the string does not have a balancing quote the read accidentally + // rewinds the position to 0. + lastPos=getPos(); + return in.nextString(); + } + + /** + * Wrapping in.nextName for better error reporting + */ + private String nextName() throws IOException { + // need to cache the last position before parsing the string, because + // when the string does not have a balancing quote the read accidentally + // rewinds the position to 0. + lastPos=getPos(); + return in.nextName(); + } + @Override public IValue visitInteger(Type type) throws IOException { try { @@ -75,7 +98,7 @@ public IValue visitInteger(Type type) throws IOException { case NUMBER: return vf.integer(in.nextLong()); case STRING: - return vf.integer(in.nextString()); + return vf.integer(nextString()); case NULL: in.nextNull(); return inferNullValue(nulls, type); @@ -94,7 +117,7 @@ public IValue visitReal(Type type) throws IOException { case NUMBER: return vf.real(in.nextDouble()); case STRING: - return vf.real(in.nextString()); + return vf.real(nextString()); case NULL: in.nextNull(); return inferNullValue(nulls, type); @@ -129,8 +152,8 @@ public IValue visitString(Type type) throws IOException { if (isNull()) { return inferNullValue(nulls, type); } - - return vf.string(in.nextString()); + + return vf.string(nextString()); } @Override @@ -195,22 +218,23 @@ private IValue sourceLocationObject() throws IOException { in.beginObject(); while (in.hasNext()) { - String name = in.nextName(); + String name = nextName(); + switch (name) { case "scheme": - scheme = in.nextString(); + scheme = nextString(); break; case "authority": - authority = in.nextString(); + authority = nextString(); break; case "path": - path = in.nextString(); + path = nextString(); break; case "fragment": - fragment = in.nextString(); + fragment = nextString(); break; case "query": - query = in.nextString(); + query = nextString(); break; case "offset": offset = in.nextInt(); @@ -282,7 +306,7 @@ public IValue visitValue(Type type) throws IOException { return visitBool(TF.nodeType()); case NAME: // this would be weird though - return vf.string(in.nextName()); + return vf.string(nextName()); case NULL: in.nextNull(); return inferNullValue(nulls, type); @@ -293,7 +317,7 @@ public IValue visitValue(Type type) throws IOException { private IValue sourceLocationString() throws IOException { try { - String val = in.nextString().trim(); + String val = nextString().trim(); if (val.startsWith("|") && (val.endsWith("|") || val.endsWith(")"))) { return new StandardTextReader().read(vf, new StringReader(val)); @@ -321,7 +345,7 @@ public IValue visitRational(Type type) throws IOException { in.beginObject(); IInteger nomO = null, denomO = null; while (in.hasNext()) { - switch (in.nextName()) { + switch (nextName()) { case "nominator": nomO = (IInteger) read(in, TF.integerType()); case "denominator": @@ -343,7 +367,7 @@ public IValue visitRational(Type type) throws IOException { in.endArray(); return vf.rational(nomA, denomA); case STRING: - return vf.rational(in.nextString()); + return vf.rational(nextString()); default: throw parseErrorHere("Expected integer but got " + in.peek()); } @@ -364,7 +388,7 @@ public IValue visitMap(Type type) throws IOException { } while (in.hasNext()) { - w.put(vf.string(in.nextName()), read(in, type.getValueType())); + w.put(vf.string(nextName()), read(in, type.getValueType())); } in.endObject(); return w.done(); @@ -448,12 +472,12 @@ private int getCol() { protected Throw parseErrorHere(String cause) { var location = src == null ? URIUtil.rootLocation("unknown") : src; - int offset = getPos(); + int offset = Math.max(getPos(), lastPos); int line = getLine(); int col = getCol(); return RuntimeExceptionFactory.jsonParseError( - vf.sourceLocation(location, offset, 1, line, line, col, col + 1), + vf.sourceLocation(location,offset, 1, line, line, col, col + 1), cause, in.getPath()); } @@ -474,7 +498,7 @@ private IValue visitNullAsAbstractData(Type type) { * constructors. */ private IValue visitStringAsAbstractData(Type type) throws IOException { - var stringInput = in.nextString(); + var stringInput = nextString(); // might be a parsable string. let's see. if (parsers != null) { @@ -538,7 +562,7 @@ private IValue visitObjectAsAbstractData(Type type) throws IOException { } while (in.hasNext()) { - String label = in.nextName(); + String label = nextName(); if (cons.hasField(label)) { IValue val = read(in, cons.getFieldType(label)); if (val != null) { @@ -626,7 +650,7 @@ public IValue visitNode(Type type) throws IOException { Map kws = new HashMap<>(); while (in.hasNext()) { - String kwName = in.nextName(); + String kwName = nextName(); IValue value = read(in, TF.valueType()); if (value != null) { @@ -661,7 +685,8 @@ public IValue visitDateTime(Type type) throws IOException { try { switch (in.peek()) { case STRING: - Date parsedDate = format.get().parse(in.nextString()); + lastPos = getPos(); + Date parsedDate = format.get().parse(nextString()); return vf.datetime(parsedDate.toInstant().toEpochMilli()); case NUMBER: return vf.datetime(in.nextLong()); From b6782ee53d415889120116982f9687441b65601c Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Tue, 9 Jul 2024 20:12:42 +0200 Subject: [PATCH 033/191] added tests for parsing/formatting while reading/writing JSON --- src/org/rascalmpl/library/lang/json/IO.rsc | 3 +- .../tests/library/lang/json/JSONIOTests.rsc | 33 +++++++++++++++++-- 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/src/org/rascalmpl/library/lang/json/IO.rsc b/src/org/rascalmpl/library/lang/json/IO.rsc index c49a54b46ff..7199346b781 100644 --- a/src/org/rascalmpl/library/lang/json/IO.rsc +++ b/src/org/rascalmpl/library/lang/json/IO.rsc @@ -65,7 +65,8 @@ java &T readJSON( bool lenient=false, bool trackOrigins=false, JSONParser[value] parser = (type[value] _, str _) { throw ""; }, - map [type[value] forType, value nullValue] nulls = defaultJSONNULLValues); + map [type[value] forType, value nullValue] nulls = defaultJSONNULLValues +); public map[type[value] forType, value nullValue] defaultJSONNULLValues = ( #Maybe[value] : nothing(), diff --git a/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc b/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc index 21e5c9acc61..f1785ffba12 100644 --- a/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc +++ b/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc @@ -58,10 +58,10 @@ test bool json3() = writeRead(#DATA3, data3(123,kw="123")); test bool json4(Enum e) = writeRead(#DATA4, data4(e=e)); test bool originTracking() { - example = readJSON(#node, |std:///lang/rascal/tests/library/lang/json/glossary.json|, trackOrigins=true); + ex2 = readJSON(#node, |std:///lang/rascal/tests/library/lang/json/glossary.json|, trackOrigins=true); content = readFile(|std:///lang/rascal/tests/library/lang/json/glossary.json|); - poss = [ | /node x := example, x.line?]; // every node has a .src field, otherwise this fails with an exception + poss = [ | /node x := ex2, x.line?]; // every node has a .src field, otherwise this fails with an exception for ( <- poss) { assert content[p.offset] == "{"; // all nodes start with a { @@ -94,5 +94,34 @@ test bool dealWithNull() { assert parseJSON(#Cons, "{\"bla\": \"foo\"}") == cons(bla="foo"); assert parseJSON(#Cons, "{\"bla\": null}") == cons(); + return true; +} + +data Example = example(Prop ex = F()); + +data Prop = T() | F() | and(Prop lhs, Prop rhs) | or(Prop lhs, Prop rhs); + +str format(T()) = "true"; +str format(F()) = "false"; +str format(and(Prop p1, Prop p2)) = " && "; +str format(or(Prop p1, Prop p2)) = " || "; + +Prop parse(type[Prop] _, "true") = T(); +Prop parse(type[Prop] _, "false") = F(); + +test bool formattingToStringsTest() { + ex1 = and(and(\T(), \F()),or(\T(), \F())); + + writeJSON(|memory://test-json/formatted.json|, example(ex=ex1), formatter=format); + source = readFile(|memory://test-json/formatted.json|); + + assert source == "{\"ex\":\"true && false && true || false\"}"; + + writeFile(|memory://test-json/printed.json|, "{\"ex\":\"true\"}"); + + Example result = readJSON(#Example, |memory://test-json/printed.json|, parser=parse); + + assert result.ex == T(); + return true; } \ No newline at end of file From 31cb437776386625782903943f0ce3f70786a8e4 Mon Sep 17 00:00:00 2001 From: Davy Landman Date: Tue, 28 May 2024 10:50:43 +0200 Subject: [PATCH 034/191] Working on jline3 --- .vscode/launch.json | 11 +- pom.xml | 31 ++ src/org/rascalmpl/interpreter/Evaluator.java | 6 + src/org/rascalmpl/shell/RascalShell2.java | 286 +++++++++++++++++++ 4 files changed, 332 insertions(+), 2 deletions(-) create mode 100644 src/org/rascalmpl/shell/RascalShell2.java diff --git a/.vscode/launch.json b/.vscode/launch.json index aa506d012ad..19e123daa5f 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -4,6 +4,13 @@ // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ + { + "type": "java", + "name": "RascalShell2", + "request": "launch", + "mainClass": "org.rascalmpl.shell.RascalShell2", + "projectName": "rascal" + }, { "type": "java", "name": "Launch DocRunner", @@ -38,7 +45,7 @@ "request": "launch", "mainClass": "org.rascalmpl.shell.RascalShell", "projectName": "rascal", - "cwd" : "${workspaceFolder}/../rascal-tutor", + "cwd": "${workspaceFolder}/../rascal-tutor", "vmArgs": "-Xss80m -Xmx2g -ea" }, { @@ -47,7 +54,7 @@ "request": "attach", "projectName": "rascal", "hostName": "localhost", - "port": 9001 + "port": 9213 }, { "type": "java", diff --git a/pom.xml b/pom.xml index 01c9f75078a..6f210da2fdc 100644 --- a/pom.xml +++ b/pom.xml @@ -33,6 +33,7 @@ 2 11 0.28.4 + 3.26.1 @@ -469,6 +470,36 @@ jline 2.14.6 + + org.jline + jline-terminal-jni + ${jline.version} + + + org.jline + jline-terminal-jna + ${jline.version} + + + org.jline + jline-reader + ${jline.version} + + + org.jline + jline-terminal + ${jline.version} + + + org.jline + jline-style + ${jline.version} + + + org.jline + jline-console + ${jline.version} + org.yaml snakeyaml diff --git a/src/org/rascalmpl/interpreter/Evaluator.java b/src/org/rascalmpl/interpreter/Evaluator.java index 5183ce362df..ea38006cf6c 100755 --- a/src/org/rascalmpl/interpreter/Evaluator.java +++ b/src/org/rascalmpl/interpreter/Evaluator.java @@ -1983,4 +1983,10 @@ public void showMessage(IConstructor message) { } } } + + + public void overwritePrintStream(PrintWriter outWriter, PrintWriter errWriter) { + this.curOutWriter = outWriter; + this.curErrWriter = errWriter; + } } diff --git a/src/org/rascalmpl/shell/RascalShell2.java b/src/org/rascalmpl/shell/RascalShell2.java new file mode 100644 index 00000000000..06febee1511 --- /dev/null +++ b/src/org/rascalmpl/shell/RascalShell2.java @@ -0,0 +1,286 @@ +/******************************************************************************* + * Copyright (c) 2009-2015 CWI + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + + * * Jurgen J. Vinju - Jurgen.Vinju@cwi.nl - CWI + * * Tijs van der Storm - Tijs.van.der.Storm@cwi.nl + * * Paul Klint - Paul.Klint@cwi.nl - CWI + * * Arnold Lankamp - Arnold.Lankamp@cwi.nl + *******************************************************************************/ +package org.rascalmpl.shell; + +import java.io.IOException; +import java.io.OutputStream; +import java.io.PrintWriter; +import java.nio.ByteBuffer; +import java.nio.CharBuffer; +import java.nio.charset.CharsetDecoder; +import java.nio.charset.CodingErrorAction; +import java.nio.charset.StandardCharsets; +import java.util.List; + +import org.apache.commons.io.input.NullInputStream; +import org.jline.reader.Candidate; +import org.jline.reader.CompletionMatcher; +import org.jline.reader.LineReader; +import org.jline.reader.LineReaderBuilder; +import org.jline.reader.ParsedLine; +import org.jline.reader.LineReader.Option; +import org.jline.reader.impl.completer.StringsCompleter; +import org.jline.reader.impl.history.DefaultHistory; +import org.jline.terminal.TerminalBuilder; +import org.rascalmpl.exceptions.Throw; +import org.rascalmpl.ideservices.BasicIDEServices; +import org.rascalmpl.ideservices.IDEServices; +import org.rascalmpl.interpreter.Evaluator; +import org.rascalmpl.interpreter.NullRascalMonitor; +import org.rascalmpl.interpreter.control_exceptions.InterruptException; +import org.rascalmpl.interpreter.control_exceptions.QuitException; +import org.rascalmpl.interpreter.env.GlobalEnvironment; +import org.rascalmpl.interpreter.env.ModuleEnvironment; +import org.rascalmpl.interpreter.load.StandardLibraryContributor; +import org.rascalmpl.interpreter.result.Result; +import org.rascalmpl.interpreter.staticErrors.StaticError; +import org.rascalmpl.interpreter.utils.RascalManifest; +import org.rascalmpl.interpreter.utils.Timing; +import org.rascalmpl.parser.gtd.exception.ParseError; +import org.rascalmpl.repl.ReplTextWriter; +import org.rascalmpl.uri.URIResolverRegistry; +import org.rascalmpl.uri.URIUtil; +import org.rascalmpl.values.ValueFactoryFactory; + +import io.usethesource.vallang.ISourceLocation; +import io.usethesource.vallang.IValue; +import io.usethesource.vallang.IValueFactory; + +import static org.rascalmpl.interpreter.utils.ReadEvalPrintDialogMessages.parseErrorMessage; +import static org.rascalmpl.interpreter.utils.ReadEvalPrintDialogMessages.staticErrorMessage; +import static org.rascalmpl.interpreter.utils.ReadEvalPrintDialogMessages.throwMessage; +import static org.rascalmpl.interpreter.utils.ReadEvalPrintDialogMessages.throwableMessage; + + +public class RascalShell2 { + + private static void printVersionNumber(){ + System.err.println("Version: " + RascalManifest.getRascalVersionNumber()); + } + + public static void main(String[] args) throws IOException { + System.setProperty("apple.awt.UIElement", "true"); // turns off the annoying desktop icon + printVersionNumber(); + + try { + var term = TerminalBuilder.builder() + .color(true) + .encoding(StandardCharsets.UTF_8) + //.jni(true) + //.streams(System.in, System.out) + .build(); + + var reader = LineReaderBuilder.builder() + .appName("Rascal REPL") + .completer(new StringsCompleter("IO", "IOMeer", "println", "print", "printlnExp")) + .terminal(term) + .history(new DefaultHistory()) + .build(); + + //IRascalMonitor monitor = IRascalMonitor.buildConsoleMonitor(System.in, System.out, true); + var monitor = new NullRascalMonitor() { + @Override + public void warning(String message, ISourceLocation src) { + reader.printAbove("[WARN] " + message); + } + }; + + IDEServices services = new BasicIDEServices(term.writer(), monitor); + + + GlobalEnvironment heap = new GlobalEnvironment(); + ModuleEnvironment root = heap.addModule(new ModuleEnvironment(ModuleEnvironment.SHELL_MODULE, heap)); + IValueFactory vf = ValueFactoryFactory.getValueFactory(); + Evaluator evaluator = new Evaluator(vf, new NullInputStream(), new FakeOutput(reader), new FakeOutput(reader), root, heap, monitor); + evaluator.overwritePrintStream(new FakePrintStream(reader, false), new FakePrintStream(reader, true)); + evaluator.addRascalSearchPathContributor(StandardLibraryContributor.getInstance()); + + URIResolverRegistry reg = URIResolverRegistry.getInstance(); + + var indentedPrettyPrinter = new ReplTextWriter(true); + + while (true) { + String line = reader.readLine("rascal> "); + try { + + Result value; + + synchronized(evaluator) { + value = evaluator.eval(monitor, line, URIUtil.rootLocation("prompt")); + evaluator.endAllJobs(); + } + + if (value.isVoid()) { + reader.printAbove("ok \n"); + } + else { + reader.printAbove("Result: " + value.toString(1024)); + } + } + catch (InterruptException ie) { + reader.printAbove("Interrupted"); + try { + ie.getRascalStackTrace().prettyPrintedString(evaluator.getErrorPrinter(), indentedPrettyPrinter); + } + catch (IOException e) { + } + } + catch (ParseError pe) { + parseErrorMessage(evaluator.getErrorPrinter(), line, "prompt", pe, indentedPrettyPrinter); + } + catch (StaticError e) { + staticErrorMessage(evaluator.getErrorPrinter(),e, indentedPrettyPrinter); + } + catch (Throw e) { + throwMessage(evaluator.getErrorPrinter(),e, indentedPrettyPrinter); + } + catch (QuitException q) { + reader.printAbove("Quiting REPL"); + break; + } + catch (Throwable e) { + throwableMessage(evaluator.getErrorPrinter(), e, evaluator.getStackTrace(), indentedPrettyPrinter); + } + } + System.exit(0); + } + catch (Throwable e) { + System.err.println("\n\nunexpected error: " + e.getMessage()); + e.printStackTrace(System.err); + System.exit(1); + } + finally { + System.out.flush(); + System.err.flush(); + } + } + + private static class FakeOutput extends OutputStream { + + private final LineReader target; + private final CharsetDecoder decoder; + private final CharBuffer decoded; + + FakeOutput(LineReader target) { + this.target = target; + this.decoder = StandardCharsets.UTF_8.newDecoder(); + this.decoder.replaceWith("?"); + this.decoder.onMalformedInput(CodingErrorAction.REPLACE); + this.decoder.onUnmappableCharacter(CodingErrorAction.REPLACE); + this.decoded = CharBuffer.allocate(1024); + } + + @Override + public void write(int b) throws IOException { + var res = decoder.decode(ByteBuffer.wrap(new byte[]{ (byte)b }), decoded, false); + if (res.isOverflow()) { + flush(); + write(b); + } + } + + @Override + public void write(byte[] b, int off, int len) throws IOException { + var bytes = ByteBuffer.wrap(b, off, len); + while (bytes.hasRemaining()) { + var res = decoder.decode(bytes, decoded, false); + if (res.isOverflow()) { + flush(); + } + else if (res.isError()) { + throw new IOException("Decoding failed with: " + res); + } + } + } + + @Override + public void flush() throws IOException { + try { + decoded.flip(); + if (decoded.hasRemaining()) { + this.target.printAbove(decoded.toString()); + } + } + finally { + decoded.clear(); + } + } + } + + + private static class FakePrintStream extends PrintWriter { + private final LineReader target; + private final CharBuffer buffer; + + public FakePrintStream(LineReader target, boolean autoFlush) { + super(OutputStream.nullOutputStream(), autoFlush, StandardCharsets.UTF_8); + this.target = target; + this.buffer = CharBuffer.allocate(8*1024); + } + + + @Override + public void write(int c) { + makeRoom(1); + this.buffer.append((char)c); + } + + private void makeRoom(int i) { + if (this.buffer.remaining() < i) { + flush(); + } + } + + + @Override + public void write(String s, int off, int len) { + while (len > 0) { + makeRoom(len); + int room = Math.min(buffer.remaining(), len); + buffer.append(s, off, room); + off += room; + len -= room; + } + } + + @Override + public void write(char[] buf, int off, int len) { + while (len > 0) { + makeRoom(len); + int room = Math.min(buffer.remaining(), len); + buffer.put(buf, off, room); + off += room; + len -= room; + } + } + + @Override + public void flush() { + try { + buffer.flip(); + if (buffer.hasRemaining()) { + target.printAbove(buffer.toString()); + } + } + finally { + buffer.clear(); + } + } + + + } + + +} From c67a197710e8843fcabea88910e621127a57eb95 Mon Sep 17 00:00:00 2001 From: Davy Landman Date: Wed, 29 May 2024 12:03:54 +0200 Subject: [PATCH 035/191] Working on jline3 --- pom.xml | 1 + .../repl/TerminalProgressBarMonitor2.java | 447 ++++++++++++++++++ src/org/rascalmpl/shell/RascalShell2.java | 68 ++- 3 files changed, 479 insertions(+), 37 deletions(-) create mode 100644 src/org/rascalmpl/repl/TerminalProgressBarMonitor2.java diff --git a/pom.xml b/pom.xml index 6f210da2fdc..d94ab9a0352 100644 --- a/pom.xml +++ b/pom.xml @@ -469,6 +469,7 @@ jline jline 2.14.6 + provided org.jline diff --git a/src/org/rascalmpl/repl/TerminalProgressBarMonitor2.java b/src/org/rascalmpl/repl/TerminalProgressBarMonitor2.java new file mode 100644 index 00000000000..1e7f2bbf159 --- /dev/null +++ b/src/org/rascalmpl/repl/TerminalProgressBarMonitor2.java @@ -0,0 +1,447 @@ +package org.rascalmpl.repl; + +import java.io.FilterWriter; +import java.io.IOException; +import java.io.InputStream; +import java.io.PrintWriter; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; +import java.time.Duration; +import java.time.Instant; +import java.util.LinkedList; +import java.util.List; + +import org.jline.terminal.Terminal; +import org.rascalmpl.debug.IRascalMonitor; + +import io.usethesource.vallang.ISourceLocation; + +/** + * The terminal progress bar monitor wraps the standard output stream to be able to monitor + * output and keep the progress bars at the same place in the window while other prints happen + * asyncronously (or even in parallel). It can be passed to the IDEServices API such that + * clients can start progress bars, make them grow and end them using the API in util::Monitor. + * + * This gives the console the ability to show progress almost as clearly as an IDE can with a + * UI experience. + * + * This class only works correctly if the actual _raw_ output stream of the terminal is wrapped + * with an object of this class. + */ +public class TerminalProgressBarMonitor2 extends PrintWriter implements IRascalMonitor { + /** + * We administrate an ordered list of named bars, which will be printed from + * top to bottom just above the next prompt. + */ + private List bars = new LinkedList<>(); + + /** + * The entire width in character columns of the current terminal. Resizes everytime when we start + * the first job. + */ + private int lineWidth; + + private final boolean unicodeEnabled; + + /**x + * Will make everything slow, but easier to spot mistakes + */ + private final boolean debug = false; + + /** + * Used to get updates to the width of the terminal + */ + private final Terminal tm; + + private final PrintWriter writer; + + + @SuppressWarnings("resource") + public TerminalProgressBarMonitor2(Terminal term) { + super(term.writer()); + this.writer = term.writer(); + + this.tm = term; + + this.lineWidth = tm.getWidth(); + this.unicodeEnabled = term.encoding().contains(StandardCharsets.UTF_8); + } + + /** + * Represents one currently running progress bar + */ + private class ProgressBar { + private final long threadId; + private final String threadName; + private final String name; + private int max; + private int current = 0; + private int previousWidth = 0; + private int doneWidth = 0; + private final int barWidthUnicode = lineWidth - "☐ ".length() - " 🕐 00:00:00.000 ".length(); + private final int barWidthAscii = lineWidth - "? ".length() - " - 00:00:00.000 ".length(); + private final Instant startTime; + private Duration duration; + private String message = ""; + + /** + * Stepper is incremented with every jobStep that has an visible effect on the progress bar. + * It is used to index into `clocks` or `twister` to create an animation effect. + */ + private int stepper = 1; + private final String[] clocks = new String[] {"🕐" , "🕑", "🕒", "🕓", "🕔", "🕕", "🕖", "🕗", "🕘", "🕙", "🕛"}; + private final String[] twister = new String[] {"." , ".", "o", "o", "O","O", "O", "o", "o", ".", "."}; + public int nesting = 0; + + ProgressBar(String name, int max) { + this.threadId = Thread.currentThread().getId(); + this.threadName = Thread.currentThread().getName(); + this.name = name; + this.max = Math.max(1, max); + this.startTime = Instant.now(); + this.duration = Duration.ZERO; + this.message = name; + } + + void worked(int amount, String message) { + if (current + amount > max) { + // Fixing this warning helps avoiding to flicker the tick sign on and off, and also makes the progress bar + // a more accurate depiction of the progress of the computation. + warning("Monitor of " + name + " is over max (" + max + ") by " + (current + amount - max), null); + } + + this.current = Math.min(current + amount, max); + this.duration = Duration.between(startTime, Instant.now()); + this.message = message; + } + + /** + * To avoid flickering of all bars at the same time, we only reprint + * the current bar + */ + void update() { + // to avoid flicker we only print if there is a new bar character to draw + if (newWidth() != previousWidth) { + stepper++; + writer.write(ANSI.moveUp(bars.size() - bars.indexOf(this))); + write(); // this moves the cursor already one line down due to `println` + int distance = bars.size() - bars.indexOf(this) - 1; + if (distance > 0) { + // ANSI will move 1 line even if the parameter is 0 + writer.write(ANSI.moveDown(distance)); + } + writer.flush(); + } + } + + int newWidth() { + if (max != 0) { + current = Math.min(max, current); // for robustness sake + var partDone = (current * 1.0) / (max * 1.0); + return (int) Math.floor(barWidthUnicode * partDone); + } + else { + return barWidthUnicode % stepper; + } + } + + /** + * Print the current state of the progress bar + */ + void write() { + previousWidth = doneWidth; + doneWidth = newWidth(); + + // var overWidth = barWidth - doneWidth; + var done = unicodeEnabled + ? (current >= max ? "☑ " : "☐ ") + : (current >= max ? "X " : "O ") + ; + + // capitalize + var msg = message.substring(0, 1).toUpperCase() + message.substring(1, message.length()); + + // fill up and cut off: + msg = threadLabel() + msg; + msg = (msg + " ".repeat(Math.max(0, barWidthUnicode - msg.length()))).substring(0, barWidthUnicode); + + // split + var barWidth = unicodeEnabled ? barWidthUnicode : barWidthAscii; + var frontPart = msg.substring(0, doneWidth); + var backPart = msg.substring(doneWidth, msg.length()); + var clock = unicodeEnabled ? clocks[stepper % clocks.length] : twister[stepper % twister.length]; + + if (barWidth < 1) { + return; // robustness against very small screens. At least don't throw bounds exceptions + } + else if (barWidth <= 3) { // we can print the clock for good measure + writer.println(clock); + return; + } + + var line + = done + + ANSI.darkBackground() + + frontPart + + ANSI.noBackground() + + ANSI.lightBackground() + + backPart + + ANSI.noBackground() + + " " + clock + " " + + String.format("%d:%02d:%02d.%03d", duration.toHoursPart(), duration.toMinutes(), duration.toSecondsPart(), duration.toMillisPart()) + + " " + ; + + writer.println("\r" + line); // note this puts us one line down + } + + private String threadLabel() { + if (threadName.isEmpty()) { + return ""; + } + else if ("main".equals(threadName)) { + return ""; + } + + return threadName + ": "; + } + + @Override + public boolean equals(Object obj) { + return obj instanceof ProgressBar + && ((ProgressBar) obj).name.equals(name) + && ((ProgressBar) obj).threadId == threadId + ; + } + + @Override + public int hashCode() { + return name.hashCode() + 31 * (int) threadId; + } + + public void done() { + this.current = Math.min(current, max); + this.duration = Duration.between(startTime, Instant.now()); + this.message = name; + } + } + + /** + * Clean the screen, ready for the next output (normal output or the next progress bars or both). + * We use fancy ANSI codes here to move the cursor and clean the screen to remove previous versions + * of the bars + */ + private void eraseBars() { + if (!bars.isEmpty()) { + writer.write(ANSI.moveUp(bars.size())); + writer.write(ANSI.clearToEndOfScreen()); + } + writer.flush(); + } + + /** + * ANSI escape codes convenience functions + */ + private static class ANSI { + + + static String moveUp(int n) { + return "\u001B[" + n + "F"; + } + + public static String darkBackground() { + return "\u001B[48;5;242m"; + } + + public static String noBackground() { + return "\u001B[49m"; + } + + public static String lightBackground() { + return "\u001B[48;5;249m"; + } + + static String moveDown(int n) { + return "\u001B[" + n + "E"; + } + + static String clearToEndOfScreen() { + return "\u001B[0J"; + } + + static String hideCursor() { + return "\u001B[?25l"; + } + + static String showCursor() { + return "\u001B[?25h"; + } + } + + /** + * Simply print the bars. No cursor movement here. Hiding the cursor prevents flickering. + */ + private void printBars() { + if (bars.isEmpty()) { + // no more bars to show, so cursor goes back. + writer.write(ANSI.showCursor()); + } + + for (var pb : bars) { + pb.write(); + } + + writer.flush(); + } + + /** + * Find a bar in the ordered list of bars, by name. + * @param name of the bar + * @return the current instance by that name + */ + private ProgressBar findBarByName(String name) { + return bars.stream() + .filter(b -> b.threadId == Thread.currentThread().getId()) + .filter(b -> b.name.equals(name)).findFirst().orElseGet(() -> null); + } + + @Override + public synchronized void jobStart(String name, int workShare, int totalWork) { + if (bars.size() == 0) { + // first new job, we take time to react to window resizing + lineWidth = tm.getWidth(); + // remove the cursor + writer.write(ANSI.hideCursor()); + } + + var pb = findBarByName(name); + + if (pb == null) { + eraseBars(); // to make room for the new bars + bars.add(new ProgressBar(name, totalWork)); + printBars(); // probably one line longer than before! + } + else { + // Zeno-bar: we add the new work to the already existing work + pb.max += totalWork; + pb.nesting++; + pb.update(); + } + } + + @Override + public synchronized void jobStep(String name, String message, int workShare) { + ProgressBar pb = findBarByName(name); + + if (pb != null) { + pb.worked(workShare, message); + pb.update(); + } + } + + @Override + public synchronized int jobEnd(String name, boolean succeeded) { + var pb = findBarByName(name); + + if (pb != null && --pb.nesting == -1) { + eraseBars(); + // write it one last time into the scrollback buffer (on top) + pb.done(); + pb.write(); + bars.remove(pb); + // print the left over bars under this one. + printBars(); + return pb.current; + } + else if (pb != null) { + pb.done(); + pb.update(); + } + + return -1; + } + + @Override + public synchronized boolean jobIsCanceled(String name) { + // ? don't know what this should do + return false; + } + + @Override + public synchronized void jobTodo(String name, int work) { + ProgressBar pb = findBarByName(name); + + if (pb != null) { + pb.max += work; + pb.update(); + } + } + + @Override + public synchronized void warning(String message, ISourceLocation src) { + if (!bars.isEmpty()) { + eraseBars(); + } + writer.println(("[WARNING] " + (src != null ? (src + ": ") : "") + message)); + if (!bars.isEmpty()) { + printBars(); + } + } + + @Override + public synchronized void write(String str, int off, int len){ + if (!bars.isEmpty()) { + eraseBars(); + super.write(str, off, len); + printBars(); + } + else { + super.write(str, off, len); + } + } + + @Override + public void write(char[] cbuf, int off, int len) { + if (!bars.isEmpty()) { + eraseBars(); + super.write(cbuf, off, len); + printBars(); + } + else { + super.write(cbuf, off, len); + } + } + + + /** + * Here we make sure the progress bars are gone just before + * someone wants to print in the console. When the printing + * is ready, we simply add our own progress bars again. + */ + @Override + public synchronized void write(int b) { + if (!bars.isEmpty()) { + eraseBars(); + super.write(b); + printBars(); + } + else { + super.write(b); + } + } + + + + @Override + public synchronized void endAllJobs() { + for (var pb : bars) { + if (pb.nesting >= 0) { + writer.println("[INFO] " + pb.name + " is still at nesting level " + pb.nesting); + } + } + + bars.clear(); + writer.write(ANSI.showCursor()); + writer.flush(); + } +} diff --git a/src/org/rascalmpl/shell/RascalShell2.java b/src/org/rascalmpl/shell/RascalShell2.java index 06febee1511..1b111a06ed6 100644 --- a/src/org/rascalmpl/shell/RascalShell2.java +++ b/src/org/rascalmpl/shell/RascalShell2.java @@ -1,19 +1,23 @@ -/******************************************************************************* - * Copyright (c) 2009-2015 CWI - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - - * * Jurgen J. Vinju - Jurgen.Vinju@cwi.nl - CWI - * * Tijs van der Storm - Tijs.van.der.Storm@cwi.nl - * * Paul Klint - Paul.Klint@cwi.nl - CWI - * * Arnold Lankamp - Arnold.Lankamp@cwi.nl - *******************************************************************************/ +/* +Copyright (c) 2024, Swat.engineering +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + package org.rascalmpl.shell; +import static org.rascalmpl.interpreter.utils.ReadEvalPrintDialogMessages.parseErrorMessage; +import static org.rascalmpl.interpreter.utils.ReadEvalPrintDialogMessages.staticErrorMessage; +import static org.rascalmpl.interpreter.utils.ReadEvalPrintDialogMessages.throwMessage; +import static org.rascalmpl.interpreter.utils.ReadEvalPrintDialogMessages.throwableMessage; + import java.io.IOException; import java.io.OutputStream; import java.io.PrintWriter; @@ -22,23 +26,18 @@ import java.nio.charset.CharsetDecoder; import java.nio.charset.CodingErrorAction; import java.nio.charset.StandardCharsets; -import java.util.List; import org.apache.commons.io.input.NullInputStream; -import org.jline.reader.Candidate; -import org.jline.reader.CompletionMatcher; import org.jline.reader.LineReader; import org.jline.reader.LineReaderBuilder; -import org.jline.reader.ParsedLine; -import org.jline.reader.LineReader.Option; import org.jline.reader.impl.completer.StringsCompleter; import org.jline.reader.impl.history.DefaultHistory; import org.jline.terminal.TerminalBuilder; +import org.rascalmpl.debug.IRascalMonitor; import org.rascalmpl.exceptions.Throw; import org.rascalmpl.ideservices.BasicIDEServices; import org.rascalmpl.ideservices.IDEServices; import org.rascalmpl.interpreter.Evaluator; -import org.rascalmpl.interpreter.NullRascalMonitor; import org.rascalmpl.interpreter.control_exceptions.InterruptException; import org.rascalmpl.interpreter.control_exceptions.QuitException; import org.rascalmpl.interpreter.env.GlobalEnvironment; @@ -47,22 +46,17 @@ import org.rascalmpl.interpreter.result.Result; import org.rascalmpl.interpreter.staticErrors.StaticError; import org.rascalmpl.interpreter.utils.RascalManifest; -import org.rascalmpl.interpreter.utils.Timing; import org.rascalmpl.parser.gtd.exception.ParseError; import org.rascalmpl.repl.ReplTextWriter; +import org.rascalmpl.repl.TerminalProgressBarMonitor; +import org.rascalmpl.repl.TerminalProgressBarMonitor2; import org.rascalmpl.uri.URIResolverRegistry; import org.rascalmpl.uri.URIUtil; import org.rascalmpl.values.ValueFactoryFactory; -import io.usethesource.vallang.ISourceLocation; import io.usethesource.vallang.IValue; import io.usethesource.vallang.IValueFactory; -import static org.rascalmpl.interpreter.utils.ReadEvalPrintDialogMessages.parseErrorMessage; -import static org.rascalmpl.interpreter.utils.ReadEvalPrintDialogMessages.staticErrorMessage; -import static org.rascalmpl.interpreter.utils.ReadEvalPrintDialogMessages.throwMessage; -import static org.rascalmpl.interpreter.utils.ReadEvalPrintDialogMessages.throwableMessage; - public class RascalShell2 { @@ -78,8 +72,6 @@ public static void main(String[] args) throws IOException { var term = TerminalBuilder.builder() .color(true) .encoding(StandardCharsets.UTF_8) - //.jni(true) - //.streams(System.in, System.out) .build(); var reader = LineReaderBuilder.builder() @@ -90,12 +82,14 @@ public static void main(String[] args) throws IOException { .build(); //IRascalMonitor monitor = IRascalMonitor.buildConsoleMonitor(System.in, System.out, true); - var monitor = new NullRascalMonitor() { - @Override - public void warning(String message, ISourceLocation src) { - reader.printAbove("[WARN] " + message); - } - }; + var monitor = new TerminalProgressBarMonitor2(term); + + // var monitor = new NullRascalMonitor() { + // @Override + // public void warning(String message, ISourceLocation src) { + // reader.printAbove("[WARN] " + message); + // } + // }; IDEServices services = new BasicIDEServices(term.writer(), monitor); @@ -103,8 +97,8 @@ public void warning(String message, ISourceLocation src) { GlobalEnvironment heap = new GlobalEnvironment(); ModuleEnvironment root = heap.addModule(new ModuleEnvironment(ModuleEnvironment.SHELL_MODULE, heap)); IValueFactory vf = ValueFactoryFactory.getValueFactory(); - Evaluator evaluator = new Evaluator(vf, new NullInputStream(), new FakeOutput(reader), new FakeOutput(reader), root, heap, monitor); - evaluator.overwritePrintStream(new FakePrintStream(reader, false), new FakePrintStream(reader, true)); + Evaluator evaluator = new Evaluator(vf, new NullInputStream(), OutputStream.nullOutputStream(), OutputStream.nullOutputStream(), root, heap, monitor); + evaluator.overwritePrintStream(monitor, new PrintWriter(monitor, true)); evaluator.addRascalSearchPathContributor(StandardLibraryContributor.getInstance()); URIResolverRegistry reg = URIResolverRegistry.getInstance(); From 08ffabda0944da129af3f509d378b073adaf8725 Mon Sep 17 00:00:00 2001 From: Davy Landman Date: Thu, 30 May 2024 16:21:29 +0200 Subject: [PATCH 036/191] Working on jline3 --- pom.xml | 5 + .../repl/TerminalProgressBarMonitor2.java | 199 ++++++++++++++++-- src/org/rascalmpl/shell/RascalShell2.java | 32 ++- 3 files changed, 206 insertions(+), 30 deletions(-) diff --git a/pom.xml b/pom.xml index d94ab9a0352..72d5503f652 100644 --- a/pom.xml +++ b/pom.xml @@ -501,6 +501,11 @@ jline-console ${jline.version} + + org.jline + jansi + ${jline.version} + org.yaml snakeyaml diff --git a/src/org/rascalmpl/repl/TerminalProgressBarMonitor2.java b/src/org/rascalmpl/repl/TerminalProgressBarMonitor2.java index 1e7f2bbf159..88f8c59f20f 100644 --- a/src/org/rascalmpl/repl/TerminalProgressBarMonitor2.java +++ b/src/org/rascalmpl/repl/TerminalProgressBarMonitor2.java @@ -1,19 +1,22 @@ package org.rascalmpl.repl; +import java.io.FilterOutputStream; import java.io.FilterWriter; import java.io.IOException; import java.io.InputStream; +import java.io.OutputStream; import java.io.PrintWriter; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.time.Duration; import java.time.Instant; +import java.util.ArrayList; +import java.util.Arrays; import java.util.LinkedList; import java.util.List; import org.jline.terminal.Terminal; import org.rascalmpl.debug.IRascalMonitor; - import io.usethesource.vallang.ISourceLocation; /** @@ -35,6 +38,19 @@ public class TerminalProgressBarMonitor2 extends PrintWriter implements IRascalM */ private List bars = new LinkedList<>(); + /** + * We also keep a list of currently unfinished lines (one for each thread). + * Since there are generally very few threads a simple list beats a hash-map in terms + * of memory allocation and possibly also lookup efficiency. + */ + private List unfinishedLines = new ArrayList<>(3); + + /** + * This writer is there to help with the encoding to what the terminal needs. It writes directly to the + * underlying stream. + */ + private final PrintWriter writer; + /** * The entire width in character columns of the current terminal. Resizes everytime when we start * the first job. @@ -53,18 +69,140 @@ public class TerminalProgressBarMonitor2 extends PrintWriter implements IRascalM */ private final Terminal tm; - private final PrintWriter writer; - @SuppressWarnings("resource") - public TerminalProgressBarMonitor2(Terminal term) { - super(term.writer()); - this.writer = term.writer(); + public TerminalProgressBarMonitor2(Terminal tm) { + super(tm.writer()); - this.tm = term; + this.tm = tm; + this.writer = tm.writer(); this.lineWidth = tm.getWidth(); - this.unicodeEnabled = term.encoding().contains(StandardCharsets.UTF_8); + this.unicodeEnabled = tm.encoding().contains(StandardCharsets.UTF_8); + } + + /** + * Use this for debugging terminal cursor movements, step by step. + */ + private static class AlwaysFlushAlwaysShowCursor extends FilterWriter { + + public AlwaysFlushAlwaysShowCursor(PrintWriter out) { + super(out); + } + + @Override + public void write(int c) throws IOException { + out.write(c); + out.write(ANSI.showCursor()); + out.flush(); + } + + @Override + public void write(char[] cbuf, int off, int len) throws IOException { + out.write(cbuf, off, len); + out.write(ANSI.showCursor()); + out.flush(); + } + + @Override + public void write(String str, int off, int len) throws IOException { + out.write(str, off, len); + out.write(ANSI.showCursor()); + out.flush(); + } + } + + private static class UnfinishedLine { + final long threadId; + private int curCapacity = 512; + private char[] buffer = new char[curCapacity]; + private int curEnd = 0; + + public UnfinishedLine() { + this.threadId = Thread.currentThread().getId(); + } + + /** + * Adding input combines previously unfinished sentences with possible + * new (unfinished) sentences. + * + * The resulting buffer nevers contain any newline character. + */ + private void store(char[] newInput, int offset, int len) { + if (len == 0) { + return; // fast exit + } + + // first ensure capacity of the array + if (curEnd + len >= curCapacity) { + curCapacity *= 2; + buffer = Arrays.copyOf(buffer, curCapacity); + } + + System.arraycopy(newInput, offset, buffer, curEnd, len); + curEnd += len; + } + + /** + * Main workhorse looks for newline characters in the new input. + * - if there are newlines, than whatever is in the buffer can be flushed. + * - all the characters up to the last new new line are flushed immediately. + * - all the new characters after the last newline are buffered. + */ + public void write(char[] n, int offset, int len, PrintWriter out) { + int lastNL = startOfLastLine(n, offset, len); + + if (lastNL == -1) { + store(n, offset, len); + } + else { + flush(out); + out.write(n, offset, lastNL + 1); + store(n, lastNL + 1, len - (lastNL + 1)); + } + } + + /** + * Main workhorse looks for newline characters in the new input. + * - if there are newlines, than whatever is in the buffer can be flushed. + * - all the characters up to the last new new line are flushed immediately. + * - all the new characters after the last newline are buffered. + */ + public void write(String s, int offset, int len, PrintWriter out) { + write(s.toCharArray(), offset, len, out); + } + + /** + * This empties the current buffer onto the stream, + * and resets the cursor. + */ + private void flush(PrintWriter out) { + if (curEnd != 0) { + out.write(buffer, 0, curEnd); + curEnd = 0; + } + } + + /** + * Prints whatever is the last line in the buffer, + * and adds a newline. + */ + public void flushLastLine(PrintWriter out) { + if (curEnd != 0) { + flush(out); + out.write('\n'); + } + } + + private int startOfLastLine(char[] buffer, int offset, int len) { + for (int i = offset + len - 1; i >= offset; i--) { + if (buffer[i] == '\n') { + return i; + } + } + + return -1; + } } /** @@ -192,7 +330,7 @@ else if (barWidth <= 3) { // we can print the clock for good measure + " " ; - writer.println("\r" + line); // note this puts us one line down + writer.println(line); // note this puts us one line down } private String threadLabel() { @@ -244,13 +382,12 @@ private void eraseBars() { */ private static class ANSI { - static String moveUp(int n) { return "\u001B[" + n + "F"; } public static String darkBackground() { - return "\u001B[48;5;242m"; + return "\u001B[48;5;248m"; } public static String noBackground() { @@ -258,7 +395,7 @@ public static String noBackground() { } public static String lightBackground() { - return "\u001B[48;5;249m"; + return "\u001B[48;5;250m"; } static String moveDown(int n) { @@ -304,6 +441,17 @@ private ProgressBar findBarByName(String name) { .filter(b -> b.threadId == Thread.currentThread().getId()) .filter(b -> b.name.equals(name)).findFirst().orElseGet(() -> null); } + + private UnfinishedLine findUnfinishedLine() { + return unfinishedLines.stream() + .filter(l -> l.threadId == Thread.currentThread().getId()) + .findAny() + .orElseGet(() -> { + UnfinishedLine l = new UnfinishedLine(); + unfinishedLines.add(l); + return l; + }); + } @Override public synchronized void jobStart(String name, int workShare, int totalWork) { @@ -389,30 +537,34 @@ public synchronized void warning(String message, ISourceLocation src) { } @Override - public synchronized void write(String str, int off, int len){ + public void write(String s, int off, int len) { if (!bars.isEmpty()) { eraseBars(); - super.write(str, off, len); + findUnfinishedLine().write(s, off, len, writer); printBars(); } else { - super.write(str, off, len); + writer.write(s, off, len); } } + /** + * Here we make sure the progress bars are gone just before + * someone wants to print in the console. When the printing + * is ready, we simply add our own progress bars again. + */ @Override - public void write(char[] cbuf, int off, int len) { + public synchronized void write(char[] cbuf, int off, int len) { if (!bars.isEmpty()) { eraseBars(); - super.write(cbuf, off, len); + findUnfinishedLine().write(cbuf, off, len, writer); printBars(); } else { - super.write(cbuf, off, len); + writer.write(cbuf, off, len); } } - /** * Here we make sure the progress bars are gone just before * someone wants to print in the console. When the printing @@ -422,11 +574,11 @@ public void write(char[] cbuf, int off, int len) { public synchronized void write(int b) { if (!bars.isEmpty()) { eraseBars(); - super.write(b); + findUnfinishedLine().write(new char[] { (char) b },0, 1, writer); printBars(); } else { - super.write(b); + writer.write(b); } } @@ -441,7 +593,10 @@ public synchronized void endAllJobs() { } bars.clear(); + for (UnfinishedLine l : unfinishedLines) { + l.flushLastLine(writer); + } writer.write(ANSI.showCursor()); writer.flush(); } -} +} \ No newline at end of file diff --git a/src/org/rascalmpl/shell/RascalShell2.java b/src/org/rascalmpl/shell/RascalShell2.java index 1b111a06ed6..a850b5759ab 100644 --- a/src/org/rascalmpl/shell/RascalShell2.java +++ b/src/org/rascalmpl/shell/RascalShell2.java @@ -21,6 +21,7 @@ import java.io.IOException; import java.io.OutputStream; import java.io.PrintWriter; +import java.io.StringWriter; import java.nio.ByteBuffer; import java.nio.CharBuffer; import java.nio.charset.CharsetDecoder; @@ -28,12 +29,12 @@ import java.nio.charset.StandardCharsets; import org.apache.commons.io.input.NullInputStream; +import org.jline.jansi.Ansi; import org.jline.reader.LineReader; import org.jline.reader.LineReaderBuilder; import org.jline.reader.impl.completer.StringsCompleter; import org.jline.reader.impl.history.DefaultHistory; import org.jline.terminal.TerminalBuilder; -import org.rascalmpl.debug.IRascalMonitor; import org.rascalmpl.exceptions.Throw; import org.rascalmpl.ideservices.BasicIDEServices; import org.rascalmpl.ideservices.IDEServices; @@ -48,14 +49,17 @@ import org.rascalmpl.interpreter.utils.RascalManifest; import org.rascalmpl.parser.gtd.exception.ParseError; import org.rascalmpl.repl.ReplTextWriter; -import org.rascalmpl.repl.TerminalProgressBarMonitor; import org.rascalmpl.repl.TerminalProgressBarMonitor2; import org.rascalmpl.uri.URIResolverRegistry; import org.rascalmpl.uri.URIUtil; +import org.rascalmpl.values.RascalValueFactory; import org.rascalmpl.values.ValueFactoryFactory; +import org.rascalmpl.values.parsetrees.TreeAdapter; +import io.usethesource.vallang.IConstructor; import io.usethesource.vallang.IValue; import io.usethesource.vallang.IValueFactory; +import io.usethesource.vallang.type.Type; public class RascalShell2 { @@ -105,22 +109,34 @@ public static void main(String[] args) throws IOException { var indentedPrettyPrinter = new ReplTextWriter(true); + while (true) { - String line = reader.readLine("rascal> "); + String line = reader.readLine(Ansi.ansi().reset().bold().toString() + "rascal> " + Ansi.ansi().boldOff().toString()); try { - Result value; + Result result; synchronized(evaluator) { - value = evaluator.eval(monitor, line, URIUtil.rootLocation("prompt")); + result = evaluator.eval(monitor, line, URIUtil.rootLocation("prompt")); evaluator.endAllJobs(); } - if (value.isVoid()) { - reader.printAbove("ok \n"); + if (result.isVoid()) { + monitor.println("ok"); } else { - reader.printAbove("Result: " + value.toString(1024)); + IValue value = result.getValue(); + Type type = result.getStaticType(); + + if (type.isAbstractData() && type.isStrictSubtypeOf(RascalValueFactory.Tree) && !type.isBottom()) { + monitor.write("(" + type.toString() +") `"); + TreeAdapter.yield((IConstructor)value, true, monitor); + monitor.write("`"); + } + else { + indentedPrettyPrinter.write(value, monitor); + } + monitor.println(); } } catch (InterruptException ie) { From b02f63f5675c9c10c9aadb604aca5c61a2b03b2e Mon Sep 17 00:00:00 2001 From: Davy Landman Date: Tue, 15 Oct 2024 17:35:09 +0200 Subject: [PATCH 037/191] Cleaning up pom to drop jline2 related dependencies --- pom.xml | 39 ++++++++++++--------------------------- 1 file changed, 12 insertions(+), 27 deletions(-) diff --git a/pom.xml b/pom.xml index 72d5503f652..efc23fa0b0d 100644 --- a/pom.xml +++ b/pom.xml @@ -33,7 +33,7 @@ 2 11 0.28.4 - 3.26.1 + 3.27.0 @@ -333,10 +333,6 @@ org.fusesource.jansi.internal.* - - jline - org.rascalmpl.jline - @@ -465,45 +461,34 @@ gson 2.10.1 - - jline - jline - 2.14.6 - provided - - - org.jline - jline-terminal-jni - ${jline.version} - - - org.jline - jline-terminal-jna - ${jline.version} - - + org.jline jline-reader ${jline.version} - + org.jline jline-terminal ${jline.version} - + + org.jline + jline-terminal-jni + ${jline.version} + + org.jline jline-style ${jline.version} - + org.jline jline-console ${jline.version} - + org.jline - jansi + jansi-core ${jline.version} From 57b43d18dfdb46e6fcab1af90ac02e8c4ee7bc5c Mon Sep 17 00:00:00 2001 From: Davy Landman Date: Tue, 15 Oct 2024 17:35:32 +0200 Subject: [PATCH 038/191] Removing InputStream and OutputStreams from the evaluator --- src/org/rascalmpl/checker/StaticChecker.java | 125 ------------------ src/org/rascalmpl/interpreter/Evaluator.java | 82 ++++-------- .../interpreter/IEvaluatorContext.java | 12 +- .../rascalmpl/interpreter/TestEvaluator.java | 8 +- .../interpreter/result/AbstractFunction.java | 12 +- .../interpreter/result/JavaMethod.java | 2 +- .../interpreter/utils/JavaBridge.java | 11 +- .../rascalmpl/interpreter/utils/Profiler.java | 4 +- src/org/rascalmpl/library/util/Eval.java | 14 +- .../rascalmpl/library/util/Reflective.java | 17 ++- src/org/rascalmpl/library/util/TermREPL.java | 33 +++-- src/org/rascalmpl/parser/ParserGenerator.java | 8 +- src/org/rascalmpl/repl/ILanguageProtocol.java | 5 +- .../rascalmpl/repl/RascalInterpreterREPL.java | 23 ++-- .../repl/TerminalProgressBarMonitor.java | 2 +- .../rascalmpl/semantics/dynamic/Import.java | 4 +- .../semantics/dynamic/ShellCommand.java | 6 +- src/org/rascalmpl/shell/ModuleRunner.java | 4 +- src/org/rascalmpl/shell/RascalShell2.java | 18 +-- ...ascalJUnitParallelRecursiveTestRunner.java | 5 +- .../infrastructure/RascalJUnitTestRunner.java | 4 +- .../test/infrastructure/TestFramework.java | 8 +- test/org/rascalmpl/MatchFingerprintTest.java | 3 +- .../ParallelEvaluatorsTests.java | 2 +- 24 files changed, 133 insertions(+), 279 deletions(-) delete mode 100644 src/org/rascalmpl/checker/StaticChecker.java diff --git a/src/org/rascalmpl/checker/StaticChecker.java b/src/org/rascalmpl/checker/StaticChecker.java deleted file mode 100644 index acb755fa842..00000000000 --- a/src/org/rascalmpl/checker/StaticChecker.java +++ /dev/null @@ -1,125 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2009-2013 CWI - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * * Jurgen J. Vinju - Jurgen.Vinju@cwi.nl - CWI - * * Mark Hills - Mark.Hills@cwi.nl (CWI) - * * Arnold Lankamp - Arnold.Lankamp@cwi.nl -*******************************************************************************/ -package org.rascalmpl.checker; - -import java.io.OutputStream; -import java.util.HashMap; -import java.util.Map; - -import org.rascalmpl.debug.IRascalMonitor; -import org.rascalmpl.exceptions.ImplementationError; -import org.rascalmpl.interpreter.Configuration; -import org.rascalmpl.interpreter.Evaluator; -import org.rascalmpl.interpreter.env.GlobalEnvironment; -import org.rascalmpl.interpreter.env.ModuleEnvironment; -import org.rascalmpl.interpreter.load.StandardLibraryContributor; -import org.rascalmpl.parser.gtd.exception.ParseError; -import org.rascalmpl.uri.URIUtil; -import org.rascalmpl.values.ValueFactoryFactory; -import org.rascalmpl.values.parsetrees.ITree; - -import io.usethesource.vallang.ISourceLocation; -import io.usethesource.vallang.IValue; -import io.usethesource.vallang.IValueFactory; -import io.usethesource.vallang.type.Type; -import io.usethesource.vallang.type.TypeStore; - -public class StaticChecker { - private final Evaluator eval; - public static final String TYPECHECKER = "typecheckTree"; - private boolean checkerEnabled; - private boolean initialized; - private boolean loaded; - private Type pathConfigConstructor = null; - - public StaticChecker(OutputStream stderr, OutputStream stdout) { - GlobalEnvironment heap = new GlobalEnvironment(); - ModuleEnvironment root = heap.addModule(new ModuleEnvironment("$staticchecker$", heap)); - eval = new Evaluator(ValueFactoryFactory.getValueFactory(), System.in, stderr, stdout, root, heap, IRascalMonitor.buildConsoleMonitor(System.in, System.out)); - eval.addRascalSearchPathContributor(StandardLibraryContributor.getInstance()); - checkerEnabled = false; - initialized = false; - loaded = false; - } - - private IValue eval(IRascalMonitor monitor, String cmd) { - try { - return eval.eval(monitor, cmd, URIUtil.rootLocation("checker")).getValue(); - } catch (ParseError pe) { - throw new ImplementationError("syntax error in static checker modules", pe); - } - } - - public synchronized void load(IRascalMonitor monitor) { - eval(monitor, "import lang::rascal::types::CheckTypes;"); - eval(monitor, "import util::Reflective;"); - TypeStore ts = eval.getHeap().getModule("util::Reflective").getStore(); - pathConfigConstructor = ts.lookupConstructor(ts.lookupAbstractDataType("PathConfig"), "pathConfig").iterator().next(); - loaded = true; - } - - public void init() { - initialized = true; - } - - public Configuration getConfiguration() { - return eval.getConfiguration(); - } - - public boolean isInitialized() { - return initialized; - } - - public synchronized ITree checkModule(IRascalMonitor monitor, ISourceLocation module) { - if (checkerEnabled) { - return (ITree) eval.call(monitor, "check", module, getPathConfig()); - } - return null; - } - - private IValue getPathConfig() { - assert pathConfigConstructor != null; - IValueFactory vf = ValueFactoryFactory.getValueFactory(); - Map kwArgs = new HashMap<>(); - kwArgs.put("srcPath", vf.list(eval.getRascalResolver().collect().toArray(new IValue[0]))); - // default args for the rest - return vf.constructor(pathConfigConstructor, new IValue[0], kwArgs); - } - - public synchronized void disableChecker() { - checkerEnabled = false; - } - - public synchronized void enableChecker(IRascalMonitor monitor) { - if (!loaded) { - load(monitor); - } - checkerEnabled = true; - } - - public boolean isCheckerEnabled() { - return checkerEnabled; - } - - public void addRascalSearchPath(ISourceLocation uri) { - eval.addRascalSearchPath(uri); - } - - public void addClassLoader(ClassLoader classLoader) { - eval.addClassLoader(classLoader); - } - - public Evaluator getEvaluator() { - return eval; - } -} diff --git a/src/org/rascalmpl/interpreter/Evaluator.java b/src/org/rascalmpl/interpreter/Evaluator.java index ea38006cf6c..2b397e1034e 100755 --- a/src/org/rascalmpl/interpreter/Evaluator.java +++ b/src/org/rascalmpl/interpreter/Evaluator.java @@ -22,7 +22,6 @@ import static org.rascalmpl.semantics.dynamic.Import.parseFragments; import java.io.IOException; -import java.io.InputStream; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; @@ -195,17 +194,13 @@ public void decCallNesting() { private final List classLoaders; // sharable if frozen private final ModuleEnvironment rootScope; // sharable if frozen - private final OutputStream defStderr; - private final OutputStream defStdout; private final PrintWriter defOutWriter; private final PrintWriter defErrWriter; - private final InputStream defInput; + private final Reader defInput; - private OutputStream curStderr = null; - private OutputStream curStdout = null; private PrintWriter curOutWriter = null; private PrintWriter curErrWriter = null; - private InputStream curInput = null; + private Reader curInput = null; /** * Probably not sharable @@ -232,26 +227,26 @@ public void decCallNesting() { private static final Object dummy = new Object(); /** - * Promotes the monitor to the outputstream automatically if so required. + * Promotes the monitor to the PrintWriter automatically if so required. */ - public Evaluator(IValueFactory f, InputStream input, OutputStream stderr, OutputStream stdout, IRascalMonitor monitor, ModuleEnvironment scope, GlobalEnvironment heap) { - this(f, input, stderr, monitor instanceof OutputStream ? (OutputStream) monitor : stdout, scope, heap, new ArrayList(Collections.singleton(Evaluator.class.getClassLoader())), new RascalSearchPath()); + public Evaluator(IValueFactory f, Reader input, PrintWriter stderr, PrintWriter stdout, IRascalMonitor monitor, ModuleEnvironment scope, GlobalEnvironment heap) { + this(f, input, stderr, monitor instanceof PrintWriter ? (PrintWriter) monitor : stdout, scope, heap, new ArrayList(Collections.singleton(Evaluator.class.getClassLoader())), new RascalSearchPath()); } /** * If your monitor should wrap stdout (like TerminalProgressBarMonitor) then you can use this constructor. */ - public Evaluator(IValueFactory f, InputStream input, OutputStream stderr, M monitor, ModuleEnvironment scope, GlobalEnvironment heap) { + public Evaluator(IValueFactory f, Reader input, PrintWriter stderr, M monitor, ModuleEnvironment scope, GlobalEnvironment heap) { this(f, input, stderr, monitor, scope, heap, new ArrayList(Collections.singleton(Evaluator.class.getClassLoader())), new RascalSearchPath()); setMonitor(monitor); } - public Evaluator(IValueFactory f, InputStream input, OutputStream stderr, OutputStream stdout, ModuleEnvironment scope, GlobalEnvironment heap, IRascalMonitor monitor) { - this(f, input, stderr, monitor instanceof OutputStream ? (OutputStream) monitor : stdout, scope, heap, new ArrayList(Collections.singleton(Evaluator.class.getClassLoader())), new RascalSearchPath()); + public Evaluator(IValueFactory f, Reader input, PrintWriter stderr, PrintWriter stdout, ModuleEnvironment scope, GlobalEnvironment heap, IRascalMonitor monitor) { + this(f, input, stderr, monitor instanceof PrintWriter ? (PrintWriter) monitor : stdout, scope, heap, new ArrayList(Collections.singleton(Evaluator.class.getClassLoader())), new RascalSearchPath()); setMonitor(monitor); } - public Evaluator(IValueFactory vf, InputStream input, OutputStream stderr, OutputStream stdout, ModuleEnvironment scope, GlobalEnvironment heap, List classLoaders, RascalSearchPath rascalPathResolver) { + public Evaluator(IValueFactory vf, Reader input, PrintWriter stderr, PrintWriter stdout, ModuleEnvironment scope, GlobalEnvironment heap, List classLoaders, RascalSearchPath rascalPathResolver) { super(); this.vf = new RascalFunctionValueFactory(this); @@ -265,10 +260,8 @@ public Evaluator(IValueFactory vf, InputStream input, OutputStream stderr, Outpu this.rascalPathResolver = rascalPathResolver; this.resolverRegistry = rascalPathResolver.getRegistry(); this.defInput = input; - this.defStderr = stderr; - this.defStdout = stdout; - this.defErrWriter = wrapWriter(stderr, true); - this.defOutWriter = wrapWriter(stdout, false); + this.defErrWriter = stderr; + this.defOutWriter = stdout; this.constructorDeclaredListeners = new HashMap(); this.suspendTriggerListeners = new CopyOnWriteArrayList(); @@ -285,10 +278,6 @@ public Evaluator(IValueFactory vf, InputStream input, OutputStream stderr, Outpu setEventTrigger(AbstractInterpreterEventTrigger.newNullEventTrigger()); } - private static PrintWriter wrapWriter(OutputStream out, boolean autoFlush) { - return new PrintWriter(new OutputStreamWriter(out, StandardCharsets.UTF_8), autoFlush); - } - private Evaluator(Evaluator source, ModuleEnvironment scope) { super(); @@ -307,8 +296,6 @@ private Evaluator(Evaluator source, ModuleEnvironment scope) { this.javaBridge = new JavaBridge(classLoaders, vf, config); this.rascalPathResolver = source.rascalPathResolver; this.resolverRegistry = source.resolverRegistry; - this.defStderr = source.defStderr; - this.defStdout = source.defStdout; this.defInput = source.defInput; this.defErrWriter = source.defErrWriter; this.defOutWriter = source.defOutWriter; @@ -398,29 +385,20 @@ public List getClassLoaders() { return Collections.unmodifiableList(classLoaders); } - @Override + @Override public ModuleEnvironment __getRootScope() { return rootScope; } - @Override - public OutputStream getStdOut() { - return curStdout == null ? defStdout : curStdout; - } - @Override - public PrintWriter getOutPrinter() { - return curOutWriter == null ? defOutWriter : curOutWriter; - } - - @Override - public PrintWriter getErrorPrinter() { - return curErrWriter == null ? defErrWriter : curErrWriter; + public PrintWriter getStdOut() { + return curOutWriter == null ? defOutWriter : curOutWriter; } + @Override - public InputStream getInput() { + public Reader getInput() { return curInput == null ? defInput : curInput; } @@ -469,9 +447,9 @@ public boolean isInterrupted() { return interrupt; } - @Override - public OutputStream getStdErr() { - return curStderr == null ? defStderr : curStderr; + @Override + public PrintWriter getStdErr() { + return curErrWriter == null ? defErrWriter : curErrWriter; } public void setTestResultListener(ITestResultListener l) { @@ -629,7 +607,7 @@ else if (main.hasKeywordArguments() && main.getArity() == 0) { } } catch (MatchFailed e) { - getOutPrinter().println("Main function should either have a list[str] as a single parameter like so: \'void main(list[str] args)\', or a set of keyword parameters with defaults like so: \'void main(bool myOption=false, str input=\"\")\'"); + getStdOut().println("Main function should either have a list[str] as a single parameter like so: \'void main(list[str] args)\', or a set of keyword parameters with defaults like so: \'void main(bool myOption=false, str input=\"\")\'"); return null; } finally { @@ -831,7 +809,7 @@ public ParserGenerator getParserGenerator() { synchronized (self) { if (parserGenerator == null) { - parserGenerator = new ParserGenerator(getMonitor(), (monitor instanceof TerminalProgressBarMonitor) ? (OutputStream) getMonitor() : getStdErr(), classLoaders, getValueFactory(), config); + parserGenerator = new ParserGenerator(getMonitor(), (monitor instanceof TerminalProgressBarMonitor) ? (PrintWriter) getMonitor() : getStdErr(), classLoaders, getValueFactory(), config); } } } @@ -1220,13 +1198,13 @@ public Set reloadModules(IRascalMonitor monitor, Set names, ISou } private void reloadModules(IRascalMonitor monitor, Set names, ISourceLocation errorLocation, boolean recurseToExtending, Set affectedModules) { - SaveWarningsMonitor wrapped = new SaveWarningsMonitor(monitor, getErrorPrinter()); + SaveWarningsMonitor wrapped = new SaveWarningsMonitor(monitor, getStdErr()); IRascalMonitor old = setMonitor(wrapped); try { Set onHeap = new HashSet<>(); Set extendingModules = new HashSet<>(); - PrintWriter errStream = getErrorPrinter(); + PrintWriter errStream = getStdErr(); for (String mod : names) { if (heap.existsModule(mod)) { @@ -1513,7 +1491,7 @@ public boolean runTests(IRascalMonitor monitor) { IRascalMonitor old = setMonitor(monitor); try { final boolean[] allOk = new boolean[] { true }; - final ITestResultListener l = testReporter != null ? testReporter : new DefaultTestResultListener(getOutPrinter()); + final ITestResultListener l = testReporter != null ? testReporter : new DefaultTestResultListener(getStdErr()); new TestEvaluator(this, new ITestResultListener() { @@ -1578,17 +1556,13 @@ public IRascalMonitor getMonitor() { return new NullRascalMonitor(); } - public void overrideDefaultWriters(InputStream newInput, OutputStream newStdOut, OutputStream newStdErr) { - this.curStdout = newStdOut; - this.curStderr = newStdErr; + public void overrideDefaultWriters(Reader newInput, PrintWriter newStdOut, PrintWriter newStdErr) { this.curInput = newInput; - this.curErrWriter = wrapWriter(newStdErr, true); - this.curOutWriter = wrapWriter(newStdOut, false); + this.curErrWriter = newStdErr; + this.curOutWriter = newStdOut; } public void revertToDefaultWriters() { - this.curStderr = null; - this.curStdout = null; this.curInput = null; if (curOutWriter != null) { curOutWriter.flush(); @@ -1985,7 +1959,7 @@ public void showMessage(IConstructor message) { } - public void overwritePrintStream(PrintWriter outWriter, PrintWriter errWriter) { + public void overwritePrintWriter(PrintWriter outWriter, PrintWriter errWriter) { this.curOutWriter = outWriter; this.curErrWriter = errWriter; } diff --git a/src/org/rascalmpl/interpreter/IEvaluatorContext.java b/src/org/rascalmpl/interpreter/IEvaluatorContext.java index 49db817c31b..6ffa2197096 100644 --- a/src/org/rascalmpl/interpreter/IEvaluatorContext.java +++ b/src/org/rascalmpl/interpreter/IEvaluatorContext.java @@ -17,9 +17,8 @@ *******************************************************************************/ package org.rascalmpl.interpreter; -import java.io.InputStream; -import java.io.OutputStream; import java.io.PrintWriter; +import java.io.Reader; import java.util.Collection; import java.util.Stack; @@ -41,13 +40,10 @@ public interface IEvaluatorContext extends IRascalMonitor { public StackTrace getStackTrace(); /** for standard IO */ - public PrintWriter getOutPrinter(); - public PrintWriter getErrorPrinter(); - - public OutputStream getStdOut(); - public OutputStream getStdErr(); + public PrintWriter getStdOut(); + public PrintWriter getStdErr(); - public InputStream getInput(); + public Reader getInput(); /** for "internal use" */ public IEvaluator> getEvaluator(); diff --git a/src/org/rascalmpl/interpreter/TestEvaluator.java b/src/org/rascalmpl/interpreter/TestEvaluator.java index 726921716c2..cab11b6268f 100644 --- a/src/org/rascalmpl/interpreter/TestEvaluator.java +++ b/src/org/rascalmpl/interpreter/TestEvaluator.java @@ -130,8 +130,8 @@ private void runTests(ModuleEnvironment env, List tests) { } }, env.getRoot().getStore(), tries, maxDepth, maxWidth); - eval.getOutPrinter().flush(); - eval.getErrorPrinter().flush(); + eval.getStdOut().flush(); + eval.getStdErr().flush(); if (!result.succeeded()) { StringWriter sw = new StringWriter(); @@ -147,8 +147,8 @@ private void runTests(ModuleEnvironment env, List tests) { testResultListener.report(false, test.getName(), test.getAst().getLocation(), e.getMessage(), e); } - eval.getOutPrinter().flush(); - eval.getErrorPrinter().flush(); + eval.getStdOut().flush(); + eval.getStdErr().flush(); } testResultListener.done(); diff --git a/src/org/rascalmpl/interpreter/result/AbstractFunction.java b/src/org/rascalmpl/interpreter/result/AbstractFunction.java index 326a1a19725..e458f680a10 100644 --- a/src/org/rascalmpl/interpreter/result/AbstractFunction.java +++ b/src/org/rascalmpl/interpreter/result/AbstractFunction.java @@ -293,8 +293,8 @@ protected void printStartTrace(IValue[] actuals) { b.append("call >"); printNesting(b); printHeader(b, actuals); - eval.getOutPrinter().println(b.toString()); - eval.getOutPrinter().flush(); + eval.getStdOut().println(b.toString()); + eval.getStdOut().flush(); eval.incCallNesting(); } @@ -318,8 +318,8 @@ protected void printExcept(Throwable e) { b.append(": "); String msg = e.getMessage(); b.append(msg == null ? e.getClass().getSimpleName() : msg); - eval.getOutPrinter().println(b.toString()); - eval.getOutPrinter().flush(); + eval.getStdOut().println(b.toString()); + eval.getStdOut().flush(); } } @@ -336,8 +336,8 @@ protected void printEndTrace(IValue result) { b.append(strval(result)); } - eval.getOutPrinter().println(b); - eval.getOutPrinter().flush(); + eval.getStdOut().println(b); + eval.getStdOut().flush(); } } diff --git a/src/org/rascalmpl/interpreter/result/JavaMethod.java b/src/org/rascalmpl/interpreter/result/JavaMethod.java index 10530bda752..1ce4fd9c8c6 100644 --- a/src/org/rascalmpl/interpreter/result/JavaMethod.java +++ b/src/org/rascalmpl/interpreter/result/JavaMethod.java @@ -91,7 +91,7 @@ private JavaMethod(IEvaluator> eval, Type staticType, Type dynami super(func, eval, staticType, dynamicType, getFormals(func), Names.name(func.getSignature().getName()), isDefault, isTest, varargs, env); this.javaBridge = javaBridge; this.hasReflectiveAccess = hasReflectiveAccess(func); - this.instance = javaBridge.getJavaClassInstance(func, eval.getMonitor(), env.getStore(), eval.getOutPrinter(), eval.getErrorPrinter(), eval.getStdOut(), eval.getStdErr(), eval.getInput(), eval); + this.instance = javaBridge.getJavaClassInstance(func, eval.getMonitor(), env.getStore(), eval.getStdOut(), eval.getStdErr(), eval.getInput(), eval); this.method = javaBridge.lookupJavaMethod(eval, func, env, hasReflectiveAccess); } diff --git a/src/org/rascalmpl/interpreter/utils/JavaBridge.java b/src/org/rascalmpl/interpreter/utils/JavaBridge.java index 201703578f1..bfe2049dd53 100644 --- a/src/org/rascalmpl/interpreter/utils/JavaBridge.java +++ b/src/org/rascalmpl/interpreter/utils/JavaBridge.java @@ -19,6 +19,7 @@ import java.io.InputStream; import java.io.OutputStream; import java.io.PrintWriter; +import java.io.Reader; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; @@ -375,14 +376,11 @@ public Class visitFunction(Type type) throws RuntimeException { } } - public synchronized Object getJavaClassInstance(FunctionDeclaration func, IRascalMonitor monitor, TypeStore store, PrintWriter out, PrintWriter err, OutputStream rawOut, OutputStream rawErr, InputStream in, IEvaluatorContext ctx) { + public synchronized Object getJavaClassInstance(FunctionDeclaration func, IRascalMonitor monitor, TypeStore store, PrintWriter out, PrintWriter err, Reader in, IEvaluatorContext ctx) { String className = getClassName(func); PrintWriter[] outputs = new PrintWriter[] { out, err }; int writers = 0; - - OutputStream[] rawOutputs = new OutputStream[] { rawOut, rawErr }; - int rawWriters = 0; try { for(ClassLoader loader : loaders){ @@ -425,10 +423,7 @@ else if (formals[i].isAssignableFrom(TypeFactory.class)) { else if (formals[i].isAssignableFrom(PrintWriter.class)) { args[i] = outputs[writers++ % 2]; } - else if (formals[i].isAssignableFrom(OutputStream.class)) { - args[i] = rawOutputs[rawWriters++ %2]; - } - else if (formals[i].isAssignableFrom(InputStream.class)) { + else if (formals[i].isAssignableFrom(Reader.class)) { args[i] = in; } else if (formals[i].isAssignableFrom(IRascalMonitor.class)) { diff --git a/src/org/rascalmpl/interpreter/utils/Profiler.java b/src/org/rascalmpl/interpreter/utils/Profiler.java index 40eba860655..0be9d9c7323 100644 --- a/src/org/rascalmpl/interpreter/utils/Profiler.java +++ b/src/org/rascalmpl/interpreter/utils/Profiler.java @@ -160,7 +160,7 @@ public IList getProfileData(){ public void report() { report("FRAMES", frame); - eval.getOutPrinter().println(); + eval.getStdOut().println(); report("ASTS", ast); } @@ -178,7 +178,7 @@ private void report(String title, Map data) { nTicks += e.getValue().getTicks(); } - PrintWriter out = eval.getOutPrinter(); + PrintWriter out = eval.getStdOut(); String nameFormat = "%" + maxName + "s"; out.printf(title + " PROFILE: %d data points, %d ticks, tick = %d milliSecs\n", ast.size(), nTicks, resolution); out.printf(nameFormat + "%8s%9s %s\n", " Scope", "Ticks", "%", "Source"); diff --git a/src/org/rascalmpl/library/util/Eval.java b/src/org/rascalmpl/library/util/Eval.java index 6da394f8621..dd2835f8f46 100644 --- a/src/org/rascalmpl/library/util/Eval.java +++ b/src/org/rascalmpl/library/util/Eval.java @@ -16,8 +16,8 @@ import java.io.File; import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; +import java.io.PrintWriter; +import java.io.Reader; import java.net.URISyntaxException; import java.nio.file.Paths; import java.util.HashMap; @@ -80,12 +80,12 @@ public class Eval { private final Type execConstructor; /* the following four fields are inherited by the configuration of nested evaluators */ - private final OutputStream stderr; - private final OutputStream stdout; - private final InputStream input; + private final PrintWriter stderr; + private final PrintWriter stdout; + private final Reader input; private final IDEServices services; - public Eval(IRascalValueFactory values, OutputStream out, OutputStream err, InputStream in, ClassLoader loader, IDEServices services, TypeStore ts) { + public Eval(IRascalValueFactory values, PrintWriter out, PrintWriter err, Reader in, ClassLoader loader, IDEServices services, TypeStore ts) { super(); this.values = values; this.tr = new TypeReifier(values); @@ -219,7 +219,7 @@ private static class RascalRuntime { private final Evaluator eval; private int duration = -1; - public RascalRuntime(PathConfig pcfg, InputStream input, OutputStream stderr, OutputStream stdout, IDEServices services) throws IOException, URISyntaxException{ + public RascalRuntime(PathConfig pcfg, Reader input, PrintWriter stderr, PrintWriter stdout, IDEServices services) throws IOException, URISyntaxException{ GlobalEnvironment heap = new GlobalEnvironment(); ModuleEnvironment root = heap.addModule(new ModuleEnvironment(ModuleEnvironment.SHELL_MODULE, heap)); IValueFactory vf = ValueFactoryFactory.getValueFactory(); diff --git a/src/org/rascalmpl/library/util/Reflective.java b/src/org/rascalmpl/library/util/Reflective.java index 44bb23ce3b1..371d60474bc 100644 --- a/src/org/rascalmpl/library/util/Reflective.java +++ b/src/org/rascalmpl/library/util/Reflective.java @@ -99,21 +99,23 @@ public IConstructor getProjectPathConfig(ISourceLocation projectRoot, IConstruct } } - IEvaluator getDefaultEvaluator(OutputStream stdout, OutputStream stderr) { + IEvaluator getDefaultEvaluator(PrintWriter stdout, PrintWriter stderr) { GlobalEnvironment heap = new GlobalEnvironment(); ModuleEnvironment root = heap.addModule(new ModuleEnvironment(ModuleEnvironment.SHELL_MODULE, heap)); IValueFactory vf = ValueFactoryFactory.getValueFactory(); - Evaluator evaluator = new Evaluator(vf, System.in, stderr, stdout, root, heap, monitor); + Evaluator evaluator = new Evaluator(vf, Reader.nullReader(), stderr, stdout, root, heap, monitor); evaluator.addRascalSearchPathContributor(StandardLibraryContributor.getInstance()); return evaluator; } public IList evalCommands(IList commands, ISourceLocation loc) { - OutputStream out = new ByteArrayOutputStream(); - OutputStream err = new ByteArrayOutputStream(); + StringWriter out = new StringWriter(); + StringWriter err = new StringWriter(); + PrintWriter outStream = new PrintWriter(out); + PrintWriter errStream = new PrintWriter(err); IListWriter result = values.listWriter(); - IEvaluator evaluator = getDefaultEvaluator(out, err); + IEvaluator evaluator = getDefaultEvaluator(outStream, errStream); int outOffset = 0; int errOffset = 0; @@ -125,11 +127,16 @@ public IList evalCommands(IList commands, ISourceLocation loc) { x = evaluator.eval(evaluator.getMonitor(), ((IString)v).getValue(), loc); } catch (Throwable e) { + errStream.flush(); errOut = err.toString().substring(errOffset); errOffset += errOut.length(); errOut += e.getMessage(); exc = true; } + finally { + outStream.flush(); + errStream.flush(); + } String output = out.toString().substring(outOffset); outOffset += output.length(); if (!exc) { diff --git a/src/org/rascalmpl/library/util/TermREPL.java b/src/org/rascalmpl/library/util/TermREPL.java index f149bb36340..d6728583314 100644 --- a/src/org/rascalmpl/library/util/TermREPL.java +++ b/src/org/rascalmpl/library/util/TermREPL.java @@ -6,6 +6,8 @@ import java.io.InputStream; import java.io.OutputStream; import java.io.OutputStreamWriter; +import java.io.PrintWriter; +import java.io.Reader; import java.io.UnsupportedEncodingException; import java.nio.charset.Charset; import java.util.ArrayList; @@ -13,6 +15,7 @@ import java.util.Map; import java.util.function.Function; + import org.rascalmpl.exceptions.RuntimeExceptionFactory; import org.rascalmpl.ideservices.IDEServices; import org.rascalmpl.interpreter.Evaluator; @@ -42,17 +45,16 @@ import io.usethesource.vallang.IWithKeywordParameters; import io.usethesource.vallang.type.Type; import io.usethesource.vallang.type.TypeFactory; -import jline.TerminalFactory; public class TermREPL { private final IRascalValueFactory vf; private ILanguageProtocol lang; - private final OutputStream out; - private final OutputStream err; - private final InputStream in; + private final PrintWriter out; + private final PrintWriter err; + private final Reader in; - public TermREPL(IRascalValueFactory vf, OutputStream out, OutputStream err, InputStream in) { + public TermREPL(IRascalValueFactory vf, PrintWriter out, PrintWriter err, Reader in) { this.vf = vf; this.out = out; this.err = err; @@ -94,9 +96,9 @@ public ITuple newREPL(IConstructor repl, IString title, IString welcome, IString public static class TheREPL implements ILanguageProtocol { private final REPLContentServerManager contentManager = new REPLContentServerManager(); private final TypeFactory tf = TypeFactory.getInstance(); - private OutputStream stdout; - private OutputStream stderr; - private InputStream input; + private PrintWriter stdout; + private PrintWriter stderr; + private Reader input; private String currentPrompt; private String quit; private final AbstractFunction handler; @@ -105,7 +107,7 @@ public static class TheREPL implements ILanguageProtocol { private final AbstractFunction stacktrace; public TheREPL(IValueFactory vf, IString title, IString welcome, IString prompt, IString quit, ISourceLocation history, - IFunction handler, IFunction completor, IValue stacktrace, InputStream input, OutputStream stderr, OutputStream stdout) { + IFunction handler, IFunction completor, IValue stacktrace, Reader input, PrintWriter stderr, PrintWriter stdout) { this.vf = vf; this.input = input; this.stderr = stderr; @@ -145,7 +147,7 @@ public void stackTraceRequested() { } @Override - public void initialize(InputStream input, OutputStream stdout, OutputStream stderr, IDEServices services) { + public void initialize(Reader input, PrintWriter stdout, PrintWriter stderr, IDEServices services) { this.stdout = stdout; this.stderr = stderr; this.input = input; @@ -293,14 +295,9 @@ private IValue call(IFunction f, Type[] types, IValue[] args) { return f.call(args); } finally { - try { - stdout.flush(); - stderr.flush(); - eval.revertToDefaultWriters(); - } - catch (IOException e) { - // ignore - } + stdout.flush(); + stderr.flush(); + eval.revertToDefaultWriters(); } } } diff --git a/src/org/rascalmpl/parser/ParserGenerator.java b/src/org/rascalmpl/parser/ParserGenerator.java index 19b55ae06bb..514f917dcd1 100644 --- a/src/org/rascalmpl/parser/ParserGenerator.java +++ b/src/org/rascalmpl/parser/ParserGenerator.java @@ -17,6 +17,8 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; +import java.io.PrintWriter; +import java.io.Reader; import java.util.List; import org.rascalmpl.debug.IRascalMonitor; @@ -52,10 +54,10 @@ public class ParserGenerator { private static final String packageName = "org.rascalmpl.java.parser.object"; private static final boolean debug = false; - public ParserGenerator(IRascalMonitor monitor, OutputStream out, List loaders, IValueFactory factory, Configuration config) { + public ParserGenerator(IRascalMonitor monitor, PrintWriter out, List loaders, IValueFactory factory, Configuration config) { GlobalEnvironment heap = new GlobalEnvironment(); ModuleEnvironment scope = new ModuleEnvironment("$parsergenerator$", heap); - this.evaluator = new Evaluator(ValueFactoryFactory.getValueFactory(), System.in, out, out, scope, heap, monitor); + this.evaluator = new Evaluator(ValueFactoryFactory.getValueFactory(), Reader.nullReader(), out, out, scope, heap, monitor); this.evaluator.getConfiguration().setRascalJavaClassPathProperty(config.getRascalJavaClassPathProperty()); this.evaluator.getConfiguration().setGeneratorProfiling(config.getGeneratorProfilingProperty()); evaluator.addRascalSearchPathContributor(StandardLibraryContributor.getInstance()); @@ -200,7 +202,7 @@ public Class> getNewParser(IRascalMon finally { if (profiler != null) { profiler.pleaseStop(); - evaluator.getOutPrinter().println("PROFILE:"); + evaluator.getStdOut().println("PROFILE:"); profiler.report(); profiler = null; } diff --git a/src/org/rascalmpl/repl/ILanguageProtocol.java b/src/org/rascalmpl/repl/ILanguageProtocol.java index 9a32ca88762..9da826d0389 100755 --- a/src/org/rascalmpl/repl/ILanguageProtocol.java +++ b/src/org/rascalmpl/repl/ILanguageProtocol.java @@ -24,7 +24,8 @@ package org.rascalmpl.repl; import java.io.InputStream; -import java.io.OutputStream; +import java.io.PrintWriter; +import java.io.Reader; import java.util.Map; import org.rascalmpl.ideservices.IDEServices; @@ -37,7 +38,7 @@ public interface ILanguageProtocol { * @param stdout the output stream to write normal output to. * @param stderr the error stream to write error messages on, depending on the environment and options passed, will print in red. */ - void initialize(InputStream input, OutputStream stdout, OutputStream stderr, IDEServices services); + void initialize(Reader input, PrintWriter stdout, PrintWriter stderr, IDEServices services); /** * Will be called everytime a new prompt is printed. diff --git a/src/org/rascalmpl/repl/RascalInterpreterREPL.java b/src/org/rascalmpl/repl/RascalInterpreterREPL.java index 17febce23d5..2c06ecdfe83 100644 --- a/src/org/rascalmpl/repl/RascalInterpreterREPL.java +++ b/src/org/rascalmpl/repl/RascalInterpreterREPL.java @@ -10,6 +10,7 @@ import java.io.InputStream; import java.io.OutputStream; import java.io.PrintWriter; +import java.io.Reader; import java.io.Writer; import java.net.URISyntaxException; import java.util.Collection; @@ -71,7 +72,7 @@ public boolean getMeasureCommandTime() { } @Override - public void initialize(InputStream input, OutputStream stdout, OutputStream stderr, IDEServices ideServices) { + public void initialize(Reader input, PrintWriter stdout, PrintWriter stderr, IDEServices ideServices) { eval = constructEvaluator(input, stdout, stderr, ideServices); } @@ -79,7 +80,7 @@ public void initialize(InputStream input, OutputStream stdout, OutputStream stde @Override public PrintWriter getErrorWriter() { - return eval.getErrorPrinter(); + return eval.getStdErr(); } @Override @@ -89,7 +90,7 @@ public InputStream getInput() { @Override public PrintWriter getOutputWriter() { - return eval.getOutPrinter(); + return eval.getStdOut(); } @Override @@ -135,37 +136,37 @@ public IRascalResult evalStatement(String statement, String lastLine) throws Int duration = tm.duration(); } if (measureCommandTime) { - eval.getErrorPrinter().println("\nTime: " + duration + "ms"); + eval.getStdErr().println("\nTime: " + duration + "ms"); } return value; } catch (InterruptException ie) { - eval.getErrorPrinter().println("Interrupted"); + eval.getStdErr().println("Interrupted"); try { - ie.getRascalStackTrace().prettyPrintedString(eval.getErrorPrinter(), indentedPrettyPrinter); + ie.getRascalStackTrace().prettyPrintedString(eval.getStdErr(), indentedPrettyPrinter); } catch (IOException e) { } return null; } catch (ParseError pe) { - parseErrorMessage(eval.getErrorPrinter(), lastLine, "prompt", pe, indentedPrettyPrinter); + parseErrorMessage(eval.getStdErr(), lastLine, "prompt", pe, indentedPrettyPrinter); return null; } catch (StaticError e) { - staticErrorMessage(eval.getErrorPrinter(),e, indentedPrettyPrinter); + staticErrorMessage(eval.getStdErr(),e, indentedPrettyPrinter); return null; } catch (Throw e) { - throwMessage(eval.getErrorPrinter(),e, indentedPrettyPrinter); + throwMessage(eval.getStdErr(),e, indentedPrettyPrinter); return null; } catch (QuitException q) { - eval.getErrorPrinter().println("Quiting REPL"); + eval.getStdErr().println("Quiting REPL"); throw new InterruptedException(); } catch (Throwable e) { - throwableMessage(eval.getErrorPrinter(), e, eval.getStackTrace(), indentedPrettyPrinter); + throwableMessage(eval.getStdErr(), e, eval.getStackTrace(), indentedPrettyPrinter); return null; } } diff --git a/src/org/rascalmpl/repl/TerminalProgressBarMonitor.java b/src/org/rascalmpl/repl/TerminalProgressBarMonitor.java index f2c349fb2cf..9d8b10b8214 100644 --- a/src/org/rascalmpl/repl/TerminalProgressBarMonitor.java +++ b/src/org/rascalmpl/repl/TerminalProgressBarMonitor.java @@ -31,7 +31,7 @@ * This class only works correctly if the actual _raw_ output stream of the terminal is wrapped * with an object of this class. */ -public class TerminalProgressBarMonitor extends FilterOutputStream implements IRascalMonitor { +public class TerminalProgressBarMonitor extends PrintWriter implements IRascalMonitor { /** * We administrate an ordered list of named bars, which will be printed from * top to bottom just above the next prompt. diff --git a/src/org/rascalmpl/semantics/dynamic/Import.java b/src/org/rascalmpl/semantics/dynamic/Import.java index ebb4656494a..6ecd620f373 100644 --- a/src/org/rascalmpl/semantics/dynamic/Import.java +++ b/src/org/rascalmpl/semantics/dynamic/Import.java @@ -250,7 +250,7 @@ else if (eval.getCurrentEnvt() == eval.__getRootScope()) { addImportToCurrentModule(src, name, eval); if (heap.getModule(name).isDeprecated()) { - eval.getErrorPrinter().println(src + ":" + name + " is deprecated, " + heap.getModule(name).getDeprecatedMessage()); + eval.getStdErr().println(src + ":" + name + " is deprecated, " + heap.getModule(name).getDeprecatedMessage()); } return; @@ -312,7 +312,7 @@ public static ModuleEnvironment loadModule(ISourceLocation x, String name, IEval Module module = buildModule(uri, env, eval, jobName); if (isDeprecated(module)) { - eval.getErrorPrinter().println("WARNING: deprecated module " + name + ":" + getDeprecatedMessage(module)); + eval.getStdErr().println("WARNING: deprecated module " + name + ":" + getDeprecatedMessage(module)); } if (module != null) { diff --git a/src/org/rascalmpl/semantics/dynamic/ShellCommand.java b/src/org/rascalmpl/semantics/dynamic/ShellCommand.java index 8aecec7932a..b57e5efd2f7 100644 --- a/src/org/rascalmpl/semantics/dynamic/ShellCommand.java +++ b/src/org/rascalmpl/semantics/dynamic/ShellCommand.java @@ -44,14 +44,14 @@ public Result interpret(IEvaluator> __eval) { ISourceLocation uri = __eval.getRascalResolver().resolveModule(name); if (uri == null) { - __eval.getErrorPrinter().println("module " + name + " can not be found in the search path."); + __eval.getStdErr().println("module " + name + " can not be found in the search path."); } else { services.edit(uri); } } else { - __eval.getErrorPrinter().println("The current Rascal execution environment does not know how to start an editor."); + __eval.getStdErr().println("The current Rascal execution environment does not know how to start an editor."); } return org.rascalmpl.interpreter.result.ResultFactory.nothing(); @@ -81,7 +81,7 @@ public Help(ISourceLocation __param1, IConstructor tree) { public Result interpret(IEvaluator> __eval) { __eval.setCurrentAST(this); - __eval.printHelpMessage(__eval.getOutPrinter()); + __eval.printHelpMessage(__eval.getStdOut()); return org.rascalmpl.interpreter.result.ResultFactory.nothing(); } diff --git a/src/org/rascalmpl/shell/ModuleRunner.java b/src/org/rascalmpl/shell/ModuleRunner.java index 7d78fd3c00b..450375f1335 100644 --- a/src/org/rascalmpl/shell/ModuleRunner.java +++ b/src/org/rascalmpl/shell/ModuleRunner.java @@ -34,8 +34,8 @@ public void run(String args[]) throws IOException { IValue v = eval.main(eval.getMonitor(), module, "main", realArgs); if (v != null && !(v instanceof IInteger)) { - new StandardTextWriter(true).write(v, eval.getOutPrinter()); - eval.getOutPrinter().flush(); + new StandardTextWriter(true).write(v, eval.getStdOut()); + eval.getStdOut().flush(); } System.exit(v instanceof IInteger ? ((IInteger) v).intValue() : 0); diff --git a/src/org/rascalmpl/shell/RascalShell2.java b/src/org/rascalmpl/shell/RascalShell2.java index a850b5759ab..616cc4bea9a 100644 --- a/src/org/rascalmpl/shell/RascalShell2.java +++ b/src/org/rascalmpl/shell/RascalShell2.java @@ -34,6 +34,7 @@ import org.jline.reader.LineReaderBuilder; import org.jline.reader.impl.completer.StringsCompleter; import org.jline.reader.impl.history.DefaultHistory; +import org.jline.style.StyleResolver; import org.jline.terminal.TerminalBuilder; import org.rascalmpl.exceptions.Throw; import org.rascalmpl.ideservices.BasicIDEServices; @@ -102,14 +103,13 @@ public static void main(String[] args) throws IOException { ModuleEnvironment root = heap.addModule(new ModuleEnvironment(ModuleEnvironment.SHELL_MODULE, heap)); IValueFactory vf = ValueFactoryFactory.getValueFactory(); Evaluator evaluator = new Evaluator(vf, new NullInputStream(), OutputStream.nullOutputStream(), OutputStream.nullOutputStream(), root, heap, monitor); - evaluator.overwritePrintStream(monitor, new PrintWriter(monitor, true)); + evaluator.overwritePrintWriter(monitor, new PrintWriter(monitor, true)); evaluator.addRascalSearchPathContributor(StandardLibraryContributor.getInstance()); URIResolverRegistry reg = URIResolverRegistry.getInstance(); var indentedPrettyPrinter = new ReplTextWriter(true); - while (true) { String line = reader.readLine(Ansi.ansi().reset().bold().toString() + "rascal> " + Ansi.ansi().boldOff().toString()); try { @@ -142,26 +142,26 @@ public static void main(String[] args) throws IOException { catch (InterruptException ie) { reader.printAbove("Interrupted"); try { - ie.getRascalStackTrace().prettyPrintedString(evaluator.getErrorPrinter(), indentedPrettyPrinter); + ie.getRascalStackTrace().prettyPrintedString(evaluator.getStdErr(), indentedPrettyPrinter); } catch (IOException e) { } } catch (ParseError pe) { - parseErrorMessage(evaluator.getErrorPrinter(), line, "prompt", pe, indentedPrettyPrinter); + parseErrorMessage(evaluator.getStdErr(), line, "prompt", pe, indentedPrettyPrinter); } catch (StaticError e) { - staticErrorMessage(evaluator.getErrorPrinter(),e, indentedPrettyPrinter); + staticErrorMessage(evaluator.getStdErr(),e, indentedPrettyPrinter); } catch (Throw e) { - throwMessage(evaluator.getErrorPrinter(),e, indentedPrettyPrinter); + throwMessage(evaluator.getStdErr(),e, indentedPrettyPrinter); } catch (QuitException q) { reader.printAbove("Quiting REPL"); break; } catch (Throwable e) { - throwableMessage(evaluator.getErrorPrinter(), e, evaluator.getStackTrace(), indentedPrettyPrinter); + throwableMessage(evaluator.getStdErr(), e, evaluator.getStackTrace(), indentedPrettyPrinter); } } System.exit(0); @@ -230,11 +230,11 @@ public void flush() throws IOException { } - private static class FakePrintStream extends PrintWriter { + private static class FakePrintWriter extends PrintWriter { private final LineReader target; private final CharBuffer buffer; - public FakePrintStream(LineReader target, boolean autoFlush) { + public FakePrintWriter(LineReader target, boolean autoFlush) { super(OutputStream.nullOutputStream(), autoFlush, StandardCharsets.UTF_8); this.target = target; this.buffer = CharBuffer.allocate(8*1024); diff --git a/src/org/rascalmpl/test/infrastructure/RascalJUnitParallelRecursiveTestRunner.java b/src/org/rascalmpl/test/infrastructure/RascalJUnitParallelRecursiveTestRunner.java index bc27c37e117..5fc187e855e 100644 --- a/src/org/rascalmpl/test/infrastructure/RascalJUnitParallelRecursiveTestRunner.java +++ b/src/org/rascalmpl/test/infrastructure/RascalJUnitParallelRecursiveTestRunner.java @@ -13,6 +13,7 @@ import java.io.IOException; import java.io.PrintWriter; +import java.io.Reader; import java.lang.annotation.Annotation; import java.util.ArrayList; import java.util.Collections; @@ -257,7 +258,7 @@ private void processModules() { synchronized(stdout) { evaluator.warning("Could not import " + module + " for testing...", null); evaluator.warning(e.getMessage(), null); - e.printStackTrace(evaluator.getOutPrinter()); + e.printStackTrace(evaluator.getStdOut()); } // register a failing module to make sure we report failure later on. @@ -300,7 +301,7 @@ private void initializeEvaluator() { heap = new GlobalEnvironment(); root = heap.addModule(new ModuleEnvironment("___junit_test___", heap)); - evaluator = new Evaluator(ValueFactoryFactory.getValueFactory(), System.in, System.err, System.out, root, heap, RascalJUnitTestRunner.getCommonMonitor()); + evaluator = new Evaluator(ValueFactoryFactory.getValueFactory(), Reader.nullReader(), new PrintWriter(System.err, true), new PrintWriter(System.out, false), root, heap, RascalJUnitTestRunner.getCommonMonitor()); stdout = new PrintWriter(evaluator.getStdOut()); stderr = new PrintWriter(evaluator.getStdErr()); diff --git a/src/org/rascalmpl/test/infrastructure/RascalJUnitTestRunner.java b/src/org/rascalmpl/test/infrastructure/RascalJUnitTestRunner.java index e2330988525..87843801f92 100644 --- a/src/org/rascalmpl/test/infrastructure/RascalJUnitTestRunner.java +++ b/src/org/rascalmpl/test/infrastructure/RascalJUnitTestRunner.java @@ -12,6 +12,8 @@ import java.io.File; import java.io.IOException; +import java.io.PrintWriter; +import java.io.Reader; import java.lang.annotation.Annotation; import java.net.URISyntaxException; import java.util.ArrayList; @@ -73,7 +75,7 @@ public static IRascalMonitor getCommonMonitor() { heap = new GlobalEnvironment(); root = heap.addModule(new ModuleEnvironment("___junit_test___", heap)); - evaluator = new Evaluator(ValueFactoryFactory.getValueFactory(), System.in, System.err, System.out, root, heap, getCommonMonitor()); + evaluator = new Evaluator(ValueFactoryFactory.getValueFactory(), Reader.nullReader(), new PrintWriter(System.err, true), new PrintWriter(System.out, false), root, heap, getCommonMonitor()); evaluator.addRascalSearchPathContributor(StandardLibraryContributor.getInstance()); evaluator.getConfiguration().setErrors(true); diff --git a/src/org/rascalmpl/test/infrastructure/TestFramework.java b/src/org/rascalmpl/test/infrastructure/TestFramework.java index ace8f0f08d5..12ae1d0a210 100644 --- a/src/org/rascalmpl/test/infrastructure/TestFramework.java +++ b/src/org/rascalmpl/test/infrastructure/TestFramework.java @@ -22,12 +22,14 @@ import java.io.IOException; import java.io.OutputStream; import java.io.PrintWriter; +import java.io.Reader; import java.net.URISyntaxException; import java.nio.charset.StandardCharsets; import java.util.HashSet; import java.util.Set; import org.junit.After; +import org.rascalmpl.ast.Char; import org.rascalmpl.interpreter.Evaluator; import org.rascalmpl.interpreter.env.GlobalEnvironment; import org.rascalmpl.interpreter.env.ModuleEnvironment; @@ -56,10 +58,10 @@ public class TestFramework { heap = new GlobalEnvironment(); root = heap.addModule(new ModuleEnvironment("___test___", heap)); - evaluator = new Evaluator(ValueFactoryFactory.getValueFactory(), System.in, System.err, System.out, RascalJUnitTestRunner.getCommonMonitor(), root, heap); + evaluator = new Evaluator(ValueFactoryFactory.getValueFactory(), Reader.nullReader(), new PrintWriter(System.err, true), new PrintWriter(System.out, false), RascalJUnitTestRunner.getCommonMonitor(), root, heap); - stdout = evaluator.getOutPrinter(); - stderr = evaluator.getErrorPrinter(); + stdout = evaluator.getStdOut(); + stderr = evaluator.getStdErr(); evaluator.addRascalSearchPathContributor(StandardLibraryContributor.getInstance()); diff --git a/test/org/rascalmpl/MatchFingerprintTest.java b/test/org/rascalmpl/MatchFingerprintTest.java index 4b2126b4010..be514a1c16e 100644 --- a/test/org/rascalmpl/MatchFingerprintTest.java +++ b/test/org/rascalmpl/MatchFingerprintTest.java @@ -15,6 +15,7 @@ import static org.junit.Assert.assertNotEquals; import java.io.IOException; +import java.io.Reader; import java.io.StringReader; import org.rascalmpl.interpreter.Evaluator; @@ -47,7 +48,7 @@ public class MatchFingerprintTest extends TestCase { private final GlobalEnvironment heap = new GlobalEnvironment(); private final ModuleEnvironment root = new ModuleEnvironment("root", heap); - private final Evaluator eval = new Evaluator(IRascalValueFactory.getInstance(), System.in, System.err, System.out, root, heap, RascalJUnitTestRunner.getCommonMonitor()); + private final Evaluator eval = new Evaluator(IRascalValueFactory.getInstance(), Reader.nullReader(), System.err, System.out, root, heap, RascalJUnitTestRunner.getCommonMonitor()); private final RascalFunctionValueFactory VF = eval.getFunctionValueFactory(); private final TypeFactory TF = TypeFactory.getInstance(); diff --git a/test/org/rascalmpl/test/functionality/ParallelEvaluatorsTests.java b/test/org/rascalmpl/test/functionality/ParallelEvaluatorsTests.java index 15134bb00bb..64f6d2e3a63 100644 --- a/test/org/rascalmpl/test/functionality/ParallelEvaluatorsTests.java +++ b/test/org/rascalmpl/test/functionality/ParallelEvaluatorsTests.java @@ -50,7 +50,7 @@ public void report(boolean successful, String test, ISourceLocation loc, String if (exception != null) { evaluator.warning("Got exception: " + exception, loc); - exception.printStackTrace(evaluator.getOutPrinter()); + exception.printStackTrace(evaluator.getStdOut()); throw new RuntimeException(exception); } } From 61d43875a004f7551f190d25080c097a6b00e035 Mon Sep 17 00:00:00 2001 From: Davy Landman Date: Tue, 15 Oct 2024 17:49:03 +0200 Subject: [PATCH 039/191] Rewriting away old parts of the jline2 code --- .../shell/EclipseTerminalConnection.java | 167 ++++++++++++++---- .../shell/ShellEvaluatorFactory.java | 6 +- 2 files changed, 132 insertions(+), 41 deletions(-) diff --git a/src/org/rascalmpl/shell/EclipseTerminalConnection.java b/src/org/rascalmpl/shell/EclipseTerminalConnection.java index 66d017901b5..8656f9c8ec6 100644 --- a/src/org/rascalmpl/shell/EclipseTerminalConnection.java +++ b/src/org/rascalmpl/shell/EclipseTerminalConnection.java @@ -17,11 +17,23 @@ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import java.io.PrintWriter; import java.net.InetAddress; import java.net.Socket; +import java.nio.charset.Charset; import java.util.Arrays; +import java.util.function.IntConsumer; +import java.util.function.IntSupplier; + +import org.jline.terminal.Attributes; +import org.jline.terminal.Cursor; +import org.jline.terminal.MouseEvent; +import org.jline.terminal.Size; +import org.jline.terminal.Terminal; +import org.jline.utils.ColorPalette; +import org.jline.utils.InfoCmp.Capability; +import org.jline.utils.NonBlockingReader; -import jline.Terminal; public class EclipseTerminalConnection implements Terminal { public static final byte[] HEADER = new byte[] { 0x42, 0x42 }; @@ -78,70 +90,147 @@ private int askForHeight() { return previousHeight; } } + @Override - public void init() throws Exception { - base.init(); + public Size getSize() { + return new Size(askForWidth(), askForHeight()); } - @Override - public void restore() throws Exception { - base.restore(); + public void setSize(Size size) { + base.setSize(size); } @Override - public void reset() throws Exception { - base.reset(); + public void close() throws IOException { + base.close(); } - @Override - public boolean isSupported() { - return base.isSupported(); + public String getName() { + return base.getName(); } - - @Override - public boolean isAnsiSupported() { - return base.isAnsiSupported(); + public SignalHandler handle(Signal signal, SignalHandler handler) { + return base.handle(signal, handler); } - @Override - public OutputStream wrapOutIfNeeded(OutputStream out) { - return base.wrapOutIfNeeded(out); + public void raise(Signal signal) { + base.raise(signal); } - @Override - public InputStream wrapInIfNeeded(InputStream in) throws IOException { - return base.wrapInIfNeeded(in); + public NonBlockingReader reader() { + return base.reader(); } - @Override - public boolean hasWeirdWrap() { - return base.hasWeirdWrap(); + public PrintWriter writer() { + return base.writer(); } - @Override - public boolean isEchoEnabled() { - return base.isEchoEnabled(); + public Charset encoding() { + return base.encoding(); } - @Override - public void setEchoEnabled(boolean enabled) { - base.setEchoEnabled(enabled); + public InputStream input() { + return base.input(); + } + @Override + public OutputStream output() { + return base.output(); + } + @Override + public boolean canPauseResume() { + return base.canPauseResume(); + } + @Override + public void pause() { + base.pause(); + } + @Override + public void pause(boolean wait) throws InterruptedException { + base.pause(wait); + } + @Override + public void resume() { + base.resume(); + } + @Override + public boolean paused() { + return base.paused(); + } + @Override + public Attributes enterRawMode() { + return base.enterRawMode(); + } + @Override + public boolean echo() { + return base.echo(); + } + @Override + public boolean echo(boolean echo) { + return base.echo(echo); + } + @Override + public Attributes getAttributes() { + return base.getAttributes(); + } + @Override + public void setAttributes(Attributes attr) { + base.setAttributes(attr); + } + @Override + public void flush() { + base.flush(); + } + @Override + public String getType() { + return base.getType(); + } + @Override + public boolean puts(Capability capability, Object... params) { + return base.puts(capability, params); + } + @Override + public boolean getBooleanCapability(Capability capability) { + return base.getBooleanCapability(capability); + } + @Override + public Integer getNumericCapability(Capability capability) { + return base.getNumericCapability(capability); + } + @Override + public String getStringCapability(Capability capability) { + return base.getStringCapability(capability); + } + @Override + public Cursor getCursorPosition(IntConsumer discarded) { + return base.getCursorPosition(discarded); + } + @Override + public boolean hasMouseSupport() { + return base.hasMouseSupport(); + } + @Override + public boolean trackMouse(MouseTracking tracking) { + return base.trackMouse(tracking); + } + @Override + public MouseEvent readMouseEvent() { + return base.readMouseEvent(); + } + @Override + public MouseEvent readMouseEvent(IntSupplier reader) { + return base.readMouseEvent(reader); } - @Override - public String getOutputEncoding() { - return base.getOutputEncoding(); + public boolean hasFocusSupport() { + return base.hasFocusSupport(); } - @Override - public void enableInterruptCharacter() { - base.enableInterruptCharacter(); + public boolean trackFocus(boolean tracking) { + return base.trackFocus(tracking); } - @Override - public void disableInterruptCharacter() { - base.disableInterruptCharacter(); + public ColorPalette getPalette() { + return base.getPalette(); } } diff --git a/src/org/rascalmpl/shell/ShellEvaluatorFactory.java b/src/org/rascalmpl/shell/ShellEvaluatorFactory.java index 63eafa3da38..bfb0b335080 100644 --- a/src/org/rascalmpl/shell/ShellEvaluatorFactory.java +++ b/src/org/rascalmpl/shell/ShellEvaluatorFactory.java @@ -4,6 +4,8 @@ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import java.io.PrintWriter; +import java.io.Reader; import java.net.URISyntaxException; import org.rascalmpl.debug.IRascalMonitor; @@ -27,7 +29,7 @@ public class ShellEvaluatorFactory { - public static Evaluator getDefaultEvaluator(InputStream input, OutputStream stdout, OutputStream stderr, IRascalMonitor monitor) { + public static Evaluator getDefaultEvaluator(Reader input, PrintWriter stdout, PrintWriter stderr, IRascalMonitor monitor) { GlobalEnvironment heap = new GlobalEnvironment(); ModuleEnvironment root = heap.addModule(new ModuleEnvironment(ModuleEnvironment.SHELL_MODULE, heap)); IValueFactory vf = ValueFactoryFactory.getValueFactory(); @@ -46,7 +48,7 @@ public static Evaluator getDefaultEvaluator(InputStream input, OutputStream stdo return evaluator; } - public static Evaluator getDefaultEvaluatorForLocation(File fileOrFolderInProject, InputStream input, OutputStream stdout, OutputStream stderr, IRascalMonitor monitor) { + public static Evaluator getDefaultEvaluatorForLocation(File fileOrFolderInProject, Reader input, PrintWriter stdout, PrintWriter stderr, IRascalMonitor monitor) { GlobalEnvironment heap = new GlobalEnvironment(); ModuleEnvironment root = heap.addModule(new ModuleEnvironment(ModuleEnvironment.SHELL_MODULE, heap)); IValueFactory vf = ValueFactoryFactory.getValueFactory(); From 94b9425a32903b5c711e036ca4ce6fabf9d4a48b Mon Sep 17 00:00:00 2001 From: Davy Landman Date: Tue, 15 Oct 2024 18:34:19 +0200 Subject: [PATCH 040/191] Rewrote TerminalProgressBarMonitor --- .../repl/TerminalProgressBarMonitor.java | 242 ++++++++---------- .../values/parsetrees/TreeAdapter.java | 7 +- 2 files changed, 105 insertions(+), 144 deletions(-) diff --git a/src/org/rascalmpl/repl/TerminalProgressBarMonitor.java b/src/org/rascalmpl/repl/TerminalProgressBarMonitor.java index 9d8b10b8214..f3e1408fcb0 100644 --- a/src/org/rascalmpl/repl/TerminalProgressBarMonitor.java +++ b/src/org/rascalmpl/repl/TerminalProgressBarMonitor.java @@ -1,12 +1,7 @@ package org.rascalmpl.repl; -import java.io.FilterOutputStream; -import java.io.FilterWriter; import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; import java.io.PrintWriter; -import java.nio.charset.Charset; import java.time.Duration; import java.time.Instant; import java.util.ArrayList; @@ -14,10 +9,10 @@ import java.util.LinkedList; import java.util.List; +import org.jline.terminal.Terminal; import org.rascalmpl.debug.IRascalMonitor; + import io.usethesource.vallang.ISourceLocation; -import jline.Terminal; -import jline.internal.Configuration; /** * The terminal progress bar monitor wraps the standard output stream to be able to monitor @@ -45,12 +40,6 @@ public class TerminalProgressBarMonitor extends PrintWriter implements IRascalMo */ private List unfinishedLines = new ArrayList<>(3); - /** - * This writer is there to help with the encoding to what the terminal needs. It writes directly to the - * underlying stream. - */ - private final PrintWriter writer; - /** * The entire width in character columns of the current terminal. Resizes everytime when we start * the first job. @@ -65,66 +54,66 @@ public class TerminalProgressBarMonitor extends PrintWriter implements IRascalMo /**x * Will make everything slow, but easier to spot mistakes */ - private final boolean debug = false; + private static final boolean debug = false; /** * Used to get updates to the width of the terminal */ private final Terminal tm; - private final String encoding; + /** + * Used for cases where the we need an actual PrintWriter instance + */ + private final PrintWriter rawWriter; @SuppressWarnings("resource") - public TerminalProgressBarMonitor(OutputStream out, InputStream in, Terminal tm) { - super(out); + public TerminalProgressBarMonitor(Terminal tm) { + super(debug ? new AlwaysFlushAlwaysShowCursor(tm.writer()) : tm.writer()); - this.encoding = Configuration.getEncoding(); + this.rawWriter = (PrintWriter)super.out; this.tm = tm; - PrintWriter theWriter = new PrintWriter(out, true, Charset.forName(encoding)); - this.writer = debug ? new PrintWriter(new AlwaysFlushAlwaysShowCursor(theWriter)) : theWriter; this.lineWidth = tm.getWidth(); - this.unicodeEnabled = ANSI.isUTF8enabled(theWriter, in); + this.unicodeEnabled = tm.encoding().newEncoder().canEncode(new ProgressBar("", 1).clocks[0]); - assert tm.isSupported() && tm.isAnsiSupported(): "interactive progress bar needs a working ANSI terminal"; assert out.getClass() != TerminalProgressBarMonitor.class : "accidentally wrapping the wrapper."; } /** * Use this for debugging terminal cursor movements, step by step. */ - private static class AlwaysFlushAlwaysShowCursor extends FilterWriter { + private static class AlwaysFlushAlwaysShowCursor extends PrintWriter { public AlwaysFlushAlwaysShowCursor(PrintWriter out) { super(out); } @Override - public void write(int c) throws IOException { - out.write(c); - out.write(ANSI.showCursor()); - out.flush(); + public void write(int c) { + super.write(c); + super.write(ANSI.showCursor()); + super.flush(); } @Override - public void write(char[] cbuf, int off, int len) throws IOException { - out.write(cbuf, off, len); - out.write(ANSI.showCursor()); - out.flush(); + public void write(char[] cbuf, int off, int len) { + super.write(cbuf, off, len); + super.write(ANSI.showCursor()); + super.flush(); } @Override - public void write(String str, int off, int len) throws IOException { - out.write(str, off, len); - out.write(ANSI.showCursor()); - out.flush(); + public void write(String str, int off, int len) { + super.write(str, off, len); + super.write(ANSI.showCursor()); + super.flush(); } } - private static class UnfinishedLine { + private class UnfinishedLine { final long threadId; private int curCapacity = 512; - private byte[] buffer = new byte[curCapacity]; + private char[] buffer = new char[curCapacity]; private int curEnd = 0; public UnfinishedLine() { @@ -137,7 +126,7 @@ public UnfinishedLine() { * * The resulting buffer nevers contain any newline character. */ - private void store(byte[] newInput, int offset, int len) { + private void store(char[] newInput, int offset, int len) { if (len == 0) { return; // fast exit } @@ -152,37 +141,37 @@ private void store(byte[] newInput, int offset, int len) { curEnd += len; } - public void write(byte[] n, OutputStream out) throws IOException { - write(n, 0, n.length, out); - } - /** * Main workhorse looks for newline characters in the new input. * - if there are newlines, than whatever is in the buffer can be flushed. * - all the characters up to the last new new line are flushed immediately. * - all the new characters after the last newline are buffered. */ - public void write(byte[] n, int offset, int len, OutputStream out) throws IOException { + public void write(char[] n, int offset, int len) { int lastNL = startOfLastLine(n, offset, len); if (lastNL == -1) { store(n, offset, len); } else { - flush(out); - out.write(n, offset, lastNL + 1); - out.flush(); + flush(); + rawWrite(n, offset, lastNL + 1); + rawFlush(); store(n, lastNL + 1, len - (lastNL + 1)); } } + public void write(String s, int offset, int len) { + write(s.toCharArray(), offset, len); + } + /** * This empties the current buffer onto the stream, * and resets the cursor. */ - private void flush(OutputStream out) throws IOException { + private void flush() { if (curEnd != 0) { - out.write(buffer, 0, curEnd); + rawWrite(buffer, 0, curEnd); curEnd = 0; } } @@ -191,14 +180,14 @@ private void flush(OutputStream out) throws IOException { * Prints whatever is the last line in the buffer, * and adds a newline. */ - public void flushLastLine(OutputStream out) throws IOException { + public void flushLastLine() { if (curEnd != 0) { - flush(out); - out.write('\n'); + flush(); + rawWrite('\n'); } } - private int startOfLastLine(byte[] buffer, int offset, int len) { + private int startOfLastLine(char[] buffer, int offset, int len) { for (int i = offset + len - 1; i >= offset; i--) { if (buffer[i] == '\n') { return i; @@ -209,6 +198,29 @@ private int startOfLastLine(byte[] buffer, int offset, int len) { } } + private void rawPrintln(String s) { + super.println(s); + } + private void rawWrite(String s) { + super.write(s); + } + + private void rawWrite(int c) { + super.write(c); + } + + private void rawWrite(char[] buf, int offset, int length) { + super.write(buf, offset, length); + } + + private void rawWrite(String buf, int offset, int length) { + super.write(buf, offset, length); + } + + private void rawFlush() { + super.flush(); + } + /** * Represents one currently running progress bar */ @@ -264,14 +276,14 @@ void update() { // to avoid flicker we only print if there is a new bar character to draw if (newWidth() != previousWidth) { stepper++; - writer.write(ANSI.moveUp(bars.size() - bars.indexOf(this))); + rawWrite(ANSI.moveUp(bars.size() - bars.indexOf(this))); write(); // this moves the cursor already one line down due to `println` int distance = bars.size() - bars.indexOf(this) - 1; if (distance > 0) { // ANSI will move 1 line even if the parameter is 0 - writer.write(ANSI.moveDown(distance)); + rawWrite(ANSI.moveDown(distance)); } - writer.flush(); + rawFlush(); } } @@ -323,7 +335,7 @@ void write() { return; // robustness against very small screens. At least don't throw bounds exceptions } else if (barWidth <= 3) { // we can print the clock for good measure - writer.println(clock); + rawPrintln(clock); return; } @@ -340,7 +352,7 @@ else if (barWidth <= 3) { // we can print the clock for good measure + " " ; - writer.println(line); // note this puts us one line down + rawPrintln(line); // note this puts us one line down } @Override @@ -370,40 +382,16 @@ public void done() { */ private void eraseBars() { if (!bars.isEmpty()) { - writer.write(ANSI.moveUp(bars.size())); - writer.write(ANSI.clearToEndOfScreen()); + rawWrite(ANSI.moveUp(bars.size())); + rawWrite(ANSI.clearToEndOfScreen()); } - writer.flush(); + rawFlush(); } /** * ANSI escape codes convenience functions */ private static class ANSI { - static boolean isUTF8enabled(PrintWriter writer, InputStream in) { - try { - int pos = getCursorPosition(writer, in); - // Japanese A (あ) is typically 3 bytes in most encodings, but should be less than 3 ANSI columns - // on screen if-and-only-if unicode is supported. - writer.write("あ"); - writer.flush(); - int newPos = getCursorPosition(writer, in); - int diff = newPos - pos; - - try { - return diff < 3; - } - finally { - while (--diff >= 0) { - writer.write(ANSI.delete()); - } - writer.flush(); - } - } - catch (IOException e) { - return false; - } - } public static String grey8Background() { return "\u001B[48;5;240m"; @@ -413,33 +401,6 @@ public static String brightWhiteForeground() { return "\u001B[97m"; } - static int getCursorPosition(PrintWriter writer, InputStream in) throws IOException { - writer.write(ANSI.printCursorPosition()); - writer.flush(); - - byte[] col = new byte[32]; - int len = in.read(col); - String echo; - - try { - echo = new String(col, 0, len, Configuration.getEncoding()); - } - catch (StringIndexOutOfBoundsException e) { - // this happens if there is some other input on stdin (for example a pipe) - // TODO: the input is now read and can't be processed again. - echo = ""; - } - - if (!echo.startsWith("\u001B[") || !echo.contains(";")) { - return -1; - } - - // terminal responds with ESC[n;mR, where n is the row and m is the column. - echo = echo.split(";")[1]; // take the column part - echo = echo.substring(0, echo.length() - 1); // remove the last R - return Integer.parseInt(echo); - } - public static String delete() { return "\u001B[D\u001B[K"; } @@ -497,7 +458,7 @@ private void printBars() { pb.write(); } - writer.flush(); + rawFlush(); } @@ -538,7 +499,7 @@ public synchronized void jobStart(String name, int workShare, int totalWork) { var pb = findBarByName(name); - writer.write(ANSI.hideCursor()); + rawWrite(ANSI.hideCursor()); if (pb == null) { eraseBars(); // to make room for the new bars @@ -552,8 +513,8 @@ public synchronized void jobStart(String name, int workShare, int totalWork) { pb.update(); } - writer.write(ANSI.showCursor()); - writer.flush(); + rawWrite(ANSI.showCursor()); + rawFlush(); } @Override @@ -561,11 +522,11 @@ public synchronized void jobStep(String name, String message, int workShare) { ProgressBar pb = findBarByName(name); if (pb != null) { - writer.write(ANSI.hideCursor()); + rawWrite(ANSI.hideCursor()); pb.worked(workShare, message); pb.update(); - writer.write(ANSI.showCursor()); - writer.flush(); + rawWrite(ANSI.showCursor()); + rawFlush(); } } @@ -573,7 +534,7 @@ public synchronized void jobStep(String name, String message, int workShare) { public synchronized int jobEnd(String name, boolean succeeded) { var pb = findBarByName(name); - writer.write(ANSI.hideCursor()); + rawWrite(ANSI.hideCursor()); if (pb != null && --pb.nesting == -1) { eraseBars(); @@ -590,7 +551,7 @@ else if (pb != null) { pb.update(); } - writer.write(ANSI.showCursor()); + rawWrite(ANSI.showCursor()); return -1; } @@ -617,7 +578,7 @@ public synchronized void warning(String message, ISourceLocation src) { eraseBars(); } - writer.println(("[WARNING] " + (src != null ? (src + ": ") : "") + message)); + rawPrintln(("[WARNING] " + (src != null ? (src + ": ") : "") + message)); if (!bars.isEmpty()) { printBars(); @@ -634,35 +595,34 @@ public synchronized void warning(String message, ISourceLocation src) { * is before the first character of a line. */ @Override - public synchronized void write(byte[] b) throws IOException { + public void write(String s, int off, int len) { if (!bars.isEmpty()) { eraseBars(); - findUnfinishedLine().write(b, out); + findUnfinishedLine().write(s, off, len); printBars(); } else { - out.write(b); + rawWrite(s, off, len); } } - /** * Here we make sure the progress bars are gone just before * someone wants to print in the console. When the printing * is ready, we simply add our own progress bars again. */ @Override - public synchronized void write(byte[] b, int off, int len) throws IOException { + public synchronized void write(char[] buf, int off, int len) { if (!bars.isEmpty()) { eraseBars(); - findUnfinishedLine().write(b, off, len, out); + findUnfinishedLine().write(buf, off, len); printBars(); } else { // this must be the raw output stream // otherwise rascal prompts (which do not end in newlines) will be buffered - out.write(b, off, len); + rawWrite(buf, off, len); } } @@ -672,14 +632,14 @@ public synchronized void write(byte[] b, int off, int len) throws IOException { * is ready, we simply add our own progress bars again. */ @Override - public synchronized void write(int b) throws IOException { + public synchronized void write(int c) { if (!bars.isEmpty()) { eraseBars(); - findUnfinishedLine().write(new byte[] { (byte) b }, out); + findUnfinishedLine().write(new char[] { (char) c }, 0, 1); printBars(); } else { - out.write(b); + rawWrite(c); } } @@ -694,17 +654,12 @@ public synchronized void endAllJobs() { } for (UnfinishedLine l : unfinishedLines) { - try { - l.flushLastLine(out); - } - catch (IOException e) { - // might happen if the terminal crashes before we stop running - } + l.flushLastLine(); } try { - writer.write(ANSI.showCursor()); - writer.flush(); + rawWrite(ANSI.showCursor()); + rawFlush(); out.flush(); } catch (IOException e) { @@ -713,7 +668,12 @@ public synchronized void endAllJobs() { } @Override - public void close() throws IOException { - endAllJobs(); + public void close() { + try { + endAllJobs(); + } + finally { + super.close(); + } } } diff --git a/src/org/rascalmpl/values/parsetrees/TreeAdapter.java b/src/org/rascalmpl/values/parsetrees/TreeAdapter.java index 4ab329a2a92..3b631fb1245 100644 --- a/src/org/rascalmpl/values/parsetrees/TreeAdapter.java +++ b/src/org/rascalmpl/values/parsetrees/TreeAdapter.java @@ -19,9 +19,10 @@ import java.util.HashMap; import java.util.Iterator; import java.util.Map; -import org.fusesource.jansi.Ansi; -import org.fusesource.jansi.Ansi.Attribute; -import org.fusesource.jansi.Ansi.Color; + +import org.jline.jansi.Ansi; +import org.jline.jansi.Ansi.Attribute; +import org.jline.jansi.Ansi.Color; import org.rascalmpl.exceptions.ImplementationError; import org.rascalmpl.interpreter.utils.LimitedResultWriter; import org.rascalmpl.values.RascalValueFactory; From 1fd834880b6ec16bc6ae0953d1b3ade0b61eba9a Mon Sep 17 00:00:00 2001 From: Davy Landman Date: Tue, 22 Oct 2024 10:56:07 +0200 Subject: [PATCH 041/191] Working on migrating to the new repl api --- src/org/rascalmpl/repl/ItalicErrorWriter.java | 5 +- src/org/rascalmpl/repl/RedErrorWriter.java | 7 +- src/org/rascalmpl/repl/ReplTextWriter.java | 6 +- .../rascalmpl/repl/SourceLocationHistory.java | 8 +- .../repl/TerminalProgressBarMonitor.java | 5 - .../repl/TerminalProgressBarMonitor2.java | 602 ------------------ src/org/rascalmpl/shell/RascalShell2.java | 6 +- 7 files changed, 17 insertions(+), 622 deletions(-) delete mode 100644 src/org/rascalmpl/repl/TerminalProgressBarMonitor2.java diff --git a/src/org/rascalmpl/repl/ItalicErrorWriter.java b/src/org/rascalmpl/repl/ItalicErrorWriter.java index b9a7340b3d1..a650a64e4ac 100644 --- a/src/org/rascalmpl/repl/ItalicErrorWriter.java +++ b/src/org/rascalmpl/repl/ItalicErrorWriter.java @@ -2,8 +2,9 @@ import java.io.Writer; -import org.fusesource.jansi.Ansi; -import org.fusesource.jansi.Ansi.Attribute; +import org.jline.jansi.Ansi; +import org.jline.jansi.Ansi.Attribute; + public class ItalicErrorWriter extends WrappedFilterWriter { public ItalicErrorWriter(Writer out) { diff --git a/src/org/rascalmpl/repl/RedErrorWriter.java b/src/org/rascalmpl/repl/RedErrorWriter.java index 92dac60c344..b2300a3787d 100644 --- a/src/org/rascalmpl/repl/RedErrorWriter.java +++ b/src/org/rascalmpl/repl/RedErrorWriter.java @@ -2,9 +2,10 @@ import java.io.Writer; -import org.fusesource.jansi.Ansi; -import org.fusesource.jansi.Ansi.Attribute; -import org.fusesource.jansi.Ansi.Color; +import org.jline.jansi.Ansi; +import org.jline.jansi.Ansi.Attribute; +import org.jline.jansi.Ansi.Color; + public class RedErrorWriter extends WrappedFilterWriter { public RedErrorWriter(Writer out) { diff --git a/src/org/rascalmpl/repl/ReplTextWriter.java b/src/org/rascalmpl/repl/ReplTextWriter.java index 475c0f0520f..647680fb2e8 100644 --- a/src/org/rascalmpl/repl/ReplTextWriter.java +++ b/src/org/rascalmpl/repl/ReplTextWriter.java @@ -3,9 +3,9 @@ import java.io.IOException; import java.io.StringWriter; -import org.fusesource.jansi.Ansi; -import org.fusesource.jansi.Ansi.Attribute; -import org.fusesource.jansi.Ansi.Color; +import org.jline.jansi.Ansi; +import org.jline.jansi.Ansi.Attribute; +import org.jline.jansi.Ansi.Color; import org.rascalmpl.interpreter.utils.LimitedResultWriter; import io.usethesource.vallang.ISourceLocation; diff --git a/src/org/rascalmpl/repl/SourceLocationHistory.java b/src/org/rascalmpl/repl/SourceLocationHistory.java index 8964873ba40..eb14ea04d84 100644 --- a/src/org/rascalmpl/repl/SourceLocationHistory.java +++ b/src/org/rascalmpl/repl/SourceLocationHistory.java @@ -9,14 +9,14 @@ import java.io.PrintStream; import java.io.Reader; +import org.jline.reader.History.Entry; +import org.jline.utils.Log; import org.rascalmpl.uri.URIResolverRegistry; + import io.usethesource.vallang.ISourceLocation; -import jline.console.history.MemoryHistory; -import jline.console.history.PersistentHistory; -import jline.internal.Log; -public class SourceLocationHistory extends MemoryHistory implements PersistentHistory { +public class SourceLocationHistory extends History implements PersistentHistory { private static final URIResolverRegistry reg = URIResolverRegistry.getInstance(); private final ISourceLocation loc; diff --git a/src/org/rascalmpl/repl/TerminalProgressBarMonitor.java b/src/org/rascalmpl/repl/TerminalProgressBarMonitor.java index f3e1408fcb0..d5175da570c 100644 --- a/src/org/rascalmpl/repl/TerminalProgressBarMonitor.java +++ b/src/org/rascalmpl/repl/TerminalProgressBarMonitor.java @@ -61,16 +61,11 @@ public class TerminalProgressBarMonitor extends PrintWriter implements IRascalMo */ private final Terminal tm; - /** - * Used for cases where the we need an actual PrintWriter instance - */ - private final PrintWriter rawWriter; @SuppressWarnings("resource") public TerminalProgressBarMonitor(Terminal tm) { super(debug ? new AlwaysFlushAlwaysShowCursor(tm.writer()) : tm.writer()); - this.rawWriter = (PrintWriter)super.out; this.tm = tm; this.lineWidth = tm.getWidth(); diff --git a/src/org/rascalmpl/repl/TerminalProgressBarMonitor2.java b/src/org/rascalmpl/repl/TerminalProgressBarMonitor2.java deleted file mode 100644 index 88f8c59f20f..00000000000 --- a/src/org/rascalmpl/repl/TerminalProgressBarMonitor2.java +++ /dev/null @@ -1,602 +0,0 @@ -package org.rascalmpl.repl; - -import java.io.FilterOutputStream; -import java.io.FilterWriter; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.io.PrintWriter; -import java.nio.charset.Charset; -import java.nio.charset.StandardCharsets; -import java.time.Duration; -import java.time.Instant; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.LinkedList; -import java.util.List; - -import org.jline.terminal.Terminal; -import org.rascalmpl.debug.IRascalMonitor; -import io.usethesource.vallang.ISourceLocation; - -/** - * The terminal progress bar monitor wraps the standard output stream to be able to monitor - * output and keep the progress bars at the same place in the window while other prints happen - * asyncronously (or even in parallel). It can be passed to the IDEServices API such that - * clients can start progress bars, make them grow and end them using the API in util::Monitor. - * - * This gives the console the ability to show progress almost as clearly as an IDE can with a - * UI experience. - * - * This class only works correctly if the actual _raw_ output stream of the terminal is wrapped - * with an object of this class. - */ -public class TerminalProgressBarMonitor2 extends PrintWriter implements IRascalMonitor { - /** - * We administrate an ordered list of named bars, which will be printed from - * top to bottom just above the next prompt. - */ - private List bars = new LinkedList<>(); - - /** - * We also keep a list of currently unfinished lines (one for each thread). - * Since there are generally very few threads a simple list beats a hash-map in terms - * of memory allocation and possibly also lookup efficiency. - */ - private List unfinishedLines = new ArrayList<>(3); - - /** - * This writer is there to help with the encoding to what the terminal needs. It writes directly to the - * underlying stream. - */ - private final PrintWriter writer; - - /** - * The entire width in character columns of the current terminal. Resizes everytime when we start - * the first job. - */ - private int lineWidth; - - private final boolean unicodeEnabled; - - /**x - * Will make everything slow, but easier to spot mistakes - */ - private final boolean debug = false; - - /** - * Used to get updates to the width of the terminal - */ - private final Terminal tm; - - - @SuppressWarnings("resource") - public TerminalProgressBarMonitor2(Terminal tm) { - super(tm.writer()); - - this.tm = tm; - - this.writer = tm.writer(); - this.lineWidth = tm.getWidth(); - this.unicodeEnabled = tm.encoding().contains(StandardCharsets.UTF_8); - } - - /** - * Use this for debugging terminal cursor movements, step by step. - */ - private static class AlwaysFlushAlwaysShowCursor extends FilterWriter { - - public AlwaysFlushAlwaysShowCursor(PrintWriter out) { - super(out); - } - - @Override - public void write(int c) throws IOException { - out.write(c); - out.write(ANSI.showCursor()); - out.flush(); - } - - @Override - public void write(char[] cbuf, int off, int len) throws IOException { - out.write(cbuf, off, len); - out.write(ANSI.showCursor()); - out.flush(); - } - - @Override - public void write(String str, int off, int len) throws IOException { - out.write(str, off, len); - out.write(ANSI.showCursor()); - out.flush(); - } - } - - private static class UnfinishedLine { - final long threadId; - private int curCapacity = 512; - private char[] buffer = new char[curCapacity]; - private int curEnd = 0; - - public UnfinishedLine() { - this.threadId = Thread.currentThread().getId(); - } - - /** - * Adding input combines previously unfinished sentences with possible - * new (unfinished) sentences. - * - * The resulting buffer nevers contain any newline character. - */ - private void store(char[] newInput, int offset, int len) { - if (len == 0) { - return; // fast exit - } - - // first ensure capacity of the array - if (curEnd + len >= curCapacity) { - curCapacity *= 2; - buffer = Arrays.copyOf(buffer, curCapacity); - } - - System.arraycopy(newInput, offset, buffer, curEnd, len); - curEnd += len; - } - - /** - * Main workhorse looks for newline characters in the new input. - * - if there are newlines, than whatever is in the buffer can be flushed. - * - all the characters up to the last new new line are flushed immediately. - * - all the new characters after the last newline are buffered. - */ - public void write(char[] n, int offset, int len, PrintWriter out) { - int lastNL = startOfLastLine(n, offset, len); - - if (lastNL == -1) { - store(n, offset, len); - } - else { - flush(out); - out.write(n, offset, lastNL + 1); - store(n, lastNL + 1, len - (lastNL + 1)); - } - } - - /** - * Main workhorse looks for newline characters in the new input. - * - if there are newlines, than whatever is in the buffer can be flushed. - * - all the characters up to the last new new line are flushed immediately. - * - all the new characters after the last newline are buffered. - */ - public void write(String s, int offset, int len, PrintWriter out) { - write(s.toCharArray(), offset, len, out); - } - - /** - * This empties the current buffer onto the stream, - * and resets the cursor. - */ - private void flush(PrintWriter out) { - if (curEnd != 0) { - out.write(buffer, 0, curEnd); - curEnd = 0; - } - } - - /** - * Prints whatever is the last line in the buffer, - * and adds a newline. - */ - public void flushLastLine(PrintWriter out) { - if (curEnd != 0) { - flush(out); - out.write('\n'); - } - } - - private int startOfLastLine(char[] buffer, int offset, int len) { - for (int i = offset + len - 1; i >= offset; i--) { - if (buffer[i] == '\n') { - return i; - } - } - - return -1; - } - } - - /** - * Represents one currently running progress bar - */ - private class ProgressBar { - private final long threadId; - private final String threadName; - private final String name; - private int max; - private int current = 0; - private int previousWidth = 0; - private int doneWidth = 0; - private final int barWidthUnicode = lineWidth - "☐ ".length() - " 🕐 00:00:00.000 ".length(); - private final int barWidthAscii = lineWidth - "? ".length() - " - 00:00:00.000 ".length(); - private final Instant startTime; - private Duration duration; - private String message = ""; - - /** - * Stepper is incremented with every jobStep that has an visible effect on the progress bar. - * It is used to index into `clocks` or `twister` to create an animation effect. - */ - private int stepper = 1; - private final String[] clocks = new String[] {"🕐" , "🕑", "🕒", "🕓", "🕔", "🕕", "🕖", "🕗", "🕘", "🕙", "🕛"}; - private final String[] twister = new String[] {"." , ".", "o", "o", "O","O", "O", "o", "o", ".", "."}; - public int nesting = 0; - - ProgressBar(String name, int max) { - this.threadId = Thread.currentThread().getId(); - this.threadName = Thread.currentThread().getName(); - this.name = name; - this.max = Math.max(1, max); - this.startTime = Instant.now(); - this.duration = Duration.ZERO; - this.message = name; - } - - void worked(int amount, String message) { - if (current + amount > max) { - // Fixing this warning helps avoiding to flicker the tick sign on and off, and also makes the progress bar - // a more accurate depiction of the progress of the computation. - warning("Monitor of " + name + " is over max (" + max + ") by " + (current + amount - max), null); - } - - this.current = Math.min(current + amount, max); - this.duration = Duration.between(startTime, Instant.now()); - this.message = message; - } - - /** - * To avoid flickering of all bars at the same time, we only reprint - * the current bar - */ - void update() { - // to avoid flicker we only print if there is a new bar character to draw - if (newWidth() != previousWidth) { - stepper++; - writer.write(ANSI.moveUp(bars.size() - bars.indexOf(this))); - write(); // this moves the cursor already one line down due to `println` - int distance = bars.size() - bars.indexOf(this) - 1; - if (distance > 0) { - // ANSI will move 1 line even if the parameter is 0 - writer.write(ANSI.moveDown(distance)); - } - writer.flush(); - } - } - - int newWidth() { - if (max != 0) { - current = Math.min(max, current); // for robustness sake - var partDone = (current * 1.0) / (max * 1.0); - return (int) Math.floor(barWidthUnicode * partDone); - } - else { - return barWidthUnicode % stepper; - } - } - - /** - * Print the current state of the progress bar - */ - void write() { - previousWidth = doneWidth; - doneWidth = newWidth(); - - // var overWidth = barWidth - doneWidth; - var done = unicodeEnabled - ? (current >= max ? "☑ " : "☐ ") - : (current >= max ? "X " : "O ") - ; - - // capitalize - var msg = message.substring(0, 1).toUpperCase() + message.substring(1, message.length()); - - // fill up and cut off: - msg = threadLabel() + msg; - msg = (msg + " ".repeat(Math.max(0, barWidthUnicode - msg.length()))).substring(0, barWidthUnicode); - - // split - var barWidth = unicodeEnabled ? barWidthUnicode : barWidthAscii; - var frontPart = msg.substring(0, doneWidth); - var backPart = msg.substring(doneWidth, msg.length()); - var clock = unicodeEnabled ? clocks[stepper % clocks.length] : twister[stepper % twister.length]; - - if (barWidth < 1) { - return; // robustness against very small screens. At least don't throw bounds exceptions - } - else if (barWidth <= 3) { // we can print the clock for good measure - writer.println(clock); - return; - } - - var line - = done - + ANSI.darkBackground() - + frontPart - + ANSI.noBackground() - + ANSI.lightBackground() - + backPart - + ANSI.noBackground() - + " " + clock + " " - + String.format("%d:%02d:%02d.%03d", duration.toHoursPart(), duration.toMinutes(), duration.toSecondsPart(), duration.toMillisPart()) - + " " - ; - - writer.println(line); // note this puts us one line down - } - - private String threadLabel() { - if (threadName.isEmpty()) { - return ""; - } - else if ("main".equals(threadName)) { - return ""; - } - - return threadName + ": "; - } - - @Override - public boolean equals(Object obj) { - return obj instanceof ProgressBar - && ((ProgressBar) obj).name.equals(name) - && ((ProgressBar) obj).threadId == threadId - ; - } - - @Override - public int hashCode() { - return name.hashCode() + 31 * (int) threadId; - } - - public void done() { - this.current = Math.min(current, max); - this.duration = Duration.between(startTime, Instant.now()); - this.message = name; - } - } - - /** - * Clean the screen, ready for the next output (normal output or the next progress bars or both). - * We use fancy ANSI codes here to move the cursor and clean the screen to remove previous versions - * of the bars - */ - private void eraseBars() { - if (!bars.isEmpty()) { - writer.write(ANSI.moveUp(bars.size())); - writer.write(ANSI.clearToEndOfScreen()); - } - writer.flush(); - } - - /** - * ANSI escape codes convenience functions - */ - private static class ANSI { - - static String moveUp(int n) { - return "\u001B[" + n + "F"; - } - - public static String darkBackground() { - return "\u001B[48;5;248m"; - } - - public static String noBackground() { - return "\u001B[49m"; - } - - public static String lightBackground() { - return "\u001B[48;5;250m"; - } - - static String moveDown(int n) { - return "\u001B[" + n + "E"; - } - - static String clearToEndOfScreen() { - return "\u001B[0J"; - } - - static String hideCursor() { - return "\u001B[?25l"; - } - - static String showCursor() { - return "\u001B[?25h"; - } - } - - /** - * Simply print the bars. No cursor movement here. Hiding the cursor prevents flickering. - */ - private void printBars() { - if (bars.isEmpty()) { - // no more bars to show, so cursor goes back. - writer.write(ANSI.showCursor()); - } - - for (var pb : bars) { - pb.write(); - } - - writer.flush(); - } - - /** - * Find a bar in the ordered list of bars, by name. - * @param name of the bar - * @return the current instance by that name - */ - private ProgressBar findBarByName(String name) { - return bars.stream() - .filter(b -> b.threadId == Thread.currentThread().getId()) - .filter(b -> b.name.equals(name)).findFirst().orElseGet(() -> null); - } - - private UnfinishedLine findUnfinishedLine() { - return unfinishedLines.stream() - .filter(l -> l.threadId == Thread.currentThread().getId()) - .findAny() - .orElseGet(() -> { - UnfinishedLine l = new UnfinishedLine(); - unfinishedLines.add(l); - return l; - }); - } - - @Override - public synchronized void jobStart(String name, int workShare, int totalWork) { - if (bars.size() == 0) { - // first new job, we take time to react to window resizing - lineWidth = tm.getWidth(); - // remove the cursor - writer.write(ANSI.hideCursor()); - } - - var pb = findBarByName(name); - - if (pb == null) { - eraseBars(); // to make room for the new bars - bars.add(new ProgressBar(name, totalWork)); - printBars(); // probably one line longer than before! - } - else { - // Zeno-bar: we add the new work to the already existing work - pb.max += totalWork; - pb.nesting++; - pb.update(); - } - } - - @Override - public synchronized void jobStep(String name, String message, int workShare) { - ProgressBar pb = findBarByName(name); - - if (pb != null) { - pb.worked(workShare, message); - pb.update(); - } - } - - @Override - public synchronized int jobEnd(String name, boolean succeeded) { - var pb = findBarByName(name); - - if (pb != null && --pb.nesting == -1) { - eraseBars(); - // write it one last time into the scrollback buffer (on top) - pb.done(); - pb.write(); - bars.remove(pb); - // print the left over bars under this one. - printBars(); - return pb.current; - } - else if (pb != null) { - pb.done(); - pb.update(); - } - - return -1; - } - - @Override - public synchronized boolean jobIsCanceled(String name) { - // ? don't know what this should do - return false; - } - - @Override - public synchronized void jobTodo(String name, int work) { - ProgressBar pb = findBarByName(name); - - if (pb != null) { - pb.max += work; - pb.update(); - } - } - - @Override - public synchronized void warning(String message, ISourceLocation src) { - if (!bars.isEmpty()) { - eraseBars(); - } - writer.println(("[WARNING] " + (src != null ? (src + ": ") : "") + message)); - if (!bars.isEmpty()) { - printBars(); - } - } - - @Override - public void write(String s, int off, int len) { - if (!bars.isEmpty()) { - eraseBars(); - findUnfinishedLine().write(s, off, len, writer); - printBars(); - } - else { - writer.write(s, off, len); - } - } - - /** - * Here we make sure the progress bars are gone just before - * someone wants to print in the console. When the printing - * is ready, we simply add our own progress bars again. - */ - @Override - public synchronized void write(char[] cbuf, int off, int len) { - if (!bars.isEmpty()) { - eraseBars(); - findUnfinishedLine().write(cbuf, off, len, writer); - printBars(); - } - else { - writer.write(cbuf, off, len); - } - } - - /** - * Here we make sure the progress bars are gone just before - * someone wants to print in the console. When the printing - * is ready, we simply add our own progress bars again. - */ - @Override - public synchronized void write(int b) { - if (!bars.isEmpty()) { - eraseBars(); - findUnfinishedLine().write(new char[] { (char) b },0, 1, writer); - printBars(); - } - else { - writer.write(b); - } - } - - - - @Override - public synchronized void endAllJobs() { - for (var pb : bars) { - if (pb.nesting >= 0) { - writer.println("[INFO] " + pb.name + " is still at nesting level " + pb.nesting); - } - } - - bars.clear(); - for (UnfinishedLine l : unfinishedLines) { - l.flushLastLine(writer); - } - writer.write(ANSI.showCursor()); - writer.flush(); - } -} \ No newline at end of file diff --git a/src/org/rascalmpl/shell/RascalShell2.java b/src/org/rascalmpl/shell/RascalShell2.java index 616cc4bea9a..5bb3d3ea41c 100644 --- a/src/org/rascalmpl/shell/RascalShell2.java +++ b/src/org/rascalmpl/shell/RascalShell2.java @@ -50,6 +50,7 @@ import org.rascalmpl.interpreter.utils.RascalManifest; import org.rascalmpl.parser.gtd.exception.ParseError; import org.rascalmpl.repl.ReplTextWriter; +import org.rascalmpl.repl.TerminalProgressBarMonitor; import org.rascalmpl.repl.TerminalProgressBarMonitor2; import org.rascalmpl.uri.URIResolverRegistry; import org.rascalmpl.uri.URIUtil; @@ -87,7 +88,7 @@ public static void main(String[] args) throws IOException { .build(); //IRascalMonitor monitor = IRascalMonitor.buildConsoleMonitor(System.in, System.out, true); - var monitor = new TerminalProgressBarMonitor2(term); + var monitor = new TerminalProgressBarMonitor(term); // var monitor = new NullRascalMonitor() { // @Override @@ -102,8 +103,7 @@ public static void main(String[] args) throws IOException { GlobalEnvironment heap = new GlobalEnvironment(); ModuleEnvironment root = heap.addModule(new ModuleEnvironment(ModuleEnvironment.SHELL_MODULE, heap)); IValueFactory vf = ValueFactoryFactory.getValueFactory(); - Evaluator evaluator = new Evaluator(vf, new NullInputStream(), OutputStream.nullOutputStream(), OutputStream.nullOutputStream(), root, heap, monitor); - evaluator.overwritePrintWriter(monitor, new PrintWriter(monitor, true)); + Evaluator evaluator = new Evaluator(vf, term.reader(), new PrintWriter(System.err, true), term.writer(), root, heap, monitor); evaluator.addRascalSearchPathContributor(StandardLibraryContributor.getInstance()); URIResolverRegistry reg = URIResolverRegistry.getInstance(); From 91998c13b2c52f61390861795cedb8e2bb1bc1b3 Mon Sep 17 00:00:00 2001 From: Davy Landman Date: Thu, 24 Oct 2024 12:34:11 +0200 Subject: [PATCH 042/191] Got the first working repl to do multiline --- src/org/rascalmpl/debug/IRascalMonitor.java | 20 +- .../interpreter/BatchProgressMonitor.java | 8 +- .../{TermREPL.java => TermREPL.java_disabled} | 0 .../{BaseREPL.java => BaseREPL.java_disabled} | 0 src/org/rascalmpl/repl/BaseREPL2.java | 153 +++++++++ src/org/rascalmpl/repl/IOutputPrinter.java | 9 + src/org/rascalmpl/repl/IREPLService.java | 86 +++++ ...va => RascalInterpreterREPL.java_disabled} | 0 src/org/rascalmpl/repl/RascalLineParser.java | 275 ++++++++++++++++ .../rascalmpl/repl/RascalReplServices.java | 302 ++++++++++++++++++ ...va => SourceLocationHistory.java_disabled} | 0 .../repl/TerminalProgressBarMonitor.java | 40 ++- src/org/rascalmpl/shell/ModuleRunner.java | 6 +- src/org/rascalmpl/shell/ParseTest.java | 91 ++++++ ...PLRunner.java => REPLRunner.java_disabled} | 0 ...alShell.java => RascalShell.java_disabled} | 0 src/org/rascalmpl/shell/RascalShell2.java | 175 ++-------- .../infrastructure/RascalJUnitTestRunner.java | 25 +- test/org/rascalmpl/MatchFingerprintTest.java | 3 +- .../ParallelEvaluatorsTests.java | 4 +- 20 files changed, 999 insertions(+), 198 deletions(-) rename src/org/rascalmpl/library/util/{TermREPL.java => TermREPL.java_disabled} (100%) rename src/org/rascalmpl/repl/{BaseREPL.java => BaseREPL.java_disabled} (100%) mode change 100755 => 100644 create mode 100644 src/org/rascalmpl/repl/BaseREPL2.java create mode 100644 src/org/rascalmpl/repl/IOutputPrinter.java create mode 100644 src/org/rascalmpl/repl/IREPLService.java rename src/org/rascalmpl/repl/{RascalInterpreterREPL.java => RascalInterpreterREPL.java_disabled} (100%) create mode 100644 src/org/rascalmpl/repl/RascalLineParser.java create mode 100644 src/org/rascalmpl/repl/RascalReplServices.java rename src/org/rascalmpl/repl/{SourceLocationHistory.java => SourceLocationHistory.java_disabled} (100%) create mode 100644 src/org/rascalmpl/shell/ParseTest.java rename src/org/rascalmpl/shell/{REPLRunner.java => REPLRunner.java_disabled} (100%) mode change 100755 => 100644 rename src/org/rascalmpl/shell/{RascalShell.java => RascalShell.java_disabled} (100%) diff --git a/src/org/rascalmpl/debug/IRascalMonitor.java b/src/org/rascalmpl/debug/IRascalMonitor.java index 06452422f98..add6dd439df 100644 --- a/src/org/rascalmpl/debug/IRascalMonitor.java +++ b/src/org/rascalmpl/debug/IRascalMonitor.java @@ -15,18 +15,21 @@ import java.io.InputStream; import java.io.OutputStream; import java.io.PrintStream; +import java.io.PrintWriter; +import java.io.Reader; import java.util.function.BiConsumer; import java.util.function.BiFunction; import java.util.function.Function; import java.util.function.Supplier; + +import org.jline.terminal.Terminal; +import org.jline.utils.InfoCmp.Capability; import org.rascalmpl.interpreter.BatchProgressMonitor; import org.rascalmpl.interpreter.NullRascalMonitor; import org.rascalmpl.repl.TerminalProgressBarMonitor; import io.usethesource.vallang.ISourceLocation; -import jline.Terminal; -import jline.TerminalFactory; public interface IRascalMonitor { /** @@ -158,8 +161,8 @@ default void jobStep(String name, String message) { * and otherwise default to a dumn terminal console progress logger. * @return */ - public static IRascalMonitor buildConsoleMonitor(InputStream in, OutputStream out) { - return buildConsoleMonitor(in, out, inBatchMode()); + public static IRascalMonitor buildConsoleMonitor(Terminal term) { + return buildConsoleMonitor(term, inBatchMode()); } public static boolean inBatchMode() { @@ -168,12 +171,11 @@ public static boolean inBatchMode() { ; } - public static IRascalMonitor buildConsoleMonitor(InputStream in, OutputStream out, boolean batchMode) { - Terminal terminal = TerminalFactory.get(); + public static IRascalMonitor buildConsoleMonitor(Terminal terminal, boolean batchMode) { - return !batchMode && terminal.isAnsiSupported() - ? new TerminalProgressBarMonitor(out, in, terminal) - : new BatchProgressMonitor(new PrintStream(out)) + return !batchMode && TerminalProgressBarMonitor.shouldWorkIn(terminal) + ? new TerminalProgressBarMonitor(terminal) + : new BatchProgressMonitor(terminal.writer()) ; } diff --git a/src/org/rascalmpl/interpreter/BatchProgressMonitor.java b/src/org/rascalmpl/interpreter/BatchProgressMonitor.java index 82793b67d80..43e3768d2c8 100644 --- a/src/org/rascalmpl/interpreter/BatchProgressMonitor.java +++ b/src/org/rascalmpl/interpreter/BatchProgressMonitor.java @@ -24,11 +24,15 @@ public class BatchProgressMonitor implements IRascalMonitor { PrintWriter out; public BatchProgressMonitor() { - this.out = new PrintWriter(System.err); + this(new PrintWriter(System.err, true)); } public BatchProgressMonitor(PrintStream out) { - this.out = new PrintWriter(out); + this(new PrintWriter(out)); + } + + public BatchProgressMonitor(PrintWriter out) { + this.out = out; } @Override diff --git a/src/org/rascalmpl/library/util/TermREPL.java b/src/org/rascalmpl/library/util/TermREPL.java_disabled similarity index 100% rename from src/org/rascalmpl/library/util/TermREPL.java rename to src/org/rascalmpl/library/util/TermREPL.java_disabled diff --git a/src/org/rascalmpl/repl/BaseREPL.java b/src/org/rascalmpl/repl/BaseREPL.java_disabled old mode 100755 new mode 100644 similarity index 100% rename from src/org/rascalmpl/repl/BaseREPL.java rename to src/org/rascalmpl/repl/BaseREPL.java_disabled diff --git a/src/org/rascalmpl/repl/BaseREPL2.java b/src/org/rascalmpl/repl/BaseREPL2.java new file mode 100644 index 00000000000..28ef7bf90c3 --- /dev/null +++ b/src/org/rascalmpl/repl/BaseREPL2.java @@ -0,0 +1,153 @@ +package org.rascalmpl.repl; + +import java.io.IOException; +import java.io.PrintWriter; +import java.util.HashMap; + +import org.checkerframework.checker.nullness.qual.MonotonicNonNull; +import org.jline.reader.LineReader; +import org.jline.reader.LineReaderBuilder; +import org.jline.reader.UserInterruptException; +import org.jline.reader.LineReader.Option; +import org.jline.reader.impl.completer.AggregateCompleter; +import org.jline.reader.impl.history.DefaultHistory; +import org.jline.terminal.Terminal; +import org.jline.utils.ShutdownHooks; + +public class BaseREPL2 { + + private final IREPLService replService; + private final Terminal term; + private final LineReader reader; + private volatile boolean keepRunning = true; + private final @MonotonicNonNull DefaultHistory history; + private String currentPrompt; + private static final String FALLBACK_MIME_TYPE = "text/plain"; + private static final String ANSI_MIME_TYPE = "text/x-ansi"; + private final boolean ansiSupported; + private final String mimeType; + + public BaseREPL2(IREPLService replService, Terminal term) { + this.replService = replService; + this.term = term; + + var reader = LineReaderBuilder.builder() + .appName(replService.name()) + .terminal(term) + .parser(replService.inputParser()) + ; + + if (replService.storeHistory()) { + reader.variable(LineReader.HISTORY_FILE, replService.historyFile()); + this.history = new DefaultHistory(); + reader.history(this.history); + ShutdownHooks.add(this.history::save); + } else { + this.history = null; + } + reader.option(Option.HISTORY_IGNORE_DUPS, replService.historyIgnoreDuplicates()); + + if (replService.supportsCompletion()) { + reader.completer(new AggregateCompleter(replService.completers())); + } + + switch (term.getType()) { + case Terminal.TYPE_DUMB: + this.ansiSupported = false; + this.mimeType = FALLBACK_MIME_TYPE; + break; + case Terminal.TYPE_DUMB_COLOR: + this.ansiSupported = false; + this.mimeType = ANSI_MIME_TYPE; + break; + default: + this.ansiSupported = true; + this.mimeType = ANSI_MIME_TYPE; + break; + } + this.currentPrompt = replService.prompt(ansiSupported); + reader.variable(LineReader.SECONDARY_PROMPT_PATTERN, replService.parseErrorPrompt(ansiSupported)); + + this.reader = reader.build(); + + + + // todo: + // - ctrl + c support + // - ctrl + / support + // - multi-line input + // - highlighting in the prompt? + // - + + } + + public void run() throws IOException { + try { + replService.connect(term); + while (keepRunning) { + String line = reader.readLine(this.currentPrompt); + if (line == null) { + // EOF + break; + } + try { + handleInput(line); + } + catch (UserInterruptException u) { + reader.printAbove(""); + term.flush(); + replService.handleReset(new HashMap<>(), new HashMap<>()); + } + } + } + catch (InterruptedException _e) { + // closing the runner + } + catch (Throwable e) { + + var err = replService.errorWriter(); + if (err.checkError()) { + err = new PrintWriter(System.err, false); + } + + err.println("Unexpected (uncaught) exception, closing the REPL: "); + err.print(e.toString()); + e.printStackTrace(err); + + err.flush(); + + throw e; + } + finally { + try { + replService.flush(); + } catch (Throwable _t) { /* ignore */ } + term.flush(); + if (this.history != null) { + ShutdownHooks.remove(this.history::save); + this.history.save(); + } + } + } + + + private void handleInput(String line) throws InterruptedException { + var result = new HashMap(); + var meta = new HashMap(); + replService.handleInput(line, result, meta); + writeResult(result); + } + + private void writeResult(HashMap result) { + var writer = result.get(this.mimeType); + if (writer == null) { + writer = result.get(FALLBACK_MIME_TYPE); + } + if (writer == null) { + replService.outputWriter().println("Ok"); + } + else { + writer.write(replService.outputWriter()); + } + } +} diff --git a/src/org/rascalmpl/repl/IOutputPrinter.java b/src/org/rascalmpl/repl/IOutputPrinter.java new file mode 100644 index 00000000000..b2158b3b5c1 --- /dev/null +++ b/src/org/rascalmpl/repl/IOutputPrinter.java @@ -0,0 +1,9 @@ +package org.rascalmpl.repl; + +import java.io.PrintWriter; +import java.io.Reader; + +public interface IOutputPrinter { + void write(PrintWriter target); + Reader asReader(); +} diff --git a/src/org/rascalmpl/repl/IREPLService.java b/src/org/rascalmpl/repl/IREPLService.java new file mode 100644 index 00000000000..0e062e20b13 --- /dev/null +++ b/src/org/rascalmpl/repl/IREPLService.java @@ -0,0 +1,86 @@ +package org.rascalmpl.repl; + +import java.io.PrintWriter; +import java.nio.file.Path; +import java.util.Collections; +import java.util.List; +import java.util.Map; + +import org.jline.reader.Completer; +import org.jline.reader.Parser; +import org.jline.reader.impl.DefaultParser; +import org.jline.terminal.Terminal; + +public interface IREPLService { + + String MIME_PLAIN = "text/plain"; + String MIME_ANSI = "text/x-ansi"; + + default boolean supportsCompletion() { + return false; + } + + /** + * Supply completers for this REPL. + * Note that a completor is only triggered on a per word basis, so you might want to overwrite {@see #completionParser()} + */ + default List completers() { + return Collections.emptyList(); + } + + /** + * This parser is respossible for multi-line support, as well as word splitting for completion. + */ + default Parser inputParser() { + return new DefaultParser(); + } + + + default boolean storeHistory() { + return false; + } + + default boolean historyIgnoreDuplicates() { + return true; + } + + default Path historyFile() { + throw new IllegalAccessError("Not implemented if storeHistory is false"); + } + + /** + * Name of the REPL, no ansi allowed + */ + default String name() { return "Rascal REPL"; } + + + /** + * Check if an input is valid, for multi-line support + */ + boolean isInputComplete(String input); + + + // todo see if we really need the meta-data + void handleInput(String input, Map output, Map metadata) throws InterruptedException; + + + // todo see if we really need the meta-data + void handleReset(Map output, Map metadata) throws InterruptedException; + + /** + * Default prompt + */ + String prompt(boolean ansiSupported); + /** + * Continuation prompt + */ + String parseErrorPrompt(boolean ansiSupported); + + void connect(Terminal term); + + PrintWriter errorWriter(); + PrintWriter outputWriter(); + + void flush(); + +} diff --git a/src/org/rascalmpl/repl/RascalInterpreterREPL.java b/src/org/rascalmpl/repl/RascalInterpreterREPL.java_disabled similarity index 100% rename from src/org/rascalmpl/repl/RascalInterpreterREPL.java rename to src/org/rascalmpl/repl/RascalInterpreterREPL.java_disabled diff --git a/src/org/rascalmpl/repl/RascalLineParser.java b/src/org/rascalmpl/repl/RascalLineParser.java new file mode 100644 index 00000000000..54a06549ff2 --- /dev/null +++ b/src/org/rascalmpl/repl/RascalLineParser.java @@ -0,0 +1,275 @@ +package org.rascalmpl.repl; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.Supplier; +import java.util.regex.Pattern; +import java.util.stream.Collectors; + +import org.checkerframework.checker.nullness.qual.MonotonicNonNull; +import org.checkerframework.checker.nullness.qual.Nullable; +import org.jline.reader.EOFError; +import org.jline.reader.ParsedLine; +import org.jline.reader.Parser; +import org.jline.reader.SyntaxError; +import org.rascalmpl.interpreter.IEvaluator; +import org.rascalmpl.interpreter.NullRascalMonitor; +import org.rascalmpl.parser.gtd.exception.ParseError; +import org.rascalmpl.uri.URIUtil; +import org.rascalmpl.values.parsetrees.ITree; +import org.rascalmpl.values.parsetrees.TreeAdapter; + +import io.usethesource.vallang.ISourceLocation; + +public class RascalLineParser implements Parser { + + private static final ISourceLocation PROMPT_LOCATION = URIUtil.rootLocation("prompt"); + private final Supplier> eval; + + public RascalLineParser(Supplier> eval) { + this.eval = eval; + } + + @Override + public ParsedLine parse(String line, int cursor, ParseContext context) throws SyntaxError { + switch (context) { + case UNSPECIFIED: // TODO: check if this is correct + case ACCEPT_LINE: + // we have to verify the input is correct rascal statement + return parseFullRascalCommand(line, cursor); + case COMPLETE: + try { + // lets see, maybe it parses as a rascal expression + return parseFullRascalCommand(line, cursor); + } + catch (EOFError e) { + // otherwise fallback to regex party + return splitWordsOnly(line, cursor); + } + case SECONDARY_PROMPT: + throw new SyntaxError(-1, -1, "Unsupported SECONDARY_PROMPT"); + case SPLIT_LINE: + throw new SyntaxError(-1, -1, "Unsupported SPLIT_LINE"); + default: + throw new UnsupportedOperationException("Unimplemented context: " + context); + } + } + + private ParsedLine splitWordsOnly(String line, int cursor) { + // small line parser, in the future we might be able to use error recovery + var words = new ArrayList(); + parseWords(line, 0, words); + return new ParsedLine() { + private final @MonotonicNonNull LexedWord atCursor = words.stream() + .filter(l -> l.cursorInside(cursor)) + .findFirst() + .orElse(null); + @Override + public String word() { + return atCursor == null ? "" : atCursor.word(); + } + + @Override + public int wordCursor() { + return atCursor == null ? -1 : (cursor - atCursor.begin); + } + + @Override + public int wordIndex() { + return atCursor == null ? -1 : words.indexOf(atCursor); + } + + @Override + public List words() { + return words.stream() + .map(LexedWord::word) + .collect(Collectors.toList()); + } + + @Override + public String line() { + return line; + } + + @Override + public int cursor() { + return cursor; + } + + }; + } + + private void parseWords(String buffer, int position, List words) { + /** are we interpolating inside of a string */ + boolean inString = false; + boolean inLocation = false; + while (position < buffer.length()) { + position = eatWhiteSpace(buffer, position); + if (position >= buffer.length()) { + return; + } + char c = buffer.charAt(position); + boolean isWord = true; + int wordEnd = position; + if (c == '"' || (c == '>' && inString)) { + wordEnd = parseEndedAfter(buffer, position, RASCAL_STRING); + inString = wordEnd != position && buffer.charAt(wordEnd - 1) != '"'; + isWord = false; + } + else if (c == '|' || (c == '>' && inLocation)) { + wordEnd = parseEndedAfter(buffer, position, RASCAL_LOCATION); + inLocation = wordEnd != position && buffer.charAt(position - 1) == '<'; + } + else if (Character.isJavaIdentifierPart(c) || c == ':' || c == '\\') { + wordEnd = parseEndedAfter(buffer, position, RASCAL_NAME_OR_COMMAND); + } + else { + wordEnd++; + isWord = false; + } + + if (wordEnd == position) { + wordEnd = buffer.length(); + } + + if (isWord) { + words.add(new LexedWord(buffer, position, wordEnd)); + } + position = wordEnd; + } + } + + private static class LexedWord { + + private final String buffer; + private final int begin; + private final int end; + + public LexedWord(String buffer, int begin, int end) { + this.buffer = buffer; + this.begin = begin; + this.end = end; + } + + public boolean cursorInside(int cursor) { + // TODO: review around edges + return begin <= cursor && cursor <= end; + } + + String word() { + return buffer.substring(begin, end); + } + } + + private static int parseEndedAfter(String buffer, int position, Pattern parser) { + var matcher = parser.matcher(buffer); + matcher.region(position, buffer.length()); + if (!matcher.find()) { + return position; + } + return position + matcher.end(); + } + + // strings with rudementary interpolation support + private static final Pattern RASCAL_STRING + = Pattern.compile("^[\">]([^\"<\\\\]|([\\\\].))*[\"<]"); + // locations with rudementary interpolation support + private static final Pattern RASCAL_LOCATION + = Pattern.compile("^[\\|\\>][^\\|\\<\\t-\\n\\r ]*[\\|\\<]?"); + + private static final Pattern RASCAL_NAME_OR_COMMAND + = Pattern.compile("^(([:]?[A-Za-z_][A-Za-z0-9_]*)|([\\\\][A-Za-z_][\\-A-Za-z0-9_]*))"); + + // only unicode spaces & multi-line comments + private static final Pattern RASCAL_WHITE_SPACE + = Pattern.compile("^(\\p{Zs}|([/][*]([^*]|([*][^/]))*[*][/]))*"); + + private int eatWhiteSpace(String buffer, int position) { + return parseEndedAfter(buffer, position, RASCAL_WHITE_SPACE); + } + + private ParsedLine parseFullRascalCommand(String line, int cursor) throws SyntaxError { + // TODO: to support inline highlighting, we have to remove the ansi escapes before parsing + try { + return translateTree(eval.get().parseCommand(new NullRascalMonitor(), line, PROMPT_LOCATION), line, cursor); + } + catch (ParseError pe) { + throw new EOFError(pe.getBeginLine(), pe.getBeginColumn(), "Parse error"); + } + catch (Throwable e) { + throw new EOFError(-1, -1, "Unexpected failure during pasing of the command: " + e.getMessage()); + } + } + + private ParsedLine translateTree(ITree command, String line, int cursor) { + // todo: return CompletingParsedLine so that we can also help with quoting completion + return new ParsedLine() { + List wordList = null; + ITree wordTree = null; + + private ITree cursorTree() { + if (wordTree == null) { + wordTree = (ITree)TreeAdapter.locateLexical(command, cursor); + if (wordTree == null) { + wordTree = command; + } + } + return wordTree; + } + + private List wordList() { + if (wordList == null) { + wordList = new ArrayList<>(); + collectWords(command, wordList); + } + return wordList; + } + + private void collectWords(ITree t, List words) { + if (TreeAdapter.isLexical(t)) { + words.add(t); + } + else if (TreeAdapter.isSort(t)) { + for (var c : t.getArgs()) { + if (c instanceof ITree) { + collectWords((ITree)c, words); + } + } + } + } + + @Override + public String word() { + return TreeAdapter.yield(cursorTree()); + } + + @Override + public int wordCursor() { + return cursor - TreeAdapter.getLocation(cursorTree()).getOffset(); + } + + @Override + public int wordIndex() { + return wordList().indexOf(cursorTree()); + } + + @Override + public List words() { + return wordList() + .stream() + .map(TreeAdapter::yield) + .collect(Collectors.toList()); + } + + @Override + public String line() { + return line; + } + + @Override + public int cursor() { + return cursor; + } + }; + } +} diff --git a/src/org/rascalmpl/repl/RascalReplServices.java b/src/org/rascalmpl/repl/RascalReplServices.java new file mode 100644 index 00000000000..0407c91dfa3 --- /dev/null +++ b/src/org/rascalmpl/repl/RascalReplServices.java @@ -0,0 +1,302 @@ +package org.rascalmpl.repl; + +import static org.rascalmpl.interpreter.utils.ReadEvalPrintDialogMessages.parseErrorMessage; +import static org.rascalmpl.interpreter.utils.ReadEvalPrintDialogMessages.staticErrorMessage; +import static org.rascalmpl.interpreter.utils.ReadEvalPrintDialogMessages.throwMessage; +import static org.rascalmpl.interpreter.utils.ReadEvalPrintDialogMessages.throwableMessage; + +import java.io.IOException; +import java.io.PrintWriter; +import java.io.Reader; +import java.io.StringReader; +import java.io.StringWriter; +import java.io.Writer; +import java.util.Map; +import java.util.Objects; +import java.util.function.Function; + +import org.jline.jansi.Ansi; +import org.jline.reader.Parser; +import org.jline.terminal.Terminal; +import org.jline.utils.InfoCmp.Capability; +import org.rascalmpl.exceptions.Throw; +import org.rascalmpl.interpreter.Evaluator; +import org.rascalmpl.interpreter.control_exceptions.InterruptException; +import org.rascalmpl.interpreter.control_exceptions.QuitException; +import org.rascalmpl.interpreter.result.IRascalResult; +import org.rascalmpl.interpreter.result.Result; +import org.rascalmpl.interpreter.staticErrors.StaticError; +import org.rascalmpl.parser.gtd.exception.ParseError; +import org.rascalmpl.uri.URIUtil; +import org.rascalmpl.values.RascalValueFactory; +import org.rascalmpl.values.parsetrees.TreeAdapter; + +import io.usethesource.vallang.IConstructor; +import io.usethesource.vallang.IString; +import io.usethesource.vallang.IValue; +import io.usethesource.vallang.io.StandardTextWriter; +import io.usethesource.vallang.type.Type; + +public class RascalReplServices implements IREPLService { + private final Function buildEvaluator; + private Evaluator eval; + private static final StandardTextWriter ansiIndentedPrinter = new ReplTextWriter(true); + private static final StandardTextWriter plainIndentedPrinter = new StandardTextWriter(true); + private final static int LINE_LIMIT = 200; + private final static int CHAR_LIMIT = LINE_LIMIT * 20; + private String newline = System.lineSeparator(); + + + public RascalReplServices(Function buildEvaluator) { + super(); + this.buildEvaluator = buildEvaluator; + } + + @Override + public void connect(Terminal term) { + if (eval != null) { + throw new IllegalStateException("REPL is already initialized"); + } + newline = term.getStringCapability(Capability.newline); + if (newline == null) { + newline = System.lineSeparator(); + } + this.eval = buildEvaluator.apply(term); + } + + @Override + public Parser inputParser() { + return new RascalLineParser(() -> eval); + } + + @Override + public boolean isInputComplete(String input) { + throw new UnsupportedOperationException("Unimplemented method 'isInputComplete'"); + } + + + @Override + public void handleInput(String input, Map output, Map metadata) + throws InterruptedException { + synchronized(eval) { + Objects.requireNonNull(eval, "Not initialized yet"); + try { + Result value; + value = eval.eval(eval.getMonitor(), input, URIUtil.rootLocation("prompt")); + outputResult(output, value); + } + catch (InterruptException ex) { + reportError(output, (w, sw) -> { + w.println("Interrupted"); + ex.getRascalStackTrace().prettyPrintedString(w, sw); + }); + } + catch (ParseError pe) { + reportError(output, (w, sw) -> { + parseErrorMessage(w, input, "prompt", pe, sw); + }); + } + catch (StaticError e) { + reportError(output, (w, sw) -> { + staticErrorMessage(w, e, sw); + }); + } + catch (Throw e) { + reportError(output, (w, sw) -> { + throwMessage(w,e, sw); + }); + } + catch (QuitException q) { + reportError(output, (w, sw) -> { + w.println("Quiting REPL"); + }); + } + catch (Throwable e) { + reportError(output, (w, sw) -> { + throwableMessage(w, e, eval.getStackTrace(), sw); + }); + } + } + } + + private void outputResult(Map output, IRascalResult result) { + if (result == null || result.getValue() == null) { + output.put(MIME_PLAIN, new StringOutputPrinter("ok", newline)); + return; + } + IValue value = result.getValue(); + Type type = result.getStaticType(); + + if (type.isSubtypeOf(RascalValueFactory.Content) && !type.isBottom()) { + output.put(MIME_PLAIN, new StringOutputPrinter("Serving content", newline)); + // TODO: serve content! + return; + } + + ThrowingWriter resultWriter; + if (type.isAbstractData() && type.isStrictSubtypeOf(RascalValueFactory.Tree) && !type.isBottom()) { + resultWriter = (w, sw) -> { + w.write("(" + type.toString() +") `"); + TreeAdapter.yield((IConstructor)value, sw == ansiIndentedPrinter, w); + w.write("`"); + }; + } + else if (type.isString()) { + resultWriter = (w, sw) -> { + // TODO: do something special for the reader version of IString, when that is released + // for now, we only support write + + try (Writer wrt = new LimitedWriter(new LimitedLineWriter(w, LINE_LIMIT), CHAR_LIMIT)) { + sw.write(value, wrt); + } + catch (/*IOLimitReachedException*/ RuntimeException e) { + // ignore since this is what we wanted + // if we catch IOLimitReachedException we get an IllegalArgument exception instead + // "Self-suppression not permitted" + } + w.println(); + w.println("---"); + try (Writer wrt = new LimitedWriter(new LimitedLineWriter(w, LINE_LIMIT), CHAR_LIMIT)) { + ((IString) value).write(wrt); + } + catch (/*IOLimitReachedException*/ RuntimeException e) { + // ignore since this is what we wanted + // if we catch IOLimitReachedException we get an IllegalArgument exception instead + // "Self-suppression not permitted" + } + w.println(); + w.print("---"); + }; + } + else { + resultWriter = (w, sw) -> { + try (Writer wrt = new LimitedWriter(new LimitedLineWriter(w, LINE_LIMIT), CHAR_LIMIT)) { + sw.write(value, wrt); + } + catch (/*IOLimitReachedException*/ RuntimeException e) { + // ignore since this is what we wanted + // if we catch IOLimitReachedException we get an IllegalArgument exception instead + // "Self-suppression not permitted" + } + }; + } + + ThrowingWriter typePrefixed = (w, sw) -> { + w.write(type.toString()); + w.write(": "); + resultWriter.write(w, sw); + w.println(); + }; + + output.put(MIME_PLAIN, new ExceptionPrinter(typePrefixed, plainIndentedPrinter)); + output.put(MIME_ANSI, new ExceptionPrinter(typePrefixed, ansiIndentedPrinter)); + + } + + private static void reportError(Map output, ThrowingWriter writer) { + output.put(MIME_PLAIN, new ExceptionPrinter(writer, plainIndentedPrinter)); + output.put(MIME_ANSI, new ExceptionPrinter(writer, ansiIndentedPrinter)); + } + + @FunctionalInterface + private static interface ThrowingWriter { + void write(PrintWriter writer, StandardTextWriter prettyPrinter) throws IOException; + } + + private static class ExceptionPrinter implements IOutputPrinter { + private final ThrowingWriter internalWriter; + private final StandardTextWriter prettyPrinter; + + public ExceptionPrinter(ThrowingWriter internalWriter, StandardTextWriter prettyPrinter) { + this.internalWriter = internalWriter; + this.prettyPrinter = prettyPrinter; + } + + @Override + public Reader asReader() { + try (var result = new StringWriter()) { + try (var resultWriter = new PrintWriter(result)) { + write(resultWriter); + } + return new StringReader(result.toString()); + } + catch (IOException ex) { + throw new IllegalStateException("StringWriter close should never throw exception", ex); + } + } + + @Override + public void write(PrintWriter target) { + try { + internalWriter.write(target, prettyPrinter); + } + catch (IOException e) { + target.println("Internal failure: printing exception failed with:"); + target.println(e.toString()); + e.printStackTrace(target); + } + } + } + + private static class StringOutputPrinter implements IOutputPrinter { + private final String value; + private final String newline; + + public StringOutputPrinter(String value, String newline) { + this.value = value; + this.newline = newline; + } + + @Override + public void write(PrintWriter target) { + target.println(value); + } + + @Override + public Reader asReader() { + return new StringReader(value + newline); + } + } + + @Override + public void handleReset(Map output, Map metadata) + throws InterruptedException { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'handleReset'"); + } + + @Override + public String prompt(boolean ansiSupported) { + if (ansiSupported) { + return Ansi.ansi().reset().bold() + "rascal>" + Ansi.ansi().reset(); + } + return "rascal>"; + } + + @Override + public String parseErrorPrompt(boolean ansiSupported) { + if (ansiSupported) { + return Ansi.ansi().reset().bold() + ">>>>>>>" + Ansi.ansi().reset(); + } + return ">>>>>>>"; + } + + + @Override + public PrintWriter errorWriter() { + return eval.getStdErr(); + } + + @Override + public PrintWriter outputWriter() { + return eval.getStdOut(); + } + + @Override + public void flush() { + // TODO figure out why this function is called? + eval.getStdErr().flush(); + eval.getStdOut().flush(); + } + +} diff --git a/src/org/rascalmpl/repl/SourceLocationHistory.java b/src/org/rascalmpl/repl/SourceLocationHistory.java_disabled similarity index 100% rename from src/org/rascalmpl/repl/SourceLocationHistory.java rename to src/org/rascalmpl/repl/SourceLocationHistory.java_disabled diff --git a/src/org/rascalmpl/repl/TerminalProgressBarMonitor.java b/src/org/rascalmpl/repl/TerminalProgressBarMonitor.java index d5175da570c..0174bdf67a8 100644 --- a/src/org/rascalmpl/repl/TerminalProgressBarMonitor.java +++ b/src/org/rascalmpl/repl/TerminalProgressBarMonitor.java @@ -10,6 +10,7 @@ import java.util.List; import org.jline.terminal.Terminal; +import org.jline.utils.InfoCmp.Capability; import org.rascalmpl.debug.IRascalMonitor; import io.usethesource.vallang.ISourceLocation; @@ -61,6 +62,13 @@ public class TerminalProgressBarMonitor extends PrintWriter implements IRascalMo */ private final Terminal tm; + public static boolean shouldWorkIn(Terminal tm) { + return "\r".equals(tm.getStringCapability(Capability.carriage_return)) + && tm.getNumericCapability(Capability.columns) != null + && tm.getNumericCapability(Capability.lines) != null + && ANSI.supportsCapabilities(tm); + } + @SuppressWarnings("resource") public TerminalProgressBarMonitor(Terminal tm) { @@ -194,10 +202,10 @@ private int startOfLastLine(char[] buffer, int offset, int len) { } private void rawPrintln(String s) { - super.println(s); + rawWrite(s + System.lineSeparator()); } private void rawWrite(String s) { - super.write(s); + rawWrite(s, 0, s.length()); } private void rawWrite(int c) { @@ -388,6 +396,14 @@ private void eraseBars() { */ private static class ANSI { + private static boolean supportsCapabilities(Terminal tm) { + Integer cols = tm.getNumericCapability(Capability.max_colors); + if (cols == null || cols < 8) { + return false; + } + return tm.getStringCapability(Capability.clear_screen) != null; + } + public static String grey8Background() { return "\u001B[48;5;240m"; } @@ -396,26 +412,10 @@ public static String brightWhiteForeground() { return "\u001B[97m"; } - public static String delete() { - return "\u001B[D\u001B[K"; - } - static String moveUp(int n) { return "\u001B[" + n + "F"; } - static String overlined() { - return "\u001B[53m"; - } - - static String underlined() { - return "\u001B[4m"; - } - - public static String printCursorPosition() { - return "\u001B[6n"; - } - public static String noBackground() { return "\u001B[49m"; } @@ -424,10 +424,6 @@ public static String normal() { return "\u001B[0m"; } - public static String lightBackground() { - return "\u001B[48;5;250m"; - } - static String moveDown(int n) { return "\u001B[" + n + "E"; } diff --git a/src/org/rascalmpl/shell/ModuleRunner.java b/src/org/rascalmpl/shell/ModuleRunner.java index 450375f1335..03f929ca05b 100644 --- a/src/org/rascalmpl/shell/ModuleRunner.java +++ b/src/org/rascalmpl/shell/ModuleRunner.java @@ -1,8 +1,8 @@ package org.rascalmpl.shell; import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; +import java.io.PrintWriter; +import java.io.Reader; import org.rascalmpl.debug.IRascalMonitor; import org.rascalmpl.interpreter.Evaluator; @@ -15,7 +15,7 @@ public class ModuleRunner implements ShellRunner { private final Evaluator eval; - public ModuleRunner(InputStream input, OutputStream stdout, OutputStream stderr, IRascalMonitor monitor) { + public ModuleRunner(Reader input, PrintWriter stdout, PrintWriter stderr, IRascalMonitor monitor) { eval = ShellEvaluatorFactory.getDefaultEvaluator(input, stdout, stderr, monitor); } diff --git a/src/org/rascalmpl/shell/ParseTest.java b/src/org/rascalmpl/shell/ParseTest.java new file mode 100644 index 00000000000..ba93355ccc3 --- /dev/null +++ b/src/org/rascalmpl/shell/ParseTest.java @@ -0,0 +1,91 @@ +package org.rascalmpl.shell; + +import java.io.IOException; +import java.net.URISyntaxException; +import java.util.AbstractMap; +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; +import java.util.Map.Entry; +import java.util.concurrent.TimeUnit; +import java.util.Queue; + +import org.rascalmpl.library.Prelude; +import org.rascalmpl.library.lang.rascal.syntax.RascalParser; +import org.rascalmpl.parser.Parser; +import org.rascalmpl.parser.gtd.result.out.DefaultNodeFlattener; +import org.rascalmpl.parser.uptr.UPTRNodeFactory; +import org.rascalmpl.parser.uptr.action.NoActionExecutor; +import org.rascalmpl.uri.URIResolverRegistry; +import org.rascalmpl.uri.URIUtil; +import org.rascalmpl.values.parsetrees.ITree; +import org.rascalmpl.values.parsetrees.TreeAdapter; + +import io.usethesource.vallang.IConstructor; +import io.usethesource.vallang.ISourceLocation; + +public class ParseTest { + + private static ITree parseFile(ISourceLocation f, char[] data) { + return new RascalParser().parse(Parser.START_MODULE, f.getURI(), data, new NoActionExecutor(), + new DefaultNodeFlattener(), new UPTRNodeFactory(true)); + } + + private static void progress(String s, Object... args) { + System.err.println(String.format(s, args)); + } + + private static List> findFiles() throws URISyntaxException, IOException { + final var reg = URIResolverRegistry.getInstance(); + Queue worklist = new LinkedList<>(); + worklist.add(URIUtil.correctLocation("cwd", null, "/src")); + // URIUtil.createFileLocation("d:\\swat.engineering\\rascal\\rascal\\src")); + List> result = new ArrayList<>(); + ISourceLocation next; + while ((next = worklist.poll()) != null) { + var children = reg.list(next); + for (var c: children) { + if (reg.isDirectory(c)) { + worklist.add(c); + } + else if (c.getPath().endsWith(".rsc")) { + try (var r = reg.getCharacterReader(c)) { + result.add(new AbstractMap.SimpleEntry<>(c, Prelude.consumeInputStream(r).toCharArray())); + } + } + } + } + return result; + + + } + + static final int parsingRounds = 10; + static final int warmupRounds = 2; + + public static void main(String[] args) throws URISyntaxException, IOException { + progress("Collecting rascal files"); + var targets = findFiles(); + progress("Found: %d files, press enter to start parsing", targets.size()); + System.in.read(); + Thread.currentThread().setPriority(Thread.MAX_PRIORITY); + progress("Start parsing"); + + long count = 0; + long totalTime = 0; + + for (int i = 0; i < warmupRounds + parsingRounds; i++) { + var start = System.nanoTime(); + for (var t : targets) { + var tr = parseFile(t.getKey(), t.getValue()); + count += TreeAdapter.getLocation(TreeAdapter.getStartTop(tr)).getLength(); + } + var stop = System.nanoTime(); + progress("%s took: %d ms", i < warmupRounds ? "Warmup" : "Parsing", TimeUnit.NANOSECONDS.toMillis(stop - start)); + if (i >= warmupRounds) { + totalTime += stop - start; + } + } + progress("Done: %d, average time: %d ms", count, TimeUnit.NANOSECONDS.toMillis(totalTime / parsingRounds)); + } +} diff --git a/src/org/rascalmpl/shell/REPLRunner.java b/src/org/rascalmpl/shell/REPLRunner.java_disabled old mode 100755 new mode 100644 similarity index 100% rename from src/org/rascalmpl/shell/REPLRunner.java rename to src/org/rascalmpl/shell/REPLRunner.java_disabled diff --git a/src/org/rascalmpl/shell/RascalShell.java b/src/org/rascalmpl/shell/RascalShell.java_disabled similarity index 100% rename from src/org/rascalmpl/shell/RascalShell.java rename to src/org/rascalmpl/shell/RascalShell.java_disabled diff --git a/src/org/rascalmpl/shell/RascalShell2.java b/src/org/rascalmpl/shell/RascalShell2.java index 5bb3d3ea41c..1df8cddf950 100644 --- a/src/org/rascalmpl/shell/RascalShell2.java +++ b/src/org/rascalmpl/shell/RascalShell2.java @@ -13,55 +13,23 @@ package org.rascalmpl.shell; -import static org.rascalmpl.interpreter.utils.ReadEvalPrintDialogMessages.parseErrorMessage; -import static org.rascalmpl.interpreter.utils.ReadEvalPrintDialogMessages.staticErrorMessage; -import static org.rascalmpl.interpreter.utils.ReadEvalPrintDialogMessages.throwMessage; -import static org.rascalmpl.interpreter.utils.ReadEvalPrintDialogMessages.throwableMessage; - import java.io.IOException; -import java.io.OutputStream; import java.io.PrintWriter; -import java.io.StringWriter; -import java.nio.ByteBuffer; -import java.nio.CharBuffer; -import java.nio.charset.CharsetDecoder; -import java.nio.charset.CodingErrorAction; -import java.nio.charset.StandardCharsets; -import org.apache.commons.io.input.NullInputStream; -import org.jline.jansi.Ansi; -import org.jline.reader.LineReader; -import org.jline.reader.LineReaderBuilder; -import org.jline.reader.impl.completer.StringsCompleter; -import org.jline.reader.impl.history.DefaultHistory; -import org.jline.style.StyleResolver; import org.jline.terminal.TerminalBuilder; -import org.rascalmpl.exceptions.Throw; import org.rascalmpl.ideservices.BasicIDEServices; import org.rascalmpl.ideservices.IDEServices; import org.rascalmpl.interpreter.Evaluator; -import org.rascalmpl.interpreter.control_exceptions.InterruptException; -import org.rascalmpl.interpreter.control_exceptions.QuitException; import org.rascalmpl.interpreter.env.GlobalEnvironment; import org.rascalmpl.interpreter.env.ModuleEnvironment; import org.rascalmpl.interpreter.load.StandardLibraryContributor; -import org.rascalmpl.interpreter.result.Result; -import org.rascalmpl.interpreter.staticErrors.StaticError; import org.rascalmpl.interpreter.utils.RascalManifest; -import org.rascalmpl.parser.gtd.exception.ParseError; -import org.rascalmpl.repl.ReplTextWriter; +import org.rascalmpl.repl.BaseREPL2; +import org.rascalmpl.repl.RascalReplServices; import org.rascalmpl.repl.TerminalProgressBarMonitor; -import org.rascalmpl.repl.TerminalProgressBarMonitor2; -import org.rascalmpl.uri.URIResolverRegistry; -import org.rascalmpl.uri.URIUtil; -import org.rascalmpl.values.RascalValueFactory; import org.rascalmpl.values.ValueFactoryFactory; -import org.rascalmpl.values.parsetrees.TreeAdapter; -import io.usethesource.vallang.IConstructor; -import io.usethesource.vallang.IValue; import io.usethesource.vallang.IValueFactory; -import io.usethesource.vallang.type.Type; public class RascalShell2 { @@ -74,18 +42,27 @@ public static void main(String[] args) throws IOException { System.setProperty("apple.awt.UIElement", "true"); // turns off the annoying desktop icon printVersionNumber(); - try { + //try { var term = TerminalBuilder.builder() .color(true) - .encoding(StandardCharsets.UTF_8) .build(); - var reader = LineReaderBuilder.builder() - .appName("Rascal REPL") - .completer(new StringsCompleter("IO", "IOMeer", "println", "print", "printlnExp")) - .terminal(term) - .history(new DefaultHistory()) - .build(); + + var repl = new BaseREPL2(new RascalReplServices((t) -> { + var monitor = new TerminalProgressBarMonitor(term); + IDEServices services = new BasicIDEServices(term.writer(), monitor); + + + GlobalEnvironment heap = new GlobalEnvironment(); + ModuleEnvironment root = heap.addModule(new ModuleEnvironment(ModuleEnvironment.SHELL_MODULE, heap)); + IValueFactory vf = ValueFactoryFactory.getValueFactory(); + Evaluator evaluator = new Evaluator(vf, term.reader(), new PrintWriter(System.err, true), term.writer(), root, heap, monitor); + evaluator.addRascalSearchPathContributor(StandardLibraryContributor.getInstance()); + return evaluator; + }), term); + repl.run(); + /* + //IRascalMonitor monitor = IRascalMonitor.buildConsoleMonitor(System.in, System.out, true); var monitor = new TerminalProgressBarMonitor(term); @@ -175,122 +152,10 @@ public static void main(String[] args) throws IOException { System.out.flush(); System.err.flush(); } - } - - private static class FakeOutput extends OutputStream { - - private final LineReader target; - private final CharsetDecoder decoder; - private final CharBuffer decoded; - - FakeOutput(LineReader target) { - this.target = target; - this.decoder = StandardCharsets.UTF_8.newDecoder(); - this.decoder.replaceWith("?"); - this.decoder.onMalformedInput(CodingErrorAction.REPLACE); - this.decoder.onUnmappableCharacter(CodingErrorAction.REPLACE); - this.decoded = CharBuffer.allocate(1024); - } - - @Override - public void write(int b) throws IOException { - var res = decoder.decode(ByteBuffer.wrap(new byte[]{ (byte)b }), decoded, false); - if (res.isOverflow()) { - flush(); - write(b); - } - } - - @Override - public void write(byte[] b, int off, int len) throws IOException { - var bytes = ByteBuffer.wrap(b, off, len); - while (bytes.hasRemaining()) { - var res = decoder.decode(bytes, decoded, false); - if (res.isOverflow()) { - flush(); - } - else if (res.isError()) { - throw new IOException("Decoding failed with: " + res); - } - } - } - - @Override - public void flush() throws IOException { - try { - decoded.flip(); - if (decoded.hasRemaining()) { - this.target.printAbove(decoded.toString()); - } - } - finally { - decoded.clear(); - } - } + */ } - private static class FakePrintWriter extends PrintWriter { - private final LineReader target; - private final CharBuffer buffer; - - public FakePrintWriter(LineReader target, boolean autoFlush) { - super(OutputStream.nullOutputStream(), autoFlush, StandardCharsets.UTF_8); - this.target = target; - this.buffer = CharBuffer.allocate(8*1024); - } - - - @Override - public void write(int c) { - makeRoom(1); - this.buffer.append((char)c); - } - - private void makeRoom(int i) { - if (this.buffer.remaining() < i) { - flush(); - } - } - - - @Override - public void write(String s, int off, int len) { - while (len > 0) { - makeRoom(len); - int room = Math.min(buffer.remaining(), len); - buffer.append(s, off, room); - off += room; - len -= room; - } - } - - @Override - public void write(char[] buf, int off, int len) { - while (len > 0) { - makeRoom(len); - int room = Math.min(buffer.remaining(), len); - buffer.put(buf, off, room); - off += room; - len -= room; - } - } - - @Override - public void flush() { - try { - buffer.flip(); - if (buffer.hasRemaining()) { - target.printAbove(buffer.toString()); - } - } - finally { - buffer.clear(); - } - } - - - } } diff --git a/src/org/rascalmpl/test/infrastructure/RascalJUnitTestRunner.java b/src/org/rascalmpl/test/infrastructure/RascalJUnitTestRunner.java index 87843801f92..55a4a983fce 100644 --- a/src/org/rascalmpl/test/infrastructure/RascalJUnitTestRunner.java +++ b/src/org/rascalmpl/test/infrastructure/RascalJUnitTestRunner.java @@ -22,6 +22,10 @@ import java.util.List; import java.util.Queue; +import org.jline.terminal.Terminal; +import org.jline.terminal.TerminalBuilder; +import org.jline.terminal.impl.DumbTerminal; +import org.jline.terminal.impl.DumbTerminalProvider; import org.junit.runner.Description; import org.junit.runner.Result; import org.junit.runner.Runner; @@ -38,7 +42,6 @@ import org.rascalmpl.interpreter.utils.RascalManifest; import org.rascalmpl.library.util.PathConfig; import org.rascalmpl.library.util.PathConfig.RascalConfigMode; -import org.rascalmpl.shell.RascalShell; import org.rascalmpl.shell.ShellEvaluatorFactory; import org.rascalmpl.uri.URIResolverRegistry; import org.rascalmpl.uri.URIUtil; @@ -52,7 +55,22 @@ public class RascalJUnitTestRunner extends Runner { private static class InstanceHolder { - final static IRascalMonitor monitor = IRascalMonitor.buildConsoleMonitor(System.in, System.out); + final static IRascalMonitor monitor; + static { + Terminal tm; + try { + tm = TerminalBuilder.terminal(); + } + catch (IOException e) { + try { + tm = new DumbTerminal(System.in, System.err); + } + catch (IOException e1) { + throw new IllegalStateException("Could not create a terminal representation"); + } + } + monitor = IRascalMonitor.buildConsoleMonitor(tm); + } } public static IRascalMonitor getCommonMonitor() { @@ -70,9 +88,6 @@ public static IRascalMonitor getCommonMonitor() { static { try { - RascalShell.setupWindowsCodepage(); - RascalShell.enableWindowsAnsiEscapesIfPossible(); - heap = new GlobalEnvironment(); root = heap.addModule(new ModuleEnvironment("___junit_test___", heap)); evaluator = new Evaluator(ValueFactoryFactory.getValueFactory(), Reader.nullReader(), new PrintWriter(System.err, true), new PrintWriter(System.out, false), root, heap, getCommonMonitor()); diff --git a/test/org/rascalmpl/MatchFingerprintTest.java b/test/org/rascalmpl/MatchFingerprintTest.java index be514a1c16e..e210f36a191 100644 --- a/test/org/rascalmpl/MatchFingerprintTest.java +++ b/test/org/rascalmpl/MatchFingerprintTest.java @@ -15,6 +15,7 @@ import static org.junit.Assert.assertNotEquals; import java.io.IOException; +import java.io.PrintWriter; import java.io.Reader; import java.io.StringReader; @@ -48,7 +49,7 @@ public class MatchFingerprintTest extends TestCase { private final GlobalEnvironment heap = new GlobalEnvironment(); private final ModuleEnvironment root = new ModuleEnvironment("root", heap); - private final Evaluator eval = new Evaluator(IRascalValueFactory.getInstance(), Reader.nullReader(), System.err, System.out, root, heap, RascalJUnitTestRunner.getCommonMonitor()); + private final Evaluator eval = new Evaluator(IRascalValueFactory.getInstance(), Reader.nullReader(), new PrintWriter(System.err, true), new PrintWriter(System.out), root, heap, RascalJUnitTestRunner.getCommonMonitor()); private final RascalFunctionValueFactory VF = eval.getFunctionValueFactory(); private final TypeFactory TF = TypeFactory.getInstance(); diff --git a/test/org/rascalmpl/test/functionality/ParallelEvaluatorsTests.java b/test/org/rascalmpl/test/functionality/ParallelEvaluatorsTests.java index 64f6d2e3a63..384422742bf 100644 --- a/test/org/rascalmpl/test/functionality/ParallelEvaluatorsTests.java +++ b/test/org/rascalmpl/test/functionality/ParallelEvaluatorsTests.java @@ -3,6 +3,8 @@ import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; +import java.io.PrintWriter; +import java.io.Reader; import java.util.concurrent.BrokenBarrierException; import java.util.concurrent.CyclicBarrier; import java.util.concurrent.TimeUnit; @@ -35,7 +37,7 @@ private static Evaluator freshEvaluator() { var heap = new GlobalEnvironment(); var root = heap.addModule(new ModuleEnvironment("___test___", heap)); - var evaluator = new Evaluator(ValueFactoryFactory.getValueFactory(), System.in, System.err, System.out, root, heap, monitor); + var evaluator = new Evaluator(ValueFactoryFactory.getValueFactory(), Reader.nullReader(), new PrintWriter(System.err, true), new PrintWriter(System.out), root, heap, monitor); evaluator.addRascalSearchPathContributor(StandardLibraryContributor.getInstance()); evaluator.setTestResultListener(new ITestResultListener() { From 3aa2626e38b6cff1eedf28483f38ba6707656f45 Mon Sep 17 00:00:00 2001 From: Davy Landman Date: Thu, 24 Oct 2024 15:06:29 +0200 Subject: [PATCH 043/191] Got ctrl+c to work correctly --- pom.xml | 2 +- src/org/rascalmpl/repl/BaseREPL2.java | 19 +++++++++++-------- .../rascalmpl/repl/RascalReplServices.java | 2 -- src/org/rascalmpl/shell/RascalShell2.java | 2 ++ 4 files changed, 14 insertions(+), 11 deletions(-) diff --git a/pom.xml b/pom.xml index efc23fa0b0d..56d23205047 100644 --- a/pom.xml +++ b/pom.xml @@ -477,7 +477,7 @@ ${jline.version} - org.jline + org.jline jline-style ${jline.version} diff --git a/src/org/rascalmpl/repl/BaseREPL2.java b/src/org/rascalmpl/repl/BaseREPL2.java index 28ef7bf90c3..64cd85d95ef 100644 --- a/src/org/rascalmpl/repl/BaseREPL2.java +++ b/src/org/rascalmpl/repl/BaseREPL2.java @@ -3,12 +3,13 @@ import java.io.IOException; import java.io.PrintWriter; import java.util.HashMap; +import java.util.Map; import org.checkerframework.checker.nullness.qual.MonotonicNonNull; import org.jline.reader.LineReader; +import org.jline.reader.LineReader.Option; import org.jline.reader.LineReaderBuilder; import org.jline.reader.UserInterruptException; -import org.jline.reader.LineReader.Option; import org.jline.reader.impl.completer.AggregateCompleter; import org.jline.reader.impl.history.DefaultHistory; import org.jline.terminal.Terminal; @@ -85,18 +86,20 @@ public void run() throws IOException { try { replService.connect(term); while (keepRunning) { - String line = reader.readLine(this.currentPrompt); - if (line == null) { - // EOF - break; - } try { + String line = reader.readLine(this.currentPrompt); + if (line == null) { + // EOF + break; + } handleInput(line); } catch (UserInterruptException u) { - reader.printAbove(""); + reader.printAbove("> interrupted"); term.flush(); - replService.handleReset(new HashMap<>(), new HashMap<>()); + var out = new HashMap(); + replService.handleReset(out, new HashMap<>()); + writeResult(out); } } } diff --git a/src/org/rascalmpl/repl/RascalReplServices.java b/src/org/rascalmpl/repl/RascalReplServices.java index 0407c91dfa3..8d3835e27f5 100644 --- a/src/org/rascalmpl/repl/RascalReplServices.java +++ b/src/org/rascalmpl/repl/RascalReplServices.java @@ -261,8 +261,6 @@ public Reader asReader() { @Override public void handleReset(Map output, Map metadata) throws InterruptedException { - // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'handleReset'"); } @Override diff --git a/src/org/rascalmpl/shell/RascalShell2.java b/src/org/rascalmpl/shell/RascalShell2.java index 1df8cddf950..fcf9bf0ddfa 100644 --- a/src/org/rascalmpl/shell/RascalShell2.java +++ b/src/org/rascalmpl/shell/RascalShell2.java @@ -15,6 +15,7 @@ import java.io.IOException; import java.io.PrintWriter; +import java.nio.charset.StandardCharsets; import org.jline.terminal.TerminalBuilder; import org.rascalmpl.ideservices.BasicIDEServices; @@ -45,6 +46,7 @@ public static void main(String[] args) throws IOException { //try { var term = TerminalBuilder.builder() .color(true) + .encoding(StandardCharsets.UTF_8) .build(); From de6d79fa36b6cec5e27ddf33f0daadee494a0994 Mon Sep 17 00:00:00 2001 From: Davy Landman Date: Thu, 24 Oct 2024 17:09:32 +0200 Subject: [PATCH 044/191] Added lines to the continuation prompt --- src/org/rascalmpl/repl/BaseREPL2.java | 6 ++++-- src/org/rascalmpl/repl/IREPLService.java | 4 ++-- src/org/rascalmpl/repl/RascalReplServices.java | 11 ++++++----- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/org/rascalmpl/repl/BaseREPL2.java b/src/org/rascalmpl/repl/BaseREPL2.java index 64cd85d95ef..753a20f72a1 100644 --- a/src/org/rascalmpl/repl/BaseREPL2.java +++ b/src/org/rascalmpl/repl/BaseREPL2.java @@ -26,6 +26,7 @@ public class BaseREPL2 { private static final String FALLBACK_MIME_TYPE = "text/plain"; private static final String ANSI_MIME_TYPE = "text/x-ansi"; private final boolean ansiSupported; + private final boolean unicodeSupported; private final String mimeType; public BaseREPL2(IREPLService replService, Terminal term) { @@ -66,8 +67,9 @@ public BaseREPL2(IREPLService replService, Terminal term) { this.mimeType = ANSI_MIME_TYPE; break; } - this.currentPrompt = replService.prompt(ansiSupported); - reader.variable(LineReader.SECONDARY_PROMPT_PATTERN, replService.parseErrorPrompt(ansiSupported)); + this.unicodeSupported = term.encoding().newEncoder().canEncode("👍🏽"); + this.currentPrompt = replService.prompt(ansiSupported, unicodeSupported); + reader.variable(LineReader.SECONDARY_PROMPT_PATTERN, replService.parseErrorPrompt(ansiSupported, unicodeSupported)); this.reader = reader.build(); diff --git a/src/org/rascalmpl/repl/IREPLService.java b/src/org/rascalmpl/repl/IREPLService.java index 0e062e20b13..4729b23e35e 100644 --- a/src/org/rascalmpl/repl/IREPLService.java +++ b/src/org/rascalmpl/repl/IREPLService.java @@ -70,11 +70,11 @@ default Path historyFile() { /** * Default prompt */ - String prompt(boolean ansiSupported); + String prompt(boolean ansiSupported, boolean unicodeSupported); /** * Continuation prompt */ - String parseErrorPrompt(boolean ansiSupported); + String parseErrorPrompt(boolean ansiSupported, boolean unicodeSupported); void connect(Terminal term); diff --git a/src/org/rascalmpl/repl/RascalReplServices.java b/src/org/rascalmpl/repl/RascalReplServices.java index 8d3835e27f5..30afb508a15 100644 --- a/src/org/rascalmpl/repl/RascalReplServices.java +++ b/src/org/rascalmpl/repl/RascalReplServices.java @@ -264,19 +264,20 @@ public void handleReset(Map output, Map } @Override - public String prompt(boolean ansiSupported) { + public String prompt(boolean ansiSupported, boolean unicodeSupported) { if (ansiSupported) { - return Ansi.ansi().reset().bold() + "rascal>" + Ansi.ansi().reset(); + return Ansi.ansi().reset().bold() + "rascal> " + Ansi.ansi().reset(); } return "rascal>"; } @Override - public String parseErrorPrompt(boolean ansiSupported) { + public String parseErrorPrompt(boolean ansiSupported, boolean unicodeSupported) { + String errorPrompt = (unicodeSupported ? "│" : "|") + "%N %P> "; if (ansiSupported) { - return Ansi.ansi().reset().bold() + ">>>>>>>" + Ansi.ansi().reset(); + return Ansi.ansi().reset().bold() + errorPrompt + Ansi.ansi().reset(); } - return ">>>>>>>"; + return errorPrompt; } From 38989b9adb08e0cd4d76e07d06765e985532b327 Mon Sep 17 00:00:00 2001 From: Davy Landman Date: Thu, 24 Oct 2024 17:20:37 +0200 Subject: [PATCH 045/191] A bit more tweaking of the prompts --- .vscode/launch.json | 3 ++- src/org/rascalmpl/repl/RascalReplServices.java | 4 ++-- src/org/rascalmpl/shell/RascalShell2.java | 11 ++++++----- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index 19e123daa5f..6f7385915ee 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -9,7 +9,8 @@ "name": "RascalShell2", "request": "launch", "mainClass": "org.rascalmpl.shell.RascalShell2", - "projectName": "rascal" + "projectName": "rascal", + "console": "integratedTerminal" }, { "type": "java", diff --git a/src/org/rascalmpl/repl/RascalReplServices.java b/src/org/rascalmpl/repl/RascalReplServices.java index 30afb508a15..3cd72ced38a 100644 --- a/src/org/rascalmpl/repl/RascalReplServices.java +++ b/src/org/rascalmpl/repl/RascalReplServices.java @@ -266,14 +266,14 @@ public void handleReset(Map output, Map @Override public String prompt(boolean ansiSupported, boolean unicodeSupported) { if (ansiSupported) { - return Ansi.ansi().reset().bold() + "rascal> " + Ansi.ansi().reset(); + return Ansi.ansi().reset().bold() + "rascal>" + Ansi.ansi().reset(); } return "rascal>"; } @Override public String parseErrorPrompt(boolean ansiSupported, boolean unicodeSupported) { - String errorPrompt = (unicodeSupported ? "│" : "|") + "%N %P> "; + String errorPrompt = (unicodeSupported ? "│" : "|") + "%N %P>"; if (ansiSupported) { return Ansi.ansi().reset().bold() + errorPrompt + Ansi.ansi().reset(); } diff --git a/src/org/rascalmpl/shell/RascalShell2.java b/src/org/rascalmpl/shell/RascalShell2.java index fcf9bf0ddfa..eaf36fff701 100644 --- a/src/org/rascalmpl/shell/RascalShell2.java +++ b/src/org/rascalmpl/shell/RascalShell2.java @@ -18,6 +18,7 @@ import java.nio.charset.StandardCharsets; import org.jline.terminal.TerminalBuilder; +import org.jline.utils.OSUtils; import org.rascalmpl.ideservices.BasicIDEServices; import org.rascalmpl.ideservices.IDEServices; import org.rascalmpl.interpreter.Evaluator; @@ -44,11 +45,11 @@ public static void main(String[] args) throws IOException { printVersionNumber(); //try { - var term = TerminalBuilder.builder() - .color(true) - .encoding(StandardCharsets.UTF_8) - .build(); - + var termBuilder = TerminalBuilder.builder(); + if (OSUtils.IS_WINDOWS) { + termBuilder.encoding(StandardCharsets.UTF_8); + } + var term = termBuilder.build(); var repl = new BaseREPL2(new RascalReplServices((t) -> { var monitor = new TerminalProgressBarMonitor(term); From 3145e2f047c0cc6be17fc9a670a8e5eaece510b3 Mon Sep 17 00:00:00 2001 From: Davy Landman Date: Wed, 20 Nov 2024 18:25:55 +0100 Subject: [PATCH 046/191] Added initial support for command completion --- src/org/rascalmpl/repl/IOutputPrinter.java | 16 +++- .../repl/RascalCommandCompletion.java | 80 ++++++++++++++----- src/org/rascalmpl/repl/RascalLineParser.java | 4 +- .../rascalmpl/repl/RascalReplServices.java | 42 ++++++---- src/org/rascalmpl/shell/RascalShell2.java | 1 + 5 files changed, 108 insertions(+), 35 deletions(-) diff --git a/src/org/rascalmpl/repl/IOutputPrinter.java b/src/org/rascalmpl/repl/IOutputPrinter.java index b2158b3b5c1..6b055f852fb 100644 --- a/src/org/rascalmpl/repl/IOutputPrinter.java +++ b/src/org/rascalmpl/repl/IOutputPrinter.java @@ -1,9 +1,23 @@ package org.rascalmpl.repl; +import java.io.IOException; import java.io.PrintWriter; import java.io.Reader; +import java.io.StringReader; +import java.io.StringWriter; public interface IOutputPrinter { void write(PrintWriter target); - Reader asReader(); + + default Reader asReader() { + try (var result = new StringWriter()) { + try (var resultWriter = new PrintWriter(result)) { + write(resultWriter); + } + return new StringReader(result.toString()); + } + catch (IOException ex) { + throw new IllegalStateException("StringWriter close should never throw exception", ex); + } + } } diff --git a/src/org/rascalmpl/repl/RascalCommandCompletion.java b/src/org/rascalmpl/repl/RascalCommandCompletion.java index 2ed269379d5..7db1c909d06 100755 --- a/src/org/rascalmpl/repl/RascalCommandCompletion.java +++ b/src/org/rascalmpl/repl/RascalCommandCompletion.java @@ -1,32 +1,39 @@ package org.rascalmpl.repl; + import java.util.ArrayList; import java.util.Collection; import java.util.List; +import java.util.NavigableMap; import java.util.SortedSet; -import java.util.TreeSet; +import java.util.TreeMap; +import java.util.function.BiConsumer; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; +import org.jline.reader.Candidate; +import org.jline.reader.Completer; +import org.jline.reader.LineReader; +import org.jline.reader.ParsedLine; import org.rascalmpl.interpreter.utils.StringUtils; import org.rascalmpl.interpreter.utils.StringUtils.OffsetLengthTerm; public class RascalCommandCompletion { - private static final TreeSet COMMAND_KEYWORDS; + private static final NavigableMap COMMAND_KEYWORDS; static { - COMMAND_KEYWORDS = new TreeSet<>(); - COMMAND_KEYWORDS.add("set"); - COMMAND_KEYWORDS.add("undeclare"); - COMMAND_KEYWORDS.add("help"); - COMMAND_KEYWORDS.add("edit"); - COMMAND_KEYWORDS.add("unimport"); - COMMAND_KEYWORDS.add("declarations"); - COMMAND_KEYWORDS.add("quit"); - COMMAND_KEYWORDS.add("history"); - COMMAND_KEYWORDS.add("test"); - COMMAND_KEYWORDS.add("modules"); - COMMAND_KEYWORDS.add("clear"); + COMMAND_KEYWORDS = new TreeMap<>(); + COMMAND_KEYWORDS.put(":set", "change a evaluator setting"); + COMMAND_KEYWORDS.put(":undeclare", "undeclare a local variable of the REPL"); + COMMAND_KEYWORDS.put(":help", "print help message"); + COMMAND_KEYWORDS.put(":edit", "open a rascal module in the editor"); + COMMAND_KEYWORDS.put(":unimport", "unload an imported module from the REPL"); + COMMAND_KEYWORDS.put(":declarations", "show declarations"); // TODO figure out what it does + COMMAND_KEYWORDS.put(":quit", "cleanly exit the REPL"); + COMMAND_KEYWORDS.put(":history", "history"); // TODO: figure out what it does + COMMAND_KEYWORDS.put(":test", "run rest modules"); + COMMAND_KEYWORDS.put(":modules", "show imported modules");// TODO: figure out what it does + COMMAND_KEYWORDS.put(":clear", "clear evaluator");// TODO: figure out what it does } @@ -57,16 +64,16 @@ else if (line.trim().equals(":set")) { case "edit": case "unimport": return completeModule.complete(line, line.length()); default: { - if (COMMAND_KEYWORDS.contains(currentCommand)) { + if (COMMAND_KEYWORDS.containsKey(":" + currentCommand)) { return null; // nothing to complete after a full command } List result = null; if (currentCommand.isEmpty()) { - result = new ArrayList<>(COMMAND_KEYWORDS); + result = new ArrayList<>(COMMAND_KEYWORDS.keySet()); } else { - result = COMMAND_KEYWORDS.stream() - .filter(s -> s.startsWith(currentCommand)) + result = COMMAND_KEYWORDS.keySet().stream() + .filter(s -> s.startsWith(":" + currentCommand)) .collect(Collectors.toList()); } if (!result.isEmpty()) { @@ -77,5 +84,42 @@ else if (line.trim().equals(":set")) { } return null; } + public static Completer buildCompleter(NavigableMap setOptions, BiConsumer> completeIdentifier, BiConsumer> completeModule) { + return (LineReader reader, ParsedLine line, List candidates) -> { + var words = line.words(); + if (words.isEmpty() || !words.get(0).startsWith(":")) { + return; + } + if (line.wordIndex() == 0) { + // complete initial command/modifier + generateCandidates(line.word(), COMMAND_KEYWORDS, "interpreter modifiers", candidates); + return; + } + if (line.wordIndex() == 1 || words.size() == 1) { + // complete arguments for first + var arg = words.size() == 1 ? "" : line.word(); + switch (words.get(0)) { + case ":set": + generateCandidates(arg, setOptions, "evaluator settings", candidates); + return; + case "undeclare": + completeIdentifier.accept(arg, candidates); + return; + case "edit": // intended fall-through + case "unimport": + completeModule.accept(arg, candidates); + return; + default: return; + } + } + // for the future it would be nice to also support completing thinks like `:set profiling ` + }; + } + + private static void generateCandidates(String partial, NavigableMap candidates, String group, List target) { + for (var can : candidates.subMap(partial, true, partial + Character.MAX_VALUE, false).entrySet()) { + target.add(new Candidate(can.getKey(), can.getKey(), group, can.getValue(), null, null, true)); + } + } } diff --git a/src/org/rascalmpl/repl/RascalLineParser.java b/src/org/rascalmpl/repl/RascalLineParser.java index 54a06549ff2..c460adca81c 100644 --- a/src/org/rascalmpl/repl/RascalLineParser.java +++ b/src/org/rascalmpl/repl/RascalLineParser.java @@ -71,7 +71,7 @@ public String word() { @Override public int wordCursor() { - return atCursor == null ? -1 : (cursor - atCursor.begin); + return atCursor == null ? 0 : (cursor - atCursor.begin); } @Override @@ -167,7 +167,7 @@ private static int parseEndedAfter(String buffer, int position, Pattern parser) if (!matcher.find()) { return position; } - return position + matcher.end(); + return matcher.end(); } // strings with rudementary interpolation support diff --git a/src/org/rascalmpl/repl/RascalReplServices.java b/src/org/rascalmpl/repl/RascalReplServices.java index 3cd72ced38a..b7c7018be5b 100644 --- a/src/org/rascalmpl/repl/RascalReplServices.java +++ b/src/org/rascalmpl/repl/RascalReplServices.java @@ -9,17 +9,24 @@ import java.io.PrintWriter; import java.io.Reader; import java.io.StringReader; -import java.io.StringWriter; import java.io.Writer; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; import java.util.Map; +import java.util.NavigableMap; import java.util.Objects; +import java.util.SortedMap; +import java.util.TreeMap; import java.util.function.Function; import org.jline.jansi.Ansi; +import org.jline.reader.Completer; import org.jline.reader.Parser; import org.jline.terminal.Terminal; import org.jline.utils.InfoCmp.Capability; import org.rascalmpl.exceptions.Throw; +import org.rascalmpl.interpreter.Configuration; import org.rascalmpl.interpreter.Evaluator; import org.rascalmpl.interpreter.control_exceptions.InterruptException; import org.rascalmpl.interpreter.control_exceptions.QuitException; @@ -211,19 +218,6 @@ public ExceptionPrinter(ThrowingWriter internalWriter, StandardTextWriter pretty this.internalWriter = internalWriter; this.prettyPrinter = prettyPrinter; } - - @Override - public Reader asReader() { - try (var result = new StringWriter()) { - try (var resultWriter = new PrintWriter(result)) { - write(resultWriter); - } - return new StringReader(result.toString()); - } - catch (IOException ex) { - throw new IllegalStateException("StringWriter close should never throw exception", ex); - } - } @Override public void write(PrintWriter target) { @@ -297,5 +291,25 @@ public void flush() { eval.getStdErr().flush(); eval.getStdOut().flush(); } + + private static final NavigableMap commandLineOptions = new TreeMap<>(); + static { + commandLineOptions.put(Configuration.GENERATOR_PROFILING_PROPERTY.substring("rascal.".length()), "enable sampling profiler for generator"); + commandLineOptions.put(Configuration.PROFILING_PROPERTY.substring("rascal.".length()), "enable sampling profiler" ); + commandLineOptions.put(Configuration.ERRORS_PROPERTY.substring("rascal.".length()), "print raw java errors"); + commandLineOptions.put(Configuration.TRACING_PROPERTY.substring("rascal.".length()), "trace all function calls (warning: a lot of output will be generated)"); + } + + @Override + public boolean supportsCompletion() { + return true; + } + + @Override + public List completers() { + var result = new ArrayList(); + result.add(RascalCommandCompletion.buildCompleter(commandLineOptions,(s,c) -> {}, (s,c) -> {})); + return result; + } } diff --git a/src/org/rascalmpl/shell/RascalShell2.java b/src/org/rascalmpl/shell/RascalShell2.java index eaf36fff701..716cf347e5d 100644 --- a/src/org/rascalmpl/shell/RascalShell2.java +++ b/src/org/rascalmpl/shell/RascalShell2.java @@ -51,6 +51,7 @@ public static void main(String[] args) throws IOException { } var term = termBuilder.build(); + var repl = new BaseREPL2(new RascalReplServices((t) -> { var monitor = new TerminalProgressBarMonitor(term); IDEServices services = new BasicIDEServices(term.writer(), monitor); From 79bdf53012caa2617b0f7ade5ef22e9ac7d3fbfb Mon Sep 17 00:00:00 2001 From: Davy Landman Date: Thu, 21 Nov 2024 12:34:36 +0100 Subject: [PATCH 047/191] Added module completion support --- src/org/rascalmpl/repl/BaseRascalREPL.java | 1 + .../rascalmpl/repl/RascalReplServices.java | 19 +- .../RascalCommandCompletion.java | 104 ++++---- .../completers/RascalModuleCompletion.java | 47 ++++ .../repl/{ => jline3}/RascalLineParser.java | 238 +++++++++--------- .../rascalmpl/test/repl/JlineParserTest.java | 57 +++++ 6 files changed, 300 insertions(+), 166 deletions(-) rename src/org/rascalmpl/repl/{ => completers}/RascalCommandCompletion.java (54%) mode change 100755 => 100644 create mode 100644 src/org/rascalmpl/repl/completers/RascalModuleCompletion.java rename src/org/rascalmpl/repl/{ => jline3}/RascalLineParser.java (57%) create mode 100644 test/org/rascalmpl/test/repl/JlineParserTest.java diff --git a/src/org/rascalmpl/repl/BaseRascalREPL.java b/src/org/rascalmpl/repl/BaseRascalREPL.java index 24a3177a7e3..14caabb1e5d 100755 --- a/src/org/rascalmpl/repl/BaseRascalREPL.java +++ b/src/org/rascalmpl/repl/BaseRascalREPL.java @@ -26,6 +26,7 @@ import org.rascalmpl.interpreter.utils.ReadEvalPrintDialogMessages; import org.rascalmpl.interpreter.utils.StringUtils; import org.rascalmpl.interpreter.utils.StringUtils.OffsetLengthTerm; +import org.rascalmpl.repl.completers.RascalCommandCompletion; import org.rascalmpl.uri.URIResolverRegistry; import org.rascalmpl.uri.URIUtil; import org.rascalmpl.values.RascalValueFactory; diff --git a/src/org/rascalmpl/repl/RascalReplServices.java b/src/org/rascalmpl/repl/RascalReplServices.java index b7c7018be5b..1d9f778db87 100644 --- a/src/org/rascalmpl/repl/RascalReplServices.java +++ b/src/org/rascalmpl/repl/RascalReplServices.java @@ -11,12 +11,10 @@ import java.io.StringReader; import java.io.Writer; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import java.util.Map; import java.util.NavigableMap; import java.util.Objects; -import java.util.SortedMap; import java.util.TreeMap; import java.util.function.Function; @@ -28,17 +26,22 @@ import org.rascalmpl.exceptions.Throw; import org.rascalmpl.interpreter.Configuration; import org.rascalmpl.interpreter.Evaluator; +import org.rascalmpl.interpreter.NullRascalMonitor; import org.rascalmpl.interpreter.control_exceptions.InterruptException; import org.rascalmpl.interpreter.control_exceptions.QuitException; import org.rascalmpl.interpreter.result.IRascalResult; import org.rascalmpl.interpreter.result.Result; import org.rascalmpl.interpreter.staticErrors.StaticError; import org.rascalmpl.parser.gtd.exception.ParseError; +import org.rascalmpl.repl.completers.RascalCommandCompletion; +import org.rascalmpl.repl.completers.RascalModuleCompletion; +import org.rascalmpl.repl.jline3.RascalLineParser; import org.rascalmpl.uri.URIUtil; import org.rascalmpl.values.RascalValueFactory; import org.rascalmpl.values.parsetrees.TreeAdapter; import io.usethesource.vallang.IConstructor; +import io.usethesource.vallang.ISourceLocation; import io.usethesource.vallang.IString; import io.usethesource.vallang.IValue; import io.usethesource.vallang.io.StandardTextWriter; @@ -71,9 +74,15 @@ public void connect(Terminal term) { this.eval = buildEvaluator.apply(term); } + private static final ISourceLocation PROMPT_LOCATION = URIUtil.rootLocation("prompt"); + @Override public Parser inputParser() { - return new RascalLineParser(() -> eval); + return new RascalLineParser(prompt -> { + synchronized(eval) { + return eval.parseCommand(new NullRascalMonitor(), prompt, PROMPT_LOCATION); + } + }); } @Override @@ -308,7 +317,9 @@ public boolean supportsCompletion() { @Override public List completers() { var result = new ArrayList(); - result.add(RascalCommandCompletion.buildCompleter(commandLineOptions,(s,c) -> {}, (s,c) -> {})); + var moduleCompleter = new RascalModuleCompletion(m -> eval.getRascalResolver().listModuleEntries(m)); + result.add(new RascalCommandCompletion(commandLineOptions,(s,c) -> {}, (s, c) -> moduleCompleter.completeModuleNames(s, c, false))); + result.add(moduleCompleter); return result; } diff --git a/src/org/rascalmpl/repl/RascalCommandCompletion.java b/src/org/rascalmpl/repl/completers/RascalCommandCompletion.java old mode 100755 new mode 100644 similarity index 54% rename from src/org/rascalmpl/repl/RascalCommandCompletion.java rename to src/org/rascalmpl/repl/completers/RascalCommandCompletion.java index 7db1c909d06..ac4e77ba27a --- a/src/org/rascalmpl/repl/RascalCommandCompletion.java +++ b/src/org/rascalmpl/repl/completers/RascalCommandCompletion.java @@ -1,4 +1,4 @@ -package org.rascalmpl.repl; +package org.rascalmpl.repl.completers; import java.util.ArrayList; @@ -18,26 +18,39 @@ import org.jline.reader.ParsedLine; import org.rascalmpl.interpreter.utils.StringUtils; import org.rascalmpl.interpreter.utils.StringUtils.OffsetLengthTerm; +import org.rascalmpl.repl.CompletionFunction; +import org.rascalmpl.repl.CompletionResult; -public class RascalCommandCompletion { +public class RascalCommandCompletion implements Completer { private static final NavigableMap COMMAND_KEYWORDS; static { COMMAND_KEYWORDS = new TreeMap<>(); - COMMAND_KEYWORDS.put(":set", "change a evaluator setting"); - COMMAND_KEYWORDS.put(":undeclare", "undeclare a local variable of the REPL"); - COMMAND_KEYWORDS.put(":help", "print help message"); - COMMAND_KEYWORDS.put(":edit", "open a rascal module in the editor"); - COMMAND_KEYWORDS.put(":unimport", "unload an imported module from the REPL"); - COMMAND_KEYWORDS.put(":declarations", "show declarations"); // TODO figure out what it does - COMMAND_KEYWORDS.put(":quit", "cleanly exit the REPL"); - COMMAND_KEYWORDS.put(":history", "history"); // TODO: figure out what it does - COMMAND_KEYWORDS.put(":test", "run rest modules"); - COMMAND_KEYWORDS.put(":modules", "show imported modules");// TODO: figure out what it does - COMMAND_KEYWORDS.put(":clear", "clear evaluator");// TODO: figure out what it does + COMMAND_KEYWORDS.put("set", "change a evaluator setting"); + COMMAND_KEYWORDS.put("undeclare", "undeclare a local variable of the REPL"); + COMMAND_KEYWORDS.put("help", "print help message"); + COMMAND_KEYWORDS.put("edit", "open a rascal module in the editor"); + COMMAND_KEYWORDS.put("unimport", "unload an imported module from the REPL"); + COMMAND_KEYWORDS.put("declarations", "show declarations"); // TODO figure out what it does + COMMAND_KEYWORDS.put("quit", "cleanly exit the REPL"); + COMMAND_KEYWORDS.put("history", "history"); // TODO: figure out what it does + COMMAND_KEYWORDS.put("test", "run rest modules"); + COMMAND_KEYWORDS.put("modules", "show imported modules");// TODO: figure out what it does + COMMAND_KEYWORDS.put("clear", "clear evaluator");// TODO: figure out what it does + } + + private final NavigableMap setOptions; + private final BiConsumer> completeIdentifier; + private final BiConsumer> completeModule; + public RascalCommandCompletion(NavigableMap setOptions, BiConsumer> completeIdentifier, BiConsumer> completeModule) { + this.setOptions = setOptions; + this.completeIdentifier = completeIdentifier; + this.completeModule = completeModule; } + private static final Pattern splitCommand = Pattern.compile("^[\\t ]*:(?[a-z]*)([\\t ]|$)"); + /**@deprecated remove this function */ public static CompletionResult complete(String line, int cursor, SortedSet commandOptions, CompletionFunction completeIdentifier, CompletionFunction completeModule) { assert line.trim().startsWith(":"); Matcher m = splitCommand.matcher(line); @@ -64,7 +77,7 @@ else if (line.trim().equals(":set")) { case "edit": case "unimport": return completeModule.complete(line, line.length()); default: { - if (COMMAND_KEYWORDS.containsKey(":" + currentCommand)) { + if (COMMAND_KEYWORDS.containsKey(currentCommand)) { return null; // nothing to complete after a full command } List result = null; @@ -73,7 +86,7 @@ else if (line.trim().equals(":set")) { } else { result = COMMAND_KEYWORDS.keySet().stream() - .filter(s -> s.startsWith(":" + currentCommand)) + .filter(s -> s.startsWith(currentCommand)) .collect(Collectors.toList()); } if (!result.isEmpty()) { @@ -84,37 +97,6 @@ else if (line.trim().equals(":set")) { } return null; } - public static Completer buildCompleter(NavigableMap setOptions, BiConsumer> completeIdentifier, BiConsumer> completeModule) { - return (LineReader reader, ParsedLine line, List candidates) -> { - var words = line.words(); - if (words.isEmpty() || !words.get(0).startsWith(":")) { - return; - } - if (line.wordIndex() == 0) { - // complete initial command/modifier - generateCandidates(line.word(), COMMAND_KEYWORDS, "interpreter modifiers", candidates); - return; - } - if (line.wordIndex() == 1 || words.size() == 1) { - // complete arguments for first - var arg = words.size() == 1 ? "" : line.word(); - switch (words.get(0)) { - case ":set": - generateCandidates(arg, setOptions, "evaluator settings", candidates); - return; - case "undeclare": - completeIdentifier.accept(arg, candidates); - return; - case "edit": // intended fall-through - case "unimport": - completeModule.accept(arg, candidates); - return; - default: return; - } - } - // for the future it would be nice to also support completing thinks like `:set profiling ` - }; - } private static void generateCandidates(String partial, NavigableMap candidates, String group, List target) { for (var can : candidates.subMap(partial, true, partial + Character.MAX_VALUE, false).entrySet()) { @@ -122,4 +104,34 @@ private static void generateCandidates(String partial, NavigableMap candidates) { + var words = line.words(); + if (words.isEmpty() || !words.get(0).equals(":")) { + return; + } + if (line.wordIndex() == 1) { + // complete initial command/modifier + generateCandidates(line.word(), COMMAND_KEYWORDS, "interpreter modifiers", candidates); + return; + } + if (line.wordIndex() == 2) { + // complete arguments for first + switch (words.get(1)) { + case "set": + generateCandidates(line.word(), setOptions, "evaluator settings", candidates); + return; + case "undeclare": + completeIdentifier.accept(line.word(), candidates); + return; + case "edit": // intended fall-through + case "unimport": + completeModule.accept(line.word(), candidates); + return; + default: return; + } + } + // for the future it would be nice to also support completing thinks like `:set profiling ` + } + } diff --git a/src/org/rascalmpl/repl/completers/RascalModuleCompletion.java b/src/org/rascalmpl/repl/completers/RascalModuleCompletion.java new file mode 100644 index 00000000000..301a496edfd --- /dev/null +++ b/src/org/rascalmpl/repl/completers/RascalModuleCompletion.java @@ -0,0 +1,47 @@ +package org.rascalmpl.repl.completers; + +import java.util.List; +import java.util.function.Function; + +import org.jline.reader.Candidate; +import org.jline.reader.Completer; +import org.jline.reader.LineReader; +import org.jline.reader.ParsedLine; + +public class RascalModuleCompletion implements Completer { + + private final Function> searchPathLookup; + + public RascalModuleCompletion(Function> searchPathLookup) { + this.searchPathLookup = searchPathLookup; + } + + @Override + public void complete(LineReader reader, ParsedLine line, List candidates) { + if (line.wordIndex() != 1) { + // we can only complete import/extend statements that reference a module + return; + } + switch (line.words().get(0)) { + case "import": // intended fallthrough + case "extend": + completeModuleNames(line.word(), candidates, true); + return; + default: + return; + } + } + + public void completeModuleNames(String word, List candidates, boolean importStatement) { + // as jline will take care to filter prefixes, we only have to report modules in the directory (or siblings of the name) + // we do not have to filter out prefixes + int rootedIndex = word.lastIndexOf("::"); + String moduleRoot = rootedIndex == -1? "": word.substring(0, rootedIndex); + String modulePrefix = moduleRoot.isEmpty() ? "" : moduleRoot + "::"; + for (var mod : searchPathLookup.apply(moduleRoot)) { + var fullPath = modulePrefix + mod; + var isFullModulePath = !mod.endsWith("::"); + candidates.add(new Candidate(fullPath + (isFullModulePath & importStatement? ";" : ""), fullPath, "modules", null, null, null, isFullModulePath)); + } + } +} diff --git a/src/org/rascalmpl/repl/RascalLineParser.java b/src/org/rascalmpl/repl/jline3/RascalLineParser.java similarity index 57% rename from src/org/rascalmpl/repl/RascalLineParser.java rename to src/org/rascalmpl/repl/jline3/RascalLineParser.java index c460adca81c..fb92dfca32e 100644 --- a/src/org/rascalmpl/repl/RascalLineParser.java +++ b/src/org/rascalmpl/repl/jline3/RascalLineParser.java @@ -1,33 +1,28 @@ -package org.rascalmpl.repl; +package org.rascalmpl.repl.jline3; import java.util.ArrayList; import java.util.List; -import java.util.function.Supplier; +import java.util.function.Function; import java.util.regex.Pattern; import java.util.stream.Collectors; import org.checkerframework.checker.nullness.qual.MonotonicNonNull; -import org.checkerframework.checker.nullness.qual.Nullable; import org.jline.reader.EOFError; import org.jline.reader.ParsedLine; import org.jline.reader.Parser; import org.jline.reader.SyntaxError; -import org.rascalmpl.interpreter.IEvaluator; -import org.rascalmpl.interpreter.NullRascalMonitor; import org.rascalmpl.parser.gtd.exception.ParseError; -import org.rascalmpl.uri.URIUtil; import org.rascalmpl.values.parsetrees.ITree; import org.rascalmpl.values.parsetrees.TreeAdapter; -import io.usethesource.vallang.ISourceLocation; + public class RascalLineParser implements Parser { - private static final ISourceLocation PROMPT_LOCATION = URIUtil.rootLocation("prompt"); - private final Supplier> eval; + private final Function commandParser; - public RascalLineParser(Supplier> eval) { - this.eval = eval; + public RascalLineParser(Function commandParser) { + this.commandParser = commandParser; } @Override @@ -38,6 +33,11 @@ public ParsedLine parse(String line, int cursor, ParseContext context) throws Sy // we have to verify the input is correct rascal statement return parseFullRascalCommand(line, cursor); case COMPLETE: + // for completion purposes, we want a specific kind of grouping + // so we'll use a heuristic for this. + // in the future we might be able to use the parser with error recovery + // but we would still have to think about grouping things together that aren't in the + // parse tree, such as `:` and the `set` try { // lets see, maybe it parses as a rascal expression return parseFullRascalCommand(line, cursor); @@ -59,44 +59,7 @@ private ParsedLine splitWordsOnly(String line, int cursor) { // small line parser, in the future we might be able to use error recovery var words = new ArrayList(); parseWords(line, 0, words); - return new ParsedLine() { - private final @MonotonicNonNull LexedWord atCursor = words.stream() - .filter(l -> l.cursorInside(cursor)) - .findFirst() - .orElse(null); - @Override - public String word() { - return atCursor == null ? "" : atCursor.word(); - } - - @Override - public int wordCursor() { - return atCursor == null ? 0 : (cursor - atCursor.begin); - } - - @Override - public int wordIndex() { - return atCursor == null ? -1 : words.indexOf(atCursor); - } - - @Override - public List words() { - return words.stream() - .map(LexedWord::word) - .collect(Collectors.toList()); - } - - @Override - public String line() { - return line; - } - - @Override - public int cursor() { - return cursor; - } - - }; + return new ParsedLineLexedWords(words, cursor, line); } private void parseWords(String buffer, int position, List words) { @@ -120,8 +83,12 @@ else if (c == '|' || (c == '>' && inLocation)) { wordEnd = parseEndedAfter(buffer, position, RASCAL_LOCATION); inLocation = wordEnd != position && buffer.charAt(position - 1) == '<'; } - else if (Character.isJavaIdentifierPart(c) || c == ':' || c == '\\') { - wordEnd = parseEndedAfter(buffer, position, RASCAL_NAME_OR_COMMAND); + else if (Character.isJavaIdentifierPart(c) || c == '\\') { + wordEnd = parseEndedAfter(buffer, position, RASCAL_NAME); + } + else if (c == ':' && words.isEmpty()) { + // can be a command start + wordEnd++; } else { wordEnd++; @@ -139,6 +106,62 @@ else if (Character.isJavaIdentifierPart(c) || c == ':' || c == '\\') { } } + private final class ParsedLineLexedWords implements ParsedLine { + private final ArrayList words; + private final int cursor; + private final String line; + private final @MonotonicNonNull LexedWord atCursor; + + private ParsedLineLexedWords(ArrayList words, int cursor, String line) { + this.words = words; + this.cursor = cursor; + this.line = line; + if (cursor >= (line.length() - 1)) { + if (words.isEmpty() || !words.get(words.size() - 1).cursorInside(cursor)) { + words.add(new LexedWord(line + " ", cursor, cursor)); + } + } + + atCursor = words.stream() + .filter(l -> l.cursorInside(cursor)) + .findFirst() + .orElse(null); + } + + @Override + public String word() { + return atCursor == null ? "" : atCursor.word(); + } + + @Override + public int wordCursor() { + return atCursor == null ? 0 : (cursor - atCursor.begin); + } + + @Override + public int wordIndex() { + return atCursor == null ? -1 : words.indexOf(atCursor); + } + + @Override + public List words() { + return words.stream() + .map(LexedWord::word) + .collect(Collectors.toList()); + } + + @Override + public String line() { + return line; + } + + @Override + public int cursor() { + return cursor; + } + } + + private static class LexedWord { private final String buffer; @@ -177,8 +200,8 @@ private static int parseEndedAfter(String buffer, int position, Pattern parser) private static final Pattern RASCAL_LOCATION = Pattern.compile("^[\\|\\>][^\\|\\<\\t-\\n\\r ]*[\\|\\<]?"); - private static final Pattern RASCAL_NAME_OR_COMMAND - = Pattern.compile("^(([:]?[A-Za-z_][A-Za-z0-9_]*)|([\\\\][A-Za-z_][\\-A-Za-z0-9_]*))"); + private static final Pattern RASCAL_NAME + = Pattern.compile("^(([A-Za-z_]([A-Za-z0-9_]|::)*)|([\\\\][A-Za-z_]([\\-A-Za-z0-9_]|::)*))"); // only unicode spaces & multi-line comments private static final Pattern RASCAL_WHITE_SPACE @@ -191,7 +214,7 @@ private int eatWhiteSpace(String buffer, int position) { private ParsedLine parseFullRascalCommand(String line, int cursor) throws SyntaxError { // TODO: to support inline highlighting, we have to remove the ansi escapes before parsing try { - return translateTree(eval.get().parseCommand(new NullRascalMonitor(), line, PROMPT_LOCATION), line, cursor); + return translateTree(commandParser.apply(line), line, cursor); } catch (ParseError pe) { throw new EOFError(pe.getBeginLine(), pe.getBeginColumn(), "Parse error"); @@ -201,75 +224,58 @@ private ParsedLine parseFullRascalCommand(String line, int cursor) throws Synta } } + private ParsedLine translateTree(ITree command, String line, int cursor) { // todo: return CompletingParsedLine so that we can also help with quoting completion - return new ParsedLine() { - List wordList = null; - ITree wordTree = null; - - private ITree cursorTree() { - if (wordTree == null) { - wordTree = (ITree)TreeAdapter.locateLexical(command, cursor); - if (wordTree == null) { - wordTree = command; - } - } - return wordTree; - } + var result = new ArrayList(); - private List wordList() { - if (wordList == null) { - wordList = new ArrayList<>(); - collectWords(command, wordList); - } - return wordList; - } + collectWords(command, result, line, 0); + return new ParsedLineLexedWords(result, cursor, line); + } - private void collectWords(ITree t, List words) { - if (TreeAdapter.isLexical(t)) { - words.add(t); - } - else if (TreeAdapter.isSort(t)) { - for (var c : t.getArgs()) { - if (c instanceof ITree) { - collectWords((ITree)c, words); - } - } + private int collectWords(ITree t, List words, String line, int offset) { + boolean isWord; + if (TreeAdapter.isLayout(t)) { + isWord = false; + } + else if (TreeAdapter.isLexical(t) || TreeAdapter.isLiteral(t) || TreeAdapter.isCILiteral(t)) { + isWord = true; + } + else if (TreeAdapter.isSort(t) && TreeAdapter.getSortName(t).equals("QualifiedName")) { + isWord = true; + } + else if (TreeAdapter.isSort(t)) { + var loc = TreeAdapter.getLocation(t); + isWord = false; + for (var c : t.getArgs()) { + if (c instanceof ITree) { + offset = collectWords((ITree)c, words, line, offset); } } + return loc == null ? offset : (loc.getOffset() + loc.getLength()); + } + else if (TreeAdapter.isTop(t)) { + isWord = false; + var args = t.getArgs(); + var preLoc = TreeAdapter.getLocation((ITree)args.get(0)); + offset += preLoc == null ? 0 : preLoc.getLength(); + offset = collectWords((ITree)args.get(1), words, line, offset); + var postLoc = TreeAdapter.getLocation((ITree)args.get(2)); + return offset + (postLoc == null ? 0 : postLoc.getLength()); + } + else { + isWord = false; + } - @Override - public String word() { - return TreeAdapter.yield(cursorTree()); - } - - @Override - public int wordCursor() { - return cursor - TreeAdapter.getLocation(cursorTree()).getOffset(); - } - - @Override - public int wordIndex() { - return wordList().indexOf(cursorTree()); - } - - @Override - public List words() { - return wordList() - .stream() - .map(TreeAdapter::yield) - .collect(Collectors.toList()); - } - - @Override - public String line() { - return line; - } + var loc = TreeAdapter.getLocation(t); + var length = loc == null ? TreeAdapter.yield(t).length() : loc.getLength(); + if (isWord) { + words.add(new LexedWord(line, offset, offset + length)); + return offset + length; + } + else { + return offset + length; + } - @Override - public int cursor() { - return cursor; - } - }; } } diff --git a/test/org/rascalmpl/test/repl/JlineParserTest.java b/test/org/rascalmpl/test/repl/JlineParserTest.java new file mode 100644 index 00000000000..033cb03a2c0 --- /dev/null +++ b/test/org/rascalmpl/test/repl/JlineParserTest.java @@ -0,0 +1,57 @@ +package org.rascalmpl.test.repl; + +import static org.junit.Assert.assertEquals; + +import org.jline.reader.ParsedLine; +import org.jline.reader.Parser.ParseContext; +import org.junit.Test; +import org.rascalmpl.parser.gtd.exception.ParseError; +import org.rascalmpl.repl.jline3.RascalLineParser; +import org.rascalmpl.uri.URIUtil; + +public class JlineParserTest { + + private ParsedLine completeParser(String input) { + return completeParser(input, input.length() - 1); + } + + private ParsedLine completeParser(String input, int cursor) { + var parser = new RascalLineParser(l -> { throw new ParseError("rascal parser not supported in the test yet", URIUtil.invalidURI(), 0, 0, 0, 0, 0, 0); }); + + return parser.parse(input, cursor, ParseContext.COMPLETE); + } + + @Test + public void commandsParsedCorrectly() { + assertEquals("se", completeParser(":se").word()); + assertEquals(":", completeParser(":set prof", 2).words().get(0)); + assertEquals("set", completeParser(":set prof", 2).word()); + assertEquals("prof", completeParser(":set prof", 6).word()); + assertEquals("", completeParser(":set ", 5).word()); + } + + @Test + public void stringsAreNotParsedAsWords() { + assertEquals(1, completeParser("\"long string with multiple spaces\"").words().size()); // word + assertEquals("", completeParser("\"long string with multiple spaces\"",11).word()); + assertEquals("", completeParser("\"long string with multiple spaces\"").word()); + assertEquals(2, completeParser("x = \"long string with multiple spaces\";").words().size()); + } + + @Test + public void stringInterpolation() { + assertEquals("exp", completeParser("\"string string ending\"",11).words().size()); + assertEquals(2, completeParser("\"string string ending\"").words().size()); // at the end always an extra one + } + + @Test + public void qualifiedNames() { + assertEquals("IO::print", completeParser("IO::print").word()); + assertEquals("lang::rascal", completeParser("import lang::rascal").word()); + } + + +} From 27bf01fade2ccec43a55a905c2196912bc683368 Mon Sep 17 00:00:00 2001 From: Davy Landman Date: Thu, 21 Nov 2024 15:32:40 +0100 Subject: [PATCH 048/191] Also added support for keywords and identifier completion --- src/org/rascalmpl/interpreter/Evaluator.java | 27 ++++----- .../interpreter/IEvaluatorContext.java | 4 +- src/org/rascalmpl/repl/BaseREPL2.java | 7 ++- src/org/rascalmpl/repl/IREPLService.java | 4 ++ .../rascalmpl/repl/RascalReplServices.java | 11 +++- .../RascalIdentifierCompletion.java | 52 +++++++++++++++++ .../completers/RascalKeywordCompletion.java | 56 +++++++++++++++++++ .../completers/RascalModuleCompletion.java | 2 +- 8 files changed, 143 insertions(+), 20 deletions(-) create mode 100644 src/org/rascalmpl/repl/completers/RascalIdentifierCompletion.java create mode 100644 src/org/rascalmpl/repl/completers/RascalKeywordCompletion.java diff --git a/src/org/rascalmpl/interpreter/Evaluator.java b/src/org/rascalmpl/interpreter/Evaluator.java index 2b397e1034e..2950bb1c607 100755 --- a/src/org/rascalmpl/interpreter/Evaluator.java +++ b/src/org/rascalmpl/interpreter/Evaluator.java @@ -22,15 +22,11 @@ import static org.rascalmpl.semantics.dynamic.Import.parseFragments; import java.io.IOException; -import java.io.OutputStream; -import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.io.Reader; import java.io.StringReader; import java.net.URI; -import java.nio.charset.StandardCharsets; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; @@ -40,9 +36,10 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Set; +import java.util.SortedMap; import java.util.SortedSet; import java.util.Stack; -import java.util.TreeSet; +import java.util.TreeMap; import java.util.concurrent.CopyOnWriteArrayList; import org.rascalmpl.ast.AbstractAST; @@ -1681,13 +1678,13 @@ public TraversalEvaluator __popTraversalEvaluator() { } @Override - public Collection completePartialIdentifier(String qualifier, String partialIdentifier) { + public Map completePartialIdentifier(String qualifier, String partialIdentifier) { if (partialIdentifier.startsWith("\\")) { partialIdentifier = partialIdentifier.substring(1); } String partialModuleName = qualifier + "::" + partialIdentifier; - SortedSet result = new TreeSet<>(new Comparator() { + SortedMap result = new TreeMap<>(new Comparator() { @Override public int compare(String a, String b) { if (a.charAt(0) == '\\') { @@ -1709,7 +1706,7 @@ public int compare(String a, String b) { return result; } - private void addCompletionsForModule(String qualifier, String partialIdentifier, String partialModuleName, SortedSet result, ModuleEnvironment env, boolean skipPrivate) { + private void addCompletionsForModule(String qualifier, String partialIdentifier, String partialModuleName, SortedMap result, ModuleEnvironment env, boolean skipPrivate) { for (Pair> p : env.getFunctions()) { for (AbstractFunction f : p.getSecond()) { String module = ((ModuleEnvironment)f.getEnv()).getName(); @@ -1719,7 +1716,7 @@ private void addCompletionsForModule(String qualifier, String partialIdentifier, } if (module.startsWith(qualifier)) { - addIt(result, p.getFirst(), qualifier.isEmpty() ? "" : module, module.startsWith(partialModuleName) ? "" : partialIdentifier); + addIt(result, "function", p.getFirst(), qualifier.isEmpty() ? "" : module, module.startsWith(partialModuleName) ? "" : partialIdentifier); } } } @@ -1729,30 +1726,30 @@ private void addCompletionsForModule(String qualifier, String partialIdentifier, if (skipPrivate && env.isNamePrivate(entry.getKey())) { continue; } - addIt(result, entry.getKey(), qualifier, partialIdentifier); + addIt(result, "variable", entry.getKey(), qualifier, partialIdentifier); } for (Type t: env.getAbstractDatatypes()) { if (inQualifiedModule) { - addIt(result, t.getName(), qualifier, partialIdentifier); + addIt(result, "ADT", t.getName(), qualifier, partialIdentifier); } } for (Type t: env.getAliases()) { - addIt(result, t.getName(), qualifier, partialIdentifier); + addIt(result, "alias", t.getName(), qualifier, partialIdentifier); } } if (qualifier.isEmpty()) { Map> annos = env.getAnnotations(); for (Type t: annos.keySet()) { for (String k: annos.get(t).keySet()) { - addIt(result, k, "", partialIdentifier); + addIt(result, "annotation", k, "", partialIdentifier); } } } } - private static void addIt(SortedSet result, String v, String qualifier, String originalTerm) { + private static void addIt(SortedMap result, String category, String v, String qualifier, String originalTerm) { if (v.startsWith(originalTerm) && !v.equals(originalTerm)) { if (v.contains("-")) { v = "\\" + v; @@ -1760,7 +1757,7 @@ private static void addIt(SortedSet result, String v, String qualifier, if (!qualifier.isEmpty() && !v.startsWith(qualifier)) { v = qualifier + "::" + v; } - result.add(v); + result.put(v, category); } } diff --git a/src/org/rascalmpl/interpreter/IEvaluatorContext.java b/src/org/rascalmpl/interpreter/IEvaluatorContext.java index 6ffa2197096..25562ff4b68 100644 --- a/src/org/rascalmpl/interpreter/IEvaluatorContext.java +++ b/src/org/rascalmpl/interpreter/IEvaluatorContext.java @@ -20,6 +20,7 @@ import java.io.PrintWriter; import java.io.Reader; import java.util.Collection; +import java.util.Map; import java.util.Stack; import org.rascalmpl.ast.AbstractAST; @@ -73,5 +74,6 @@ public interface IEvaluatorContext extends IRascalMonitor { public Stack getAccumulators(); - public Collection completePartialIdentifier(String qualifier, String partialIdentifier); + /** @return identifiers and their category (variable, function, etc) */ + public Map completePartialIdentifier(String qualifier, String partialIdentifier); } diff --git a/src/org/rascalmpl/repl/BaseREPL2.java b/src/org/rascalmpl/repl/BaseREPL2.java index 753a20f72a1..a74a0e8c959 100644 --- a/src/org/rascalmpl/repl/BaseREPL2.java +++ b/src/org/rascalmpl/repl/BaseREPL2.java @@ -78,9 +78,12 @@ public BaseREPL2(IREPLService replService, Terminal term) { // todo: // - ctrl + c support // - ctrl + / support - // - multi-line input // - highlighting in the prompt? - // - + // - nested REPLs + // - queued commands (if it's still needed for import IO etc); + // - support for html results + // - measure time thing + // - source location history thingy } diff --git a/src/org/rascalmpl/repl/IREPLService.java b/src/org/rascalmpl/repl/IREPLService.java index 4729b23e35e..2a98e9af9eb 100644 --- a/src/org/rascalmpl/repl/IREPLService.java +++ b/src/org/rascalmpl/repl/IREPLService.java @@ -16,6 +16,10 @@ public interface IREPLService { String MIME_PLAIN = "text/plain"; String MIME_ANSI = "text/x-ansi"; + /** + * Does this language support completion + * @return + */ default boolean supportsCompletion() { return false; } diff --git a/src/org/rascalmpl/repl/RascalReplServices.java b/src/org/rascalmpl/repl/RascalReplServices.java index 1d9f778db87..d201bb9b2ba 100644 --- a/src/org/rascalmpl/repl/RascalReplServices.java +++ b/src/org/rascalmpl/repl/RascalReplServices.java @@ -34,7 +34,9 @@ import org.rascalmpl.interpreter.staticErrors.StaticError; import org.rascalmpl.parser.gtd.exception.ParseError; import org.rascalmpl.repl.completers.RascalCommandCompletion; +import org.rascalmpl.repl.completers.RascalIdentifierCompletion; import org.rascalmpl.repl.completers.RascalModuleCompletion; +import org.rascalmpl.repl.completers.RascalKeywordCompletion; import org.rascalmpl.repl.jline3.RascalLineParser; import org.rascalmpl.uri.URIUtil; import org.rascalmpl.values.RascalValueFactory; @@ -318,8 +320,15 @@ public boolean supportsCompletion() { public List completers() { var result = new ArrayList(); var moduleCompleter = new RascalModuleCompletion(m -> eval.getRascalResolver().listModuleEntries(m)); - result.add(new RascalCommandCompletion(commandLineOptions,(s,c) -> {}, (s, c) -> moduleCompleter.completeModuleNames(s, c, false))); + var idCompleter = new RascalIdentifierCompletion((q, i) -> eval.completePartialIdentifier(q, i)); + result.add(new RascalCommandCompletion( + commandLineOptions, + idCompleter::completePartialIdentifier, + (s, c) -> moduleCompleter.completeModuleNames(s, c, false) + )); result.add(moduleCompleter); + result.add(idCompleter); + result.add(new RascalKeywordCompletion()); return result; } diff --git a/src/org/rascalmpl/repl/completers/RascalIdentifierCompletion.java b/src/org/rascalmpl/repl/completers/RascalIdentifierCompletion.java new file mode 100644 index 00000000000..d5381b61082 --- /dev/null +++ b/src/org/rascalmpl/repl/completers/RascalIdentifierCompletion.java @@ -0,0 +1,52 @@ +package org.rascalmpl.repl.completers; + +import java.util.List; +import java.util.Map; +import java.util.function.BiFunction; + +import org.jline.reader.Candidate; +import org.jline.reader.Completer; +import org.jline.reader.LineReader; +import org.jline.reader.ParsedLine; + +public class RascalIdentifierCompletion implements Completer { + + private final BiFunction> lookupPartialIdentifiers; + + public RascalIdentifierCompletion(BiFunction> lookupPartialIdentifiers) { + this.lookupPartialIdentifiers = lookupPartialIdentifiers; + } + + @Override + public void complete(LineReader reader, ParsedLine line, List candidates) { + boolean canBeIdentifier; + switch (line.words().get(0)) { + case ":": //fallthrough + // completion of settings for the REPL is handled elsewere + // it will also call this function in the 1 case where it's needed + case "import": // fallthrough + // not triggering on import of modules + case "extend": // fallthrough + // not triggering on extend of modules + canBeIdentifier = false; + break; + default: + canBeIdentifier = true; + break; + + } + if (canBeIdentifier) { + completePartialIdentifier(line.word(), candidates); + } + } + + public void completePartialIdentifier(String name, List candidates) { + int qualifiedSplit = name.lastIndexOf("::"); + String qualifier = qualifiedSplit > -1 ? name.substring(0, qualifiedSplit) : ""; + String partial = qualifiedSplit > -1 ? name.substring(qualifiedSplit + 2) : name; + for (var can: lookupPartialIdentifiers.apply(qualifier, partial).entrySet()) { + candidates.add(new Candidate(can.getKey(), can.getKey(), can.getValue(), null, null, null, false)); + } + } + +} diff --git a/src/org/rascalmpl/repl/completers/RascalKeywordCompletion.java b/src/org/rascalmpl/repl/completers/RascalKeywordCompletion.java new file mode 100644 index 00000000000..bfecbaca6ff --- /dev/null +++ b/src/org/rascalmpl/repl/completers/RascalKeywordCompletion.java @@ -0,0 +1,56 @@ +package org.rascalmpl.repl.completers; + +import java.util.List; +import java.util.NavigableMap; +import java.util.TreeMap; + +import org.jline.reader.Candidate; +import org.jline.reader.Completer; +import org.jline.reader.LineReader; +import org.jline.reader.ParsedLine; + +public class RascalKeywordCompletion implements Completer { + + private static final NavigableMap RASCAL_TYPE_KEYWORDS; + static { + RASCAL_TYPE_KEYWORDS = new TreeMap<>(); + RASCAL_TYPE_KEYWORDS.put("void", "a type without any values"); + RASCAL_TYPE_KEYWORDS.put("int", "sequence of digits of arbitrary length"); + RASCAL_TYPE_KEYWORDS.put("real", "real numbers with arbitrary size and precision"); + RASCAL_TYPE_KEYWORDS.put("num", "int/real/rat type"); + RASCAL_TYPE_KEYWORDS.put("bool", "boolean type"); + RASCAL_TYPE_KEYWORDS.put("data", "user-defined type (Algebraic Data Type)."); + RASCAL_TYPE_KEYWORDS.put("datetime", "date/time/datetime values"); + RASCAL_TYPE_KEYWORDS.put("list", "ordered sequence of values"); + RASCAL_TYPE_KEYWORDS.put("lrel", "lists of tuples with relational calculus"); + RASCAL_TYPE_KEYWORDS.put("loc", "source locations"); + RASCAL_TYPE_KEYWORDS.put("map", "a set of key/value pairs"); + RASCAL_TYPE_KEYWORDS.put("node", "untyped trees"); + RASCAL_TYPE_KEYWORDS.put("set", "unordered sequence of values"); + RASCAL_TYPE_KEYWORDS.put("rel", "sets of tuples with relational calculus"); + RASCAL_TYPE_KEYWORDS.put("str", "a sequence of unicode codepoints"); + RASCAL_TYPE_KEYWORDS.put("tuple", "a sequence of elements"); + RASCAL_TYPE_KEYWORDS.put("value", "all possible values"); + } + + @Override + public void complete(LineReader reader, ParsedLine line, List candidates) { + var words = line.words(); + if (words.size() == 1) { + if ("import".startsWith(words.get(0))) { + add(candidates, "import", "statement", "import a module into the repl"); + } + if ("extend".startsWith(words.get(0))) { + add(candidates, "extend", "statement", "extend a module into the repl"); + } + } + for (var can: RASCAL_TYPE_KEYWORDS.subMap(line.word(), true, line.word() + Character.MAX_VALUE, false).entrySet()) { + add(candidates, can.getKey(), "type", can.getValue()); + } + } + + private static void add(List candidates, String value, String group, String description) { + candidates.add(new Candidate(value, value, group, description, null, null, true)); + } + +} diff --git a/src/org/rascalmpl/repl/completers/RascalModuleCompletion.java b/src/org/rascalmpl/repl/completers/RascalModuleCompletion.java index 301a496edfd..9229aa46812 100644 --- a/src/org/rascalmpl/repl/completers/RascalModuleCompletion.java +++ b/src/org/rascalmpl/repl/completers/RascalModuleCompletion.java @@ -41,7 +41,7 @@ public void completeModuleNames(String word, List candidates, boolean for (var mod : searchPathLookup.apply(moduleRoot)) { var fullPath = modulePrefix + mod; var isFullModulePath = !mod.endsWith("::"); - candidates.add(new Candidate(fullPath + (isFullModulePath & importStatement? ";" : ""), fullPath, "modules", null, null, null, isFullModulePath)); + candidates.add(new Candidate(fullPath + (isFullModulePath & importStatement? ";" : ""), fullPath, "modules", null, null, null, false)); } } } From c0387b02fd0912c33f105f396969e64357aac5e7 Mon Sep 17 00:00:00 2001 From: Davy Landman Date: Thu, 21 Nov 2024 16:19:30 +0100 Subject: [PATCH 049/191] Support ctrl+c to interrupt a running rascal command --- src/org/rascalmpl/repl/BaseREPL2.java | 52 +++++++++++++++---- src/org/rascalmpl/repl/IREPLService.java | 10 ++-- .../rascalmpl/repl/RascalReplServices.java | 4 +- src/org/rascalmpl/shell/RascalShell2.java | 1 + 4 files changed, 53 insertions(+), 14 deletions(-) diff --git a/src/org/rascalmpl/repl/BaseREPL2.java b/src/org/rascalmpl/repl/BaseREPL2.java index a74a0e8c959..983491464a3 100644 --- a/src/org/rascalmpl/repl/BaseREPL2.java +++ b/src/org/rascalmpl/repl/BaseREPL2.java @@ -2,8 +2,11 @@ import java.io.IOException; import java.io.PrintWriter; +import java.nio.channels.AcceptPendingException; import java.util.HashMap; import java.util.Map; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicReference; import org.checkerframework.checker.nullness.qual.MonotonicNonNull; import org.jline.reader.LineReader; @@ -13,6 +16,8 @@ import org.jline.reader.impl.completer.AggregateCompleter; import org.jline.reader.impl.history.DefaultHistory; import org.jline.terminal.Terminal; +import org.jline.terminal.Terminal.Signal; +import org.jline.terminal.Terminal.SignalHandler; import org.jline.utils.ShutdownHooks; public class BaseREPL2 { @@ -49,6 +54,7 @@ public BaseREPL2(IREPLService replService, Terminal term) { } reader.option(Option.HISTORY_IGNORE_DUPS, replService.historyIgnoreDuplicates()); + if (replService.supportsCompletion()) { reader.completer(new AggregateCompleter(replService.completers())); } @@ -76,35 +82,40 @@ public BaseREPL2(IREPLService replService, Terminal term) { // todo: - // - ctrl + c support - // - ctrl + / support - // - highlighting in the prompt? + // - ctrl + / support (might not be possible) + // - quiting of the REPL via `:quit` + // - highlighting in the prompt? (future work, as it also hurts other parts) // - nested REPLs // - queued commands (if it's still needed for import IO etc); // - support for html results - // - measure time thing - // - source location history thingy + // - measure time + // - history? } public void run() throws IOException { try { replService.connect(term); + var running = setupInterruptHandler(); + while (keepRunning) { try { + replService.flush(); String line = reader.readLine(this.currentPrompt); if (line == null) { // EOF break; } + running.set(true); handleInput(line); } catch (UserInterruptException u) { - reader.printAbove("> interrupted"); + // only thrown while `readLine` is active + reader.printAbove(">>>>>>> Interrupted"); term.flush(); - var out = new HashMap(); - replService.handleReset(out, new HashMap<>()); - writeResult(out); + } + finally { + running.set(false); } } } @@ -138,6 +149,29 @@ public void run() throws IOException { } } + private AtomicBoolean setupInterruptHandler() { + var running = new AtomicBoolean(false); + var original = new AtomicReference(null); + original.set(term.handle(Signal.INT, (s) -> { + if (running.get()) { + try { + replService.handleInterrupt(); + } + catch (InterruptedException e) { + return; + } + } + else { + var fallback = original.get(); + if (fallback != null) { + fallback.handle(s); + } + } + })); + + return running; + } + private void handleInput(String line) throws InterruptedException { var result = new HashMap(); diff --git a/src/org/rascalmpl/repl/IREPLService.java b/src/org/rascalmpl/repl/IREPLService.java index 2a98e9af9eb..5be73ad6c5e 100644 --- a/src/org/rascalmpl/repl/IREPLService.java +++ b/src/org/rascalmpl/repl/IREPLService.java @@ -67,9 +67,10 @@ default Path historyFile() { // todo see if we really need the meta-data void handleInput(String input, Map output, Map metadata) throws InterruptedException; - - // todo see if we really need the meta-data - void handleReset(Map output, Map metadata) throws InterruptedException; + /** + * Will be called from a different thread then the one that called `handleInput` + */ + void handleInterrupt() throws InterruptedException; /** * Default prompt @@ -85,6 +86,9 @@ default Path historyFile() { PrintWriter errorWriter(); PrintWriter outputWriter(); + /** + * Flush the streams, will be triggered at the end of execution, and before showing the prompt. + */ void flush(); } diff --git a/src/org/rascalmpl/repl/RascalReplServices.java b/src/org/rascalmpl/repl/RascalReplServices.java index d201bb9b2ba..06091dcd189 100644 --- a/src/org/rascalmpl/repl/RascalReplServices.java +++ b/src/org/rascalmpl/repl/RascalReplServices.java @@ -264,8 +264,8 @@ public Reader asReader() { } @Override - public void handleReset(Map output, Map metadata) - throws InterruptedException { + public void handleInterrupt() throws InterruptedException { + eval.interrupt(); } @Override diff --git a/src/org/rascalmpl/shell/RascalShell2.java b/src/org/rascalmpl/shell/RascalShell2.java index 716cf347e5d..a273ac431c3 100644 --- a/src/org/rascalmpl/shell/RascalShell2.java +++ b/src/org/rascalmpl/shell/RascalShell2.java @@ -49,6 +49,7 @@ public static void main(String[] args) throws IOException { if (OSUtils.IS_WINDOWS) { termBuilder.encoding(StandardCharsets.UTF_8); } + termBuilder.dumb(true); // fallback to dumb terminal if detected terminal is not supported var term = termBuilder.build(); From 3d53007e8cde847ee62f94e17364c67a1ceaf081 Mon Sep 17 00:00:00 2001 From: Davy Landman Date: Thu, 21 Nov 2024 16:58:15 +0100 Subject: [PATCH 050/191] Added location completion support --- src/org/rascalmpl/repl/BaseREPL2.java | 9 +- .../rascalmpl/repl/RascalReplServices.java | 4 + .../completers/RascalKeywordCompletion.java | 7 +- .../completers/RascalLocationCompletion.java | 111 ++++++++++++++++++ .../repl/jline3/RascalLineParser.java | 4 +- .../rascalmpl/test/repl/JlineParserTest.java | 9 ++ 6 files changed, 139 insertions(+), 5 deletions(-) create mode 100644 src/org/rascalmpl/repl/completers/RascalLocationCompletion.java diff --git a/src/org/rascalmpl/repl/BaseREPL2.java b/src/org/rascalmpl/repl/BaseREPL2.java index 983491464a3..209cca0da43 100644 --- a/src/org/rascalmpl/repl/BaseREPL2.java +++ b/src/org/rascalmpl/repl/BaseREPL2.java @@ -9,6 +9,7 @@ import java.util.concurrent.atomic.AtomicReference; import org.checkerframework.checker.nullness.qual.MonotonicNonNull; +import org.jline.reader.EndOfFileException; import org.jline.reader.LineReader; import org.jline.reader.LineReader.Option; import org.jline.reader.LineReaderBuilder; @@ -83,13 +84,14 @@ public BaseREPL2(IREPLService replService, Terminal term) { // todo: // - ctrl + / support (might not be possible) - // - quiting of the REPL via `:quit` // - highlighting in the prompt? (future work, as it also hurts other parts) // - nested REPLs // - queued commands (if it's still needed for import IO etc); // - support for html results // - measure time // - history? + // - completion of locations + // - escape & unescape of keywords in imports auto completion } @@ -122,6 +124,11 @@ public void run() throws IOException { catch (InterruptedException _e) { // closing the runner } + catch (EndOfFileException e) { + // user pressed ctrl+d or the terminal :quit command was given + // so exit cleanly + replService.errorWriter().println("Quiting REPL"); + } catch (Throwable e) { var err = replService.errorWriter(); diff --git a/src/org/rascalmpl/repl/RascalReplServices.java b/src/org/rascalmpl/repl/RascalReplServices.java index 06091dcd189..c45f320a140 100644 --- a/src/org/rascalmpl/repl/RascalReplServices.java +++ b/src/org/rascalmpl/repl/RascalReplServices.java @@ -20,6 +20,7 @@ import org.jline.jansi.Ansi; import org.jline.reader.Completer; +import org.jline.reader.EndOfFileException; import org.jline.reader.Parser; import org.jline.terminal.Terminal; import org.jline.utils.InfoCmp.Capability; @@ -37,6 +38,7 @@ import org.rascalmpl.repl.completers.RascalIdentifierCompletion; import org.rascalmpl.repl.completers.RascalModuleCompletion; import org.rascalmpl.repl.completers.RascalKeywordCompletion; +import org.rascalmpl.repl.completers.RascalLocationCompletion; import org.rascalmpl.repl.jline3.RascalLineParser; import org.rascalmpl.uri.URIUtil; import org.rascalmpl.values.RascalValueFactory; @@ -128,6 +130,7 @@ public void handleInput(String input, Map output, Map { w.println("Quiting REPL"); }); + throw new EndOfFileException("Quiting REPL"); } catch (Throwable e) { reportError(output, (w, sw) -> { @@ -329,6 +332,7 @@ public List completers() { result.add(moduleCompleter); result.add(idCompleter); result.add(new RascalKeywordCompletion()); + result.add(new RascalLocationCompletion()); return result; } diff --git a/src/org/rascalmpl/repl/completers/RascalKeywordCompletion.java b/src/org/rascalmpl/repl/completers/RascalKeywordCompletion.java index bfecbaca6ff..0005793a2ff 100644 --- a/src/org/rascalmpl/repl/completers/RascalKeywordCompletion.java +++ b/src/org/rascalmpl/repl/completers/RascalKeywordCompletion.java @@ -44,8 +44,11 @@ public void complete(LineReader reader, ParsedLine line, List candida add(candidates, "extend", "statement", "extend a module into the repl"); } } - for (var can: RASCAL_TYPE_KEYWORDS.subMap(line.word(), true, line.word() + Character.MAX_VALUE, false).entrySet()) { - add(candidates, can.getKey(), "type", can.getValue()); + var firstWord = words.get(0); + if (!firstWord.equals("import") && !firstWord.equals("extend") && !firstWord.equals(":")) { + for (var can: RASCAL_TYPE_KEYWORDS.subMap(line.word(), true, line.word() + Character.MAX_VALUE, false).entrySet()) { + add(candidates, can.getKey(), "type", can.getValue()); + } } } diff --git a/src/org/rascalmpl/repl/completers/RascalLocationCompletion.java b/src/org/rascalmpl/repl/completers/RascalLocationCompletion.java new file mode 100644 index 00000000000..8e205965d67 --- /dev/null +++ b/src/org/rascalmpl/repl/completers/RascalLocationCompletion.java @@ -0,0 +1,111 @@ +package org.rascalmpl.repl.completers; + +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; +import java.util.List; +import java.util.Set; + +import org.jline.reader.Candidate; +import org.jline.reader.Completer; +import org.jline.reader.LineReader; +import org.jline.reader.ParsedLine; +import org.rascalmpl.uri.URIResolverRegistry; +import org.rascalmpl.uri.URIUtil; +import org.rascalmpl.values.IRascalValueFactory; + +import io.usethesource.vallang.ISourceLocation; +import io.usethesource.vallang.IValueFactory; + +public class RascalLocationCompletion implements Completer { + + private static final IValueFactory VF = IRascalValueFactory.getInstance(); + private static final URIResolverRegistry REG = URIResolverRegistry.getInstance(); + + @Override + public void complete(LineReader reader, ParsedLine line, List candidates) { + if (!line.word().startsWith("|")) { + return; + } + try { + String locCandidate = line.word().substring(1); + if (!locCandidate.contains("://")) { + // only complete scheme + completeSchema(candidates, locCandidate); + return; + } + if (completeAuthorities(candidates, locCandidate)) { + // we only had authorities to complete + return; + } + + // so we have at least a partial location + ISourceLocation directory = VF.sourceLocation(new URI(locCandidate)); + String fileName = ""; + if (!REG.isDirectory(directory)) { + // split filename and directory, to get to the actual directory + String fullPath = directory.getPath(); + int lastSeparator = fullPath.lastIndexOf('/'); + fileName = fullPath.substring(lastSeparator + 1); + fullPath = fullPath.substring(0, lastSeparator); + directory = VF.sourceLocation(directory.getScheme(), directory.getAuthority(), fullPath); + if (!REG.isDirectory(directory)) { + return; + } + } + for (String currentFile : REG.listEntries(directory)) { + if (currentFile.startsWith(fileName)) { + add(candidates, URIUtil.getChildLocation(directory, currentFile)); + } + } + } + catch (URISyntaxException|IOException e) { + } + } + + private void add(List candidates, ISourceLocation loc) { + String locCandidate = loc.toString(); + if (REG.isDirectory(loc)) { + // remove trailing | so we can continue + // and add path separator + locCandidate = locCandidate.substring(0, locCandidate.length() - 1); + if (!locCandidate.endsWith("/")) { + locCandidate += "/"; + } + } + candidates.add(new Candidate(locCandidate, locCandidate, "location", null, null, null, false)); + } + + private boolean completeAuthorities(List candidates, String locCandidate) throws URISyntaxException, + IOException { + int lastSeparator = locCandidate.lastIndexOf('/'); + if (lastSeparator > 3 && locCandidate.substring(lastSeparator - 2, lastSeparator + 1).equals("://")) { + // special case, we want to complete authorities (but URI's without a authority are not valid) + String scheme = locCandidate.substring(0, lastSeparator - 2); + String partialAuthority = locCandidate.substring(lastSeparator + 1); + ISourceLocation root = VF.sourceLocation(scheme, "", ""); + for (String candidate: REG.listEntries(root)) { + if (candidate.startsWith(partialAuthority)) { + add(candidates, URIUtil.correctLocation(scheme, candidate, "")); + } + } + return true; + } + return false; + } + + private void completeSchema(List candidates, String locCandidate) { + filterCandidates(REG.getRegisteredInputSchemes(), candidates, locCandidate); + filterCandidates(REG.getRegisteredLogicalSchemes(), candidates, locCandidate); + filterCandidates(REG.getRegisteredOutputSchemes(), candidates, locCandidate); + } + + private void filterCandidates(Set src, List target, String prefix) { + for (String s : src) { + if (s.startsWith(prefix)) { + add(target, URIUtil.rootLocation(s)); + } + } + } + +} diff --git a/src/org/rascalmpl/repl/jline3/RascalLineParser.java b/src/org/rascalmpl/repl/jline3/RascalLineParser.java index fb92dfca32e..80100365055 100644 --- a/src/org/rascalmpl/repl/jline3/RascalLineParser.java +++ b/src/org/rascalmpl/repl/jline3/RascalLineParser.java @@ -76,12 +76,12 @@ private void parseWords(String buffer, int position, List words) { int wordEnd = position; if (c == '"' || (c == '>' && inString)) { wordEnd = parseEndedAfter(buffer, position, RASCAL_STRING); - inString = wordEnd != position && buffer.charAt(wordEnd - 1) != '"'; + inString = wordEnd != buffer.length() && buffer.charAt(wordEnd - 1) != '"'; isWord = false; } else if (c == '|' || (c == '>' && inLocation)) { wordEnd = parseEndedAfter(buffer, position, RASCAL_LOCATION); - inLocation = wordEnd != position && buffer.charAt(position - 1) == '<'; + inLocation = wordEnd != buffer.length() && buffer.charAt(wordEnd - 1) == '<'; } else if (Character.isJavaIdentifierPart(c) || c == '\\') { wordEnd = parseEndedAfter(buffer, position, RASCAL_NAME); diff --git a/test/org/rascalmpl/test/repl/JlineParserTest.java b/test/org/rascalmpl/test/repl/JlineParserTest.java index 033cb03a2c0..d27c2046604 100644 --- a/test/org/rascalmpl/test/repl/JlineParserTest.java +++ b/test/org/rascalmpl/test/repl/JlineParserTest.java @@ -53,5 +53,14 @@ public void qualifiedNames() { assertEquals("lang::rascal", completeParser("import lang::rascal").word()); } + @Test + public void locations() { + assertEquals("|", completeParser("|").word()); + assertEquals("|file", completeParser("|file").word()); + assertEquals("|file://", completeParser("|file://").word()); + assertEquals("|file:///home/dir", completeParser("|file:///home/dir").word()); + assertEquals("|file:///home/dir|", completeParser("|file:///home/dir|").word()); + } + } From 26d6052ef7485e8b1aacfc4bb8a6bb1f48fe5b84 Mon Sep 17 00:00:00 2001 From: Davy Landman Date: Mon, 25 Nov 2024 15:54:44 +0100 Subject: [PATCH 051/191] Tuned completion a bit around locations and strings --- src/org/rascalmpl/repl/completers/RascalLocationCompletion.java | 2 +- src/org/rascalmpl/repl/jline3/RascalLineParser.java | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/org/rascalmpl/repl/completers/RascalLocationCompletion.java b/src/org/rascalmpl/repl/completers/RascalLocationCompletion.java index 8e205965d67..6f9965f8731 100644 --- a/src/org/rascalmpl/repl/completers/RascalLocationCompletion.java +++ b/src/org/rascalmpl/repl/completers/RascalLocationCompletion.java @@ -47,7 +47,7 @@ public void complete(LineReader reader, ParsedLine line, List candida String fullPath = directory.getPath(); int lastSeparator = fullPath.lastIndexOf('/'); fileName = fullPath.substring(lastSeparator + 1); - fullPath = fullPath.substring(0, lastSeparator); + fullPath = fullPath.substring(0, lastSeparator + 1); directory = VF.sourceLocation(directory.getScheme(), directory.getAuthority(), fullPath); if (!REG.isDirectory(directory)) { return; diff --git a/src/org/rascalmpl/repl/jline3/RascalLineParser.java b/src/org/rascalmpl/repl/jline3/RascalLineParser.java index 80100365055..bde23a0781a 100644 --- a/src/org/rascalmpl/repl/jline3/RascalLineParser.java +++ b/src/org/rascalmpl/repl/jline3/RascalLineParser.java @@ -77,7 +77,6 @@ private void parseWords(String buffer, int position, List words) { if (c == '"' || (c == '>' && inString)) { wordEnd = parseEndedAfter(buffer, position, RASCAL_STRING); inString = wordEnd != buffer.length() && buffer.charAt(wordEnd - 1) != '"'; - isWord = false; } else if (c == '|' || (c == '>' && inLocation)) { wordEnd = parseEndedAfter(buffer, position, RASCAL_LOCATION); From 922c61e38c6512b08d5073540952e476ff81c4ae Mon Sep 17 00:00:00 2001 From: Davy Landman Date: Mon, 25 Nov 2024 15:57:02 +0100 Subject: [PATCH 052/191] Fixed word lexer test --- test/org/rascalmpl/test/repl/JlineParserTest.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/org/rascalmpl/test/repl/JlineParserTest.java b/test/org/rascalmpl/test/repl/JlineParserTest.java index d27c2046604..cbf45c1aa0a 100644 --- a/test/org/rascalmpl/test/repl/JlineParserTest.java +++ b/test/org/rascalmpl/test/repl/JlineParserTest.java @@ -33,8 +33,8 @@ public void commandsParsedCorrectly() { @Test public void stringsAreNotParsedAsWords() { assertEquals(1, completeParser("\"long string with multiple spaces\"").words().size()); // word - assertEquals("", completeParser("\"long string with multiple spaces\"",11).word()); - assertEquals("", completeParser("\"long string with multiple spaces\"").word()); + assertEquals("\"long string with multiple spaces\"", completeParser("\"long string with multiple spaces\"",11).word()); + assertEquals("\"long string with multiple spaces\"", completeParser("\"long string with multiple spaces\"").word()); assertEquals(2, completeParser("x = \"long string with multiple spaces\";").words().size()); } @@ -43,8 +43,8 @@ public void stringInterpolation() { assertEquals("exp", completeParser("\"string string ending\"",11).words().size()); - assertEquals(2, completeParser("\"string string ending\"").words().size()); // at the end always an extra one + assertEquals(3, completeParser("\"string string ending\"",11).words().size()); + assertEquals(3, completeParser("\"string string ending\"").words().size()); // at the end always an extra one } @Test From 11a910356fb0f53bdf1606438dfa15e979352b95 Mon Sep 17 00:00:00 2001 From: Davy Landman Date: Mon, 25 Nov 2024 16:57:47 +0100 Subject: [PATCH 053/191] Detect keywords and escape them in completions --- src/org/rascalmpl/repl/BaseREPL2.java | 3 +- .../RascalIdentifierCompletion.java | 4 +- .../completers/RascalModuleCompletion.java | 3 +- .../repl/completers/RascalQualifiedNames.java | 118 ++++++++++++++++++ .../repl/jline3/RascalLineParser.java | 2 +- .../rascalmpl/test/repl/JlineParserTest.java | 2 + 6 files changed, 128 insertions(+), 4 deletions(-) create mode 100644 src/org/rascalmpl/repl/completers/RascalQualifiedNames.java diff --git a/src/org/rascalmpl/repl/BaseREPL2.java b/src/org/rascalmpl/repl/BaseREPL2.java index 209cca0da43..204ac2a8663 100644 --- a/src/org/rascalmpl/repl/BaseREPL2.java +++ b/src/org/rascalmpl/repl/BaseREPL2.java @@ -54,6 +54,7 @@ public BaseREPL2(IREPLService replService, Terminal term) { this.history = null; } reader.option(Option.HISTORY_IGNORE_DUPS, replService.historyIgnoreDuplicates()); + reader.option(Option.DISABLE_EVENT_EXPANSION, true); // stop jline expending escaped characters in the input if (replService.supportsCompletion()) { @@ -74,7 +75,7 @@ public BaseREPL2(IREPLService replService, Terminal term) { this.mimeType = ANSI_MIME_TYPE; break; } - this.unicodeSupported = term.encoding().newEncoder().canEncode("👍🏽"); + this.unicodeSupported = term.encoding().newEncoder().canEncode("💓"); this.currentPrompt = replService.prompt(ansiSupported, unicodeSupported); reader.variable(LineReader.SECONDARY_PROMPT_PATTERN, replService.parseErrorPrompt(ansiSupported, unicodeSupported)); diff --git a/src/org/rascalmpl/repl/completers/RascalIdentifierCompletion.java b/src/org/rascalmpl/repl/completers/RascalIdentifierCompletion.java index d5381b61082..1324dcdb6e0 100644 --- a/src/org/rascalmpl/repl/completers/RascalIdentifierCompletion.java +++ b/src/org/rascalmpl/repl/completers/RascalIdentifierCompletion.java @@ -41,11 +41,13 @@ public void complete(LineReader reader, ParsedLine line, List candida } public void completePartialIdentifier(String name, List candidates) { + name = RascalQualifiedNames.unescape(name); // remove escape that the interpreter cannot deal with int qualifiedSplit = name.lastIndexOf("::"); String qualifier = qualifiedSplit > -1 ? name.substring(0, qualifiedSplit) : ""; String partial = qualifiedSplit > -1 ? name.substring(qualifiedSplit + 2) : name; for (var can: lookupPartialIdentifiers.apply(qualifier, partial).entrySet()) { - candidates.add(new Candidate(can.getKey(), can.getKey(), can.getValue(), null, null, null, false)); + String id = RascalQualifiedNames.escape(can.getKey()); + candidates.add(new Candidate(id, id, can.getValue(), null, null, null, false)); } } diff --git a/src/org/rascalmpl/repl/completers/RascalModuleCompletion.java b/src/org/rascalmpl/repl/completers/RascalModuleCompletion.java index 9229aa46812..b60b2e95a93 100644 --- a/src/org/rascalmpl/repl/completers/RascalModuleCompletion.java +++ b/src/org/rascalmpl/repl/completers/RascalModuleCompletion.java @@ -35,11 +35,12 @@ public void complete(LineReader reader, ParsedLine line, List candida public void completeModuleNames(String word, List candidates, boolean importStatement) { // as jline will take care to filter prefixes, we only have to report modules in the directory (or siblings of the name) // we do not have to filter out prefixes + word = RascalQualifiedNames.unescape(word); // remove escape that the interpreter cannot deal with int rootedIndex = word.lastIndexOf("::"); String moduleRoot = rootedIndex == -1? "": word.substring(0, rootedIndex); String modulePrefix = moduleRoot.isEmpty() ? "" : moduleRoot + "::"; for (var mod : searchPathLookup.apply(moduleRoot)) { - var fullPath = modulePrefix + mod; + var fullPath = RascalQualifiedNames.escape(modulePrefix + mod); var isFullModulePath = !mod.endsWith("::"); candidates.add(new Candidate(fullPath + (isFullModulePath & importStatement? ";" : ""), fullPath, "modules", null, null, null, false)); } diff --git a/src/org/rascalmpl/repl/completers/RascalQualifiedNames.java b/src/org/rascalmpl/repl/completers/RascalQualifiedNames.java new file mode 100644 index 00000000000..620f5382af6 --- /dev/null +++ b/src/org/rascalmpl/repl/completers/RascalQualifiedNames.java @@ -0,0 +1,118 @@ +package org.rascalmpl.repl.completers; + +import java.io.IOException; +import java.io.Reader; +import java.net.URISyntaxException; +import java.util.HashSet; +import java.util.Set; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.stream.Collectors; + +import org.rascalmpl.uri.URIResolverRegistry; +import org.rascalmpl.values.ValueFactoryFactory; + +/** + * Make sure we generate escapes before rascal keywords, such that `lang::rascal::syntax` becomes `lang::rascal::\syntax` + */ +public class RascalQualifiedNames { + + private static final Pattern splitIdentifiers = Pattern.compile("[:][:]"); + + public static String escape(String name) { + return splitIdentifiers.splitAsStream(name + " ") // add space such that the last "::" is not lost + .map(RascalQualifiedNames::escapeKeyword) + .collect(Collectors.joining("::")).trim(); + } + public static String unescape(String term) { + return splitIdentifiers.splitAsStream(term + " ") // add space such that the last "::" is not lost + .map(RascalQualifiedNames::unescapeKeyword) + .collect(Collectors.joining("::")).trim() + ; + } + + private static final Set RASCAL_KEYWORDS = new HashSet(); + + private static void assureKeywordsAreScrapped() { + // TODO: replace this with the `util::Reflective::getRascalReservedIdentifiers` + // BUT! it doesn't contain all the keywords, it's missing the `BasicType` ones like `int` etc + if (RASCAL_KEYWORDS.isEmpty()) { + synchronized (RASCAL_KEYWORDS) { + if (!RASCAL_KEYWORDS.isEmpty()) { + return; + } + + String rascalGrammar = ""; + URIResolverRegistry reg = URIResolverRegistry.getInstance(); + try (Reader grammarReader = reg.getCharacterReader(ValueFactoryFactory.getValueFactory().sourceLocation("std", "", "/lang/rascal/syntax/Rascal.rsc"))) { + StringBuilder res = new StringBuilder(); + char[] chunk = new char[8 * 1024]; + int read; + while ((read = grammarReader.read(chunk, 0, chunk.length)) != -1) { + res.append(chunk, 0, read); + } + rascalGrammar = res.toString(); + } + catch (IOException | URISyntaxException e) { + e.printStackTrace(); + } + if (!rascalGrammar.isEmpty()) { + /* + * keyword RascalKeywords + * = "o" + * | "syntax" + * | "keyword" + * | "lexical" + * ... + * ; + */ + Pattern findKeywordSection = Pattern.compile("^\\s*keyword([^=]|\\s)*=(?([^;]|\\s)*);", Pattern.MULTILINE); + Matcher m = findKeywordSection.matcher(rascalGrammar); + if (m.find()) { + String keywords = "|" + m.group("keywords"); + Pattern keywordEntry = Pattern.compile("\\s*[|]\\s*[\"](?[^\"]*)[\"]"); + m = keywordEntry.matcher(keywords); + while (m.find()) { + RASCAL_KEYWORDS.add(m.group("keyword")); + } + } + /* + * syntax BasicType + = \value: "value" + | \loc: "loc" + | \node: "node" + */ + Pattern findBasicTypeSection = Pattern.compile("^\\s*syntax\\s*BasicType([^=]|\\s)*=(?([^;]|\\s)*);", Pattern.MULTILINE); + m = findBasicTypeSection.matcher(rascalGrammar); + if (m.find()) { + String keywords = "|" + m.group("keywords"); + Pattern keywordEntry = Pattern.compile("\\s*[|][^:]*:\\s*[\"](?[^\"]*)[\"]"); + m = keywordEntry.matcher(keywords); + while (m.find()) { + RASCAL_KEYWORDS.add(m.group("keyword")); + } + } + } + if (RASCAL_KEYWORDS.isEmpty()) { + RASCAL_KEYWORDS.add("syntax"); + } + } + } + } + + private static String escapeKeyword(String s) { + assureKeywordsAreScrapped(); + if (RASCAL_KEYWORDS.contains(s.trim())) { + return "\\" + s; + } + return s; + } + + private static String unescapeKeyword(String s) { + if (s.startsWith("\\") && !s.contains("-")) { + return s.substring(1); + } + return s; + } + +} diff --git a/src/org/rascalmpl/repl/jline3/RascalLineParser.java b/src/org/rascalmpl/repl/jline3/RascalLineParser.java index bde23a0781a..f754f157b43 100644 --- a/src/org/rascalmpl/repl/jline3/RascalLineParser.java +++ b/src/org/rascalmpl/repl/jline3/RascalLineParser.java @@ -200,7 +200,7 @@ private static int parseEndedAfter(String buffer, int position, Pattern parser) = Pattern.compile("^[\\|\\>][^\\|\\<\\t-\\n\\r ]*[\\|\\<]?"); private static final Pattern RASCAL_NAME - = Pattern.compile("^(([A-Za-z_]([A-Za-z0-9_]|::)*)|([\\\\][A-Za-z_]([\\-A-Za-z0-9_]|::)*))"); + = Pattern.compile("^((([A-Za-z_][A-Za-z0-9_]*)|([\\\\][A-Za-z_]([\\-A-Za-z0-9_])*))(::)?)+"); // only unicode spaces & multi-line comments private static final Pattern RASCAL_WHITE_SPACE diff --git a/test/org/rascalmpl/test/repl/JlineParserTest.java b/test/org/rascalmpl/test/repl/JlineParserTest.java index cbf45c1aa0a..91e082e1d44 100644 --- a/test/org/rascalmpl/test/repl/JlineParserTest.java +++ b/test/org/rascalmpl/test/repl/JlineParserTest.java @@ -51,6 +51,8 @@ public void stringInterpolation() { public void qualifiedNames() { assertEquals("IO::print", completeParser("IO::print").word()); assertEquals("lang::rascal", completeParser("import lang::rascal").word()); + assertEquals("lang::rascal::\\syntax", completeParser("import lang::rascal::\\syntax").word()); + assertEquals("lang::rascal::\\syntax::Rascal", completeParser("import lang::rascal::\\syntax::Rascal").word()); } @Test From 4adacedd834fbb269b5c7b877120b77421fde0d3 Mon Sep 17 00:00:00 2001 From: Davy Landman Date: Mon, 25 Nov 2024 16:59:12 +0100 Subject: [PATCH 054/191] Updated todo list --- src/org/rascalmpl/repl/BaseREPL2.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/org/rascalmpl/repl/BaseREPL2.java b/src/org/rascalmpl/repl/BaseREPL2.java index 204ac2a8663..e4c803199c2 100644 --- a/src/org/rascalmpl/repl/BaseREPL2.java +++ b/src/org/rascalmpl/repl/BaseREPL2.java @@ -91,9 +91,6 @@ public BaseREPL2(IREPLService replService, Terminal term) { // - support for html results // - measure time // - history? - // - completion of locations - // - escape & unescape of keywords in imports auto completion - } public void run() throws IOException { From 2370802aaaefb294bdc3f15799ae8e8f720fc72a Mon Sep 17 00:00:00 2001 From: Davy Landman Date: Mon, 25 Nov 2024 17:10:35 +0100 Subject: [PATCH 055/191] Added queued command support --- src/org/rascalmpl/repl/BaseREPL2.java | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/org/rascalmpl/repl/BaseREPL2.java b/src/org/rascalmpl/repl/BaseREPL2.java index e4c803199c2..49ba74016e1 100644 --- a/src/org/rascalmpl/repl/BaseREPL2.java +++ b/src/org/rascalmpl/repl/BaseREPL2.java @@ -2,9 +2,8 @@ import java.io.IOException; import java.io.PrintWriter; -import java.nio.channels.AcceptPendingException; +import java.util.Arrays; import java.util.HashMap; -import java.util.Map; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicReference; @@ -87,7 +86,6 @@ public BaseREPL2(IREPLService replService, Terminal term) { // - ctrl + / support (might not be possible) // - highlighting in the prompt? (future work, as it also hurts other parts) // - nested REPLs - // - queued commands (if it's still needed for import IO etc); // - support for html results // - measure time // - history? @@ -102,6 +100,7 @@ public void run() throws IOException { try { replService.flush(); String line = reader.readLine(this.currentPrompt); + if (line == null) { // EOF break; @@ -154,6 +153,14 @@ public void run() throws IOException { } } + /** + * Queue a command (separated by newlines) to be "entered" + * No support for multi-line input + */ + public void queueCommand(String command) { + reader.addCommandsInBuffer(Arrays.asList(command.split("[\\n\\r]"))); + } + private AtomicBoolean setupInterruptHandler() { var running = new AtomicBoolean(false); var original = new AtomicReference(null); From 8e5e79c7d543cf9631e109bfe40ff5c8777edab8 Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Mon, 9 Dec 2024 20:30:19 +0100 Subject: [PATCH 056/191] a difficult merge fix --- src/org/rascalmpl/library/lang/json/IO.java | 1 - src/org/rascalmpl/library/lang/json/IO.rsc | 12 +- .../lang/json/internal/JsonValueReader.java | 199 +++++------------- 3 files changed, 64 insertions(+), 148 deletions(-) diff --git a/src/org/rascalmpl/library/lang/json/IO.java b/src/org/rascalmpl/library/lang/json/IO.java index 616b2c24706..394db4623cc 100644 --- a/src/org/rascalmpl/library/lang/json/IO.java +++ b/src/org/rascalmpl/library/lang/json/IO.java @@ -104,7 +104,6 @@ public IValue fromJSON(IValue type, IString src) { } } - public IValue readJSON(IValue type, ISourceLocation loc, IString dateTimeFormat, IBool lenient, IBool trackOrigins, IFunction parsers, IMap nulls, IBool explicitConstructorNames, IBool explicitDataTypes) { TypeStore store = new TypeStore(); Type start = new TypeReifier(values).valueToType((IConstructor) type, store); diff --git a/src/org/rascalmpl/library/lang/json/IO.rsc b/src/org/rascalmpl/library/lang/json/IO.rsc index f1302d635fe..f0b679a8bc4 100644 --- a/src/org/rascalmpl/library/lang/json/IO.rsc +++ b/src/org/rascalmpl/library/lang/json/IO.rsc @@ -61,9 +61,11 @@ java &T readJSON( loc src, str dateTimeFormat = "yyyy-MM-dd\'T\'HH:mm:ssZZZZZ", bool lenient=false, - bool trackOrigins=false, bool explicitConstructorNames=false, bool explicitDataTypes=false, + bool trackOrigins=false, JSONParser[value] parser = (type[value] _, str _) { throw ""; }, - map [type[value] forType, value nullValue] nulls = defaultJSONNULLValues + map [type[value] forType, value nullValue] nulls = defaultJSONNULLValues, + bool explicitConstructorNames = false, + bool explicitDataTypes = false ); public map[type[value] forType, value nullValue] defaultJSONNULLValues = ( @@ -89,10 +91,10 @@ java &T parseJSON( str dateTimeFormat = "yyyy-MM-dd\'T\'HH:mm:ssZZZZZ", bool lenient=false, bool trackOrigins=false, - bool explicitConstructorNames=false, - bool explicitDataTypes=false, JSONParser[value] parser = (type[value] _, str _) { throw ""; }, - map[type[value] forType, value nullValue] nulls = defaultJSONNULLValues + map[type[value] forType, value nullValue] nulls = defaultJSONNULLValues, + bool explicitConstructorNames = false, + bool explicitDataTypes = false ); @javaClass{org.rascalmpl.library.lang.json.IO} diff --git a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java index c43b60edd2e..fb7c7b5e436 100644 --- a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java +++ b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java @@ -43,6 +43,7 @@ import io.usethesource.vallang.ISetWriter; import io.usethesource.vallang.ISourceLocation; import io.usethesource.vallang.IValue; +import io.usethesource.vallang.IValueFactory; import io.usethesource.vallang.io.StandardTextReader; import io.usethesource.vallang.type.ITypeVisitor; import io.usethesource.vallang.type.Type; @@ -57,7 +58,6 @@ /** * This class streams a JSON stream directly to an IValue representation and validates the content * to a given type as declared in a given type store. See the Rascal file lang::json::IO::readJson for documentation. - */ public class JsonValueReader { private final class ExpectedTypeDispatcher implements ITypeVisitor { @@ -110,6 +110,7 @@ public IValue visitInteger(Type type) throws IOException { } } + @Override public IValue visitReal(Type type) throws IOException { try { switch (in.peek()) { @@ -128,7 +129,7 @@ public IValue visitReal(Type type) throws IOException { throw parseErrorHere("Expected integer but got " + e.getMessage()); } } - + private IValue inferNullValue(Map nulls, Type expected) { return nulls.keySet().stream() .sorted((x,y) -> x.compareTo(y)) // smaller types are matched first @@ -136,7 +137,7 @@ private IValue inferNullValue(Map nulls, Type expected) { .findFirst() // give the most specific match .map(t -> nulls.get(t)) // lookup the corresponding null value .filter(r -> r.getType().isSubtypeOf(expected)) // the value in the table still has to fit the currently expected type - .orElse(null); // or muddle on and throw NPE elsewhere + .orElse(null); // or muddle on and throw NPE elsewhere // The NPE triggering "elsewhere" should help with fault localization. } @@ -155,142 +156,6 @@ public IValue visitString(Type type) throws IOException { return vf.string(nextString()); } - @Override - public IValue visitTuple(Type type) throws IOException { - if (isNull()) { - return inferNullValue(nulls, type); - } - private static final TypeFactory TF = TypeFactory.getInstance(); - private final TypeStore store; - private final IValueFactory vf; - private ThreadLocal format; - private final IRascalMonitor monitor; - private ISourceLocation src; - private VarHandle posHandler; - private VarHandle lineHandler; - private VarHandle lineStartHandler; - private boolean explicitConstructorNames; - private boolean explicitDataTypes; - - /** - * @param vf factory which will be used to construct values - * @param store type store to lookup constructors of abstract data-types in and the types of keyword fields - */ - public JsonValueReader(IValueFactory vf, TypeStore store, IRascalMonitor monitor, ISourceLocation src) { - this.vf = vf; - this.store = store; - this.monitor = monitor; - this.src = src; - setCalendarFormat("yyyy-MM-dd'T'HH:mm:ssZ"); - - if (src != null) { - try { - var lookup = MethodHandles.lookup(); - var privateLookup = MethodHandles.privateLookupIn(JsonReader.class, lookup); - this.posHandler = privateLookup.findVarHandle(JsonReader.class, "pos", int.class); - this.lineHandler = privateLookup.findVarHandle(JsonReader.class, "lineNumber", int.class); - this.lineStartHandler = privateLookup.findVarHandle(JsonReader.class, "lineStart", int.class); - } - catch (NoSuchFieldException | SecurityException | IllegalAccessException e) { - // we disable the origin tracking if we can not get to the fields - src = null; - monitor.warning("Unable to retrieve origin information due to: " + e.getMessage(), src); - } - } - } - - public JsonValueReader(IValueFactory vf, IRascalMonitor monitor, ISourceLocation src) { - this(vf, new TypeStore(), monitor, src); - } - - /** - * Builder method to set the format to use for all date-time values encoded as strings - */ - public JsonValueReader setCalendarFormat(String format) { - // SimpleDateFormat is not thread safe, so here we make sure - // we can use objects of this reader in different threads at the same time - this.format = new ThreadLocal() { - protected SimpleDateFormat initialValue() { - return new SimpleDateFormat(format); - } - }; - return this; - } - - public JsonValueReader setExplicitConstructorNames(boolean value) { - this.explicitConstructorNames = value; - return this; - } - - public JsonValueReader setExplicitDataTypes(boolean value) { - this.explicitDataTypes = value; - if (value) { - this.explicitConstructorNames = true; - } - return this; - } - - - /** - * Read and validate a Json stream as an IValue - * @param in json stream - * @param expected type to validate against (recursively) - * @return an IValue of the expected type - * @throws IOException when either a parse error or a validation error occurs - */ - public IValue read(JsonReader in, Type expected) throws IOException { - IValue res = expected.accept(new ITypeVisitor() { - @Override - public IValue visitInteger(Type type) throws IOException { - try { - switch (in.peek()) { - case NUMBER: - return vf.integer(in.nextLong()); - case STRING: - return vf.integer(in.nextString()); - case NULL: - return null; - default: - throw new IOException("Expected integer but got " + in.peek()); - } - } - catch (NumberFormatException e) { - throw new IOException("Expected integer but got " + e.getMessage()); - } - } - - public IValue visitReal(Type type) throws IOException { - try { - switch (in.peek()) { - case NUMBER: - return vf.real(in.nextDouble()); - case STRING: - return vf.real(in.nextString()); - case NULL: - return null; - default: - throw new IOException("Expected integer but got " + in.peek()); - } - } - catch (NumberFormatException e) { - throw new IOException("Expected integer but got " + e.getMessage()); - } - } - - @Override - public IValue visitExternal(Type type) throws IOException { - throw new IOException("External type " + type + "is not implemented yet by the json reader:" + in.getPath()); - } - - @Override - public IValue visitString(Type type) throws IOException { - if (isNull()) { - return null; - } - - return vf.string(in.nextString()); - } - @Override public IValue visitTuple(Type type) throws IOException { if (isNull()) { @@ -470,6 +335,7 @@ else if (val.contains("://")) { } } + @Override public IValue visitRational(Type type) throws IOException { if (isNull()) { return inferNullValue(nulls, type); @@ -604,6 +470,7 @@ private int getCol() { return 0; } } + protected Throw parseErrorHere(String cause) { var location = src == null ? URIUtil.rootLocation("unknown") : src; int offset = Math.max(getPos(), lastPos); @@ -892,7 +759,7 @@ private boolean isNull() throws IOException { private static final TypeFactory TF = TypeFactory.getInstance(); private final TypeStore store; - private final IRascalValueFactory vf; + private final IValueFactory vf; private ThreadLocal format; private final IRascalMonitor monitor; private ISourceLocation src; @@ -900,10 +767,59 @@ private boolean isNull() throws IOException { private VarHandle posHandler; private VarHandle lineHandler; private VarHandle lineStartHandler; + private boolean explicitConstructorNames; + private boolean explicitDataTypes; private IFunction parsers; private Map nulls = Collections.emptyMap(); + /** + * @param vf factory which will be used to construct values + * @param store type store to lookup constructors of abstract data-types in and the types of keyword fields + * @param monitor provides progress reports and warnings + * @param src loc to use to identify the entire file. + */ + public JsonValueReader(IValueFactory vf, TypeStore store, IRascalMonitor monitor, ISourceLocation src) { + this.vf = vf; + this.store = store; + this.monitor = monitor; + this.src = src; + setCalendarFormat("yyyy-MM-dd'T'HH:mm:ssZ"); + + if (src != null) { + try { + var lookup = MethodHandles.lookup(); + var privateLookup = MethodHandles.privateLookupIn(JsonReader.class, lookup); + this.posHandler = privateLookup.findVarHandle(JsonReader.class, "pos", int.class); + this.lineHandler = privateLookup.findVarHandle(JsonReader.class, "lineNumber", int.class); + this.lineStartHandler = privateLookup.findVarHandle(JsonReader.class, "lineStart", int.class); + this.originTracking = (src != null); + } + catch (NoSuchFieldException | SecurityException | IllegalAccessException e) { + // we disable the origin tracking if we can not get to the fields + src = null; + originTracking = false; + monitor.warning("Unable to retrieve origin information due to: " + e.getMessage(), src); + } + } + } + public JsonValueReader(IValueFactory vf, IRascalMonitor monitor, ISourceLocation src) { + this(vf, new TypeStore(), monitor, src); + } + + public JsonValueReader setExplicitConstructorNames(boolean value) { + this.explicitConstructorNames = value; + return this; + } + + public JsonValueReader setExplicitDataTypes(boolean value) { + this.explicitDataTypes = value; + if (value) { + this.explicitConstructorNames = true; + } + return this; + } + /** * @param vf factory which will be used to construct values * @param store type store to lookup constructors of abstract data-types in and the types of keyword fields @@ -914,7 +830,6 @@ public JsonValueReader(IRascalValueFactory vf, TypeStore store, IRascalMonitor m this.monitor = monitor; this.src = (src == null) ? URIUtil.rootLocation("unknown") : src; - setCalendarFormat("yyyy-MM-dd'T'HH:mm:ssZ"); // this is for origin tracking as well as accurate parse errors @@ -983,4 +898,4 @@ public IValue read(JsonReader in, Type expected) throws IOException { throw dispatch.parseErrorHere(e.getMessage()); } } -} \ No newline at end of file +} From 89ece88cc96c6a29e7d7602f2e28bb7ae5406c3c Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Mon, 9 Dec 2024 20:33:29 +0100 Subject: [PATCH 057/191] fixed bug in test due to overloading the identifier example --- src/org/rascalmpl/library/lang/json/IO.java | 1 - .../rascal/tests/library/lang/json/JSONIOTests.rsc | 14 +++++++------- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/org/rascalmpl/library/lang/json/IO.java b/src/org/rascalmpl/library/lang/json/IO.java index 394db4623cc..43d8fd3ece4 100644 --- a/src/org/rascalmpl/library/lang/json/IO.java +++ b/src/org/rascalmpl/library/lang/json/IO.java @@ -142,7 +142,6 @@ public IValue parseJSON(IValue type, IString src, IString dateTimeFormat, IBool TypeStore store = new TypeStore(); Type start = new TypeReifier(values).valueToType((IConstructor) type, store); - try (JsonReader in = new JsonReader(new StringReader(src.getValue()))) { in.setLenient(lenient.getValue()); return new JsonValueReader(values, store, monitor, trackOrigins.getValue() ? URIUtil.rootLocation("unknown") : null) diff --git a/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc b/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc index 2e7e13f975e..3f378664094 100644 --- a/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc +++ b/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc @@ -127,12 +127,12 @@ test bool formattingToStringsTest() { } test bool explicitConstructorNames() { - example = data4(e=z()); - json = asJSON(example, explicitConstructorNames=true); + tmp = data4(e=z()); + json = asJSON(tmp, explicitConstructorNames=true); assert json == "{\"_constructor\":\"data4\",\"e\":{\"_constructor\":\"z\"}}"; - assert parseJSON(#DATA4, json, explicitConstructorNames=true) == example; + assert parseJSON(#DATA4, json, explicitConstructorNames=true) == tmp; // here we can't be sure to get z() back, but we will get some Enum assert data4(e=Enum _) := parseJSON(#DATA4, json, explicitConstructorNames=false); @@ -141,17 +141,17 @@ test bool explicitConstructorNames() { } test bool explicitDataTypes() { - example = data4(e=z()); - json = asJSON(example, explicitDataTypes=true); + tmp = data4(e=z()); + json = asJSON(tmp, explicitDataTypes=true); assert json == "{\"_constructor\":\"data4\",\"_type\":\"DATA4\",\"e\":{\"_constructor\":\"z\",\"_type\":\"Enum\"}}"; // _constructor and _type must be the first fields - assert parseJSON(#DATA4, json, explicitDataTypes=true) == example; + assert parseJSON(#DATA4, json, explicitDataTypes=true) == tmp; // _type and _constructor may appear in a different order flippedJson = "{\"_type\":\"DATA4\",\"_constructor\":\"data4\",\"e\":{\"_constructor\":\"z\",\"_type\":\"Enum\"}}"; - assert parseJSON(#DATA4, flippedJson, explicitDataTypes=true) == example; + assert parseJSON(#DATA4, flippedJson, explicitDataTypes=true) == tmp; // here we can't be sure to get z() back, but we will get some Enum assert data4(e=Enum _) := parseJSON(#DATA4, json, explicitDataTypes=false); From f62cca3805266642d45a3ea10e8556ee038d0797 Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Tue, 10 Dec 2024 14:23:30 +0100 Subject: [PATCH 058/191] resolved more merge problems --- .../lang/json/internal/JsonValueReader.java | 121 +++++++++++++----- .../tests/library/lang/json/JSONIOTests.rsc | 41 +----- 2 files changed, 96 insertions(+), 66 deletions(-) diff --git a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java index fb7c7b5e436..7f7a09c2b72 100644 --- a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java +++ b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java @@ -544,26 +544,84 @@ private IValue visitStringAsAbstractData(Type type) throws IOException { * @throws IOException */ private IValue visitObjectAsAbstractData(Type type) throws IOException { - Set alternatives = store.lookupAlternatives(type); - if (alternatives.size() > 1) { - monitor.warning("selecting arbitrary constructor for " + type, vf.sourceLocation(in.getPath())); - } - Type cons = alternatives.iterator().next(); - + Set alternatives = null; + in.beginObject(); int startPos = getPos(); int startLine = getLine(); int startCol = getCol(); + // use explicit information in the JSON to select and filter constructors from the TypeStore + // we expect always to have the field _constructor before _type. + if (explicitConstructorNames || explicitDataTypes) { + String consName = null; + String typeName = null; // this one is optional, and the order with cons is not defined. + String consLabel = in.nextName(); + + // first we read either a cons name or a type name + if (explicitConstructorNames && "_constructor".equals(consLabel)) { + consName = in.nextString(); + } + else if (explicitDataTypes && "_type".equals(consLabel)) { + typeName = in.nextString(); + } + + // optionally read the second field + if (explicitDataTypes && typeName == null) { + // we've read a constructor name, but we still need a type name + consLabel = in.nextName(); + if (explicitDataTypes && "_type".equals(consLabel)) { + typeName = in.nextString(); + } + } + else if (explicitDataTypes && consName == null) { + // we've read type name, but we still need a constructor name + consLabel = in.nextName(); + if (explicitDataTypes && "_constructor".equals(consLabel)) { + consName = in.nextString(); + } + } + + if (explicitDataTypes && typeName == null) { + throw parseErrorHere("Missing a _type field: " + in.getPath()); + } + else if (explicitConstructorNames && consName == null) { + throw parseErrorHere("Missing a _constructor field: " + in.getPath()); + } + + if (typeName != null && consName != null) { + // first focus on the given type name + var dataType = TF.abstractDataType(store, typeName); + alternatives = store.lookupConstructor(dataType, consName); + } + else { + // we only have a constructor name + // lookup over all data types by constructor name + alternatives = store.lookupConstructors(consName); + } + } + else { + alternatives = store.lookupAlternatives(type); + } + + if (alternatives.size() > 1) { + monitor.warning("selecting arbitrary constructor for " + type, vf.sourceLocation(in.getPath())); + } + else if (alternatives.size() == 0) { + throw parseErrorHere("No fitting constructor found for " + in.getPath()); + } + + Type cons = alternatives.iterator().next(); + IValue[] args = new IValue[cons.getArity()]; Map kwParams = new HashMap<>(); - + if (!cons.hasFieldNames() && cons.getArity() != 0) { throw parseErrorHere("For the object encoding constructors must have field names " + in.getPath()); } - + while (in.hasNext()) { - String label = nextName(); + String label = in.nextName(); if (cons.hasField(label)) { IValue val = read(in, cons.getFieldType(label)); if (val != null) { @@ -578,29 +636,35 @@ else if (cons.hasKeywordField(label, store)) { IValue val = read(in, store.getKeywordParameterType(cons, label)); // null can still happen if the nulls map doesn't have a default if (val != null) { - // if the value is null we'd use the default value of the defined field in the constructor - kwParams.put(label, val); + // if the value is null we'd use the default value of the defined field in the constructor + kwParams.put(label, val); } } - } - else { // its a normal arg, pass its label to the child - if (!explicitConstructorNames && "_constructor".equals(label)) { - // ignore additional _constructor fields. - in.nextString(); // skip the constructor value - continue; - } - else if (!explicitDataTypes && "_type".equals(label)) { - // ignore additional _type fields. - in.nextString(); // skip the type value - continue; + else { + var nullValue = inferNullValue(nulls, cons.getAbstractDataType()); + if (nullValue != null) { + kwParams.put(label, nullValue); } - else { - // field label does not match data type definition + } + } + else { // its a normal arg, pass its label to the child + if (!explicitConstructorNames && "_constructor".equals(label)) { + // ignore additional _constructor fields. + in.nextString(); // skip the constructor value + continue; + } + else if (!explicitDataTypes && "_type".equals(label)) { + // ignore additional _type fields. + in.nextString(); // skip the type value + continue; + } + else { + // field label does not match data type definition throw parseErrorHere("Unknown field " + label + ":" + in.getPath()); - } + } } - } - + } + in.endObject(); int endPos = getPos(); int endLine = getLine(); @@ -612,11 +676,10 @@ else if (!explicitDataTypes && "_type".equals(label)) { } } - if (originTracking) { + if (src != null) { kwParams.put(kwParams.containsKey("src") ? "rascal-src" : "src", vf.sourceLocation(src, startPos, endPos - startPos + 1, startLine, endLine, startCol, endCol + 1)); } - return vf.constructor(cons, args, kwParams); } diff --git a/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc b/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc index 3f378664094..f543e5ef0bd 100644 --- a/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc +++ b/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc @@ -91,8 +91,8 @@ test bool dealWithNull() { assert parseJSON(#map[str,Maybe[str]], "{\"bla\": \"foo\"}") == ("bla":just("foo")); // keyword parameters and null - assert parseJSON(#Cons, "{\"bla\": \"foo\"}") == cons(bla="foo"); - assert parseJSON(#Cons, "{\"bla\": null}") == cons(); + assert cons(bla="foo") := parseJSON(#Cons, "{\"bla\": \"foo\"}"); + assert cons() := parseJSON(#Cons, "{\"bla\": null}"); return true; } @@ -147,44 +147,11 @@ test bool explicitDataTypes() { assert json == "{\"_constructor\":\"data4\",\"_type\":\"DATA4\",\"e\":{\"_constructor\":\"z\",\"_type\":\"Enum\"}}"; // _constructor and _type must be the first fields - assert parseJSON(#DATA4, json, explicitDataTypes=true) == tmp; + assert tmp := parseJSON(#DATA4, json, explicitDataTypes=true) ; // _type and _constructor may appear in a different order flippedJson = "{\"_type\":\"DATA4\",\"_constructor\":\"data4\",\"e\":{\"_constructor\":\"z\",\"_type\":\"Enum\"}}"; - assert parseJSON(#DATA4, flippedJson, explicitDataTypes=true) == tmp; - - // here we can't be sure to get z() back, but we will get some Enum - assert data4(e=Enum _) := parseJSON(#DATA4, json, explicitDataTypes=false); - - return true; -} - -test bool explicitConstructorNames() { - example = data4(e=z()); - json = asJSON(example, explicitConstructorNames=true); - - assert json == "{\"_constructor\":\"data4\",\"e\":{\"_constructor\":\"z\"}}"; - - assert parseJSON(#DATA4, json, explicitConstructorNames=true) == example; - - // here we can't be sure to get z() back, but we will get some Enum - assert data4(e=Enum _) := parseJSON(#DATA4, json, explicitConstructorNames=false); - - return true; -} - -test bool explicitDataTypes() { - example = data4(e=z()); - json = asJSON(example, explicitDataTypes=true); - - assert json == "{\"_constructor\":\"data4\",\"_type\":\"DATA4\",\"e\":{\"_constructor\":\"z\",\"_type\":\"Enum\"}}"; - - // _constructor and _type must be the first fields - assert parseJSON(#DATA4, json, explicitDataTypes=true) == example; - - // _type and _constructor may appear in a different order - flippedJson = "{\"_type\":\"DATA4\",\"_constructor\":\"data4\",\"e\":{\"_constructor\":\"z\",\"_type\":\"Enum\"}}"; - assert parseJSON(#DATA4, flippedJson, explicitDataTypes=true) == example; + assert tmp := parseJSON(#DATA4, flippedJson, explicitDataTypes=true); // here we can't be sure to get z() back, but we will get some Enum assert data4(e=Enum _) := parseJSON(#DATA4, json, explicitDataTypes=false); From fb3e96fd9a186f80869c095ed706233f2373d823 Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Tue, 10 Dec 2024 14:48:29 +0100 Subject: [PATCH 059/191] all test work again --- .../lang/rascal/tests/library/lang/json/JSONIOTests.rsc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc b/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc index f543e5ef0bd..6853dcb52a3 100644 --- a/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc +++ b/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc @@ -132,7 +132,7 @@ test bool explicitConstructorNames() { assert json == "{\"_constructor\":\"data4\",\"e\":{\"_constructor\":\"z\"}}"; - assert parseJSON(#DATA4, json, explicitConstructorNames=true) == tmp; + assert tmp2 := parseJSON(#DATA4, json, explicitConstructorNames=true) && tmp2 := tmp; // here we can't be sure to get z() back, but we will get some Enum assert data4(e=Enum _) := parseJSON(#DATA4, json, explicitConstructorNames=false); @@ -147,11 +147,11 @@ test bool explicitDataTypes() { assert json == "{\"_constructor\":\"data4\",\"_type\":\"DATA4\",\"e\":{\"_constructor\":\"z\",\"_type\":\"Enum\"}}"; // _constructor and _type must be the first fields - assert tmp := parseJSON(#DATA4, json, explicitDataTypes=true) ; + assert tmp2 := parseJSON(#DATA4, json, explicitDataTypes=true) && tmp := tmp2 ; // _type and _constructor may appear in a different order flippedJson = "{\"_type\":\"DATA4\",\"_constructor\":\"data4\",\"e\":{\"_constructor\":\"z\",\"_type\":\"Enum\"}}"; - assert tmp := parseJSON(#DATA4, flippedJson, explicitDataTypes=true); + assert tmp2 := parseJSON(#DATA4, flippedJson, explicitDataTypes=true) && tmp := tmp2; // here we can't be sure to get z() back, but we will get some Enum assert data4(e=Enum _) := parseJSON(#DATA4, json, explicitDataTypes=false); From 566349a2ff6cb907a39844309727dde081574154 Mon Sep 17 00:00:00 2001 From: paulklint Date: Tue, 10 Dec 2024 17:17:19 +0100 Subject: [PATCH 060/191] Added debug print. --- src/org/rascalmpl/library/util/Reflective.rsc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/org/rascalmpl/library/util/Reflective.rsc b/src/org/rascalmpl/library/util/Reflective.rsc index 9b3c693bc01..7982523ad7b 100644 --- a/src/org/rascalmpl/library/util/Reflective.rsc +++ b/src/org/rascalmpl/library/util/Reflective.rsc @@ -219,7 +219,7 @@ str getModuleName(loc moduleLoc, PathConfig pcfg){ if(lastName[0] == "$"){ candidateAsList = [*candidateAsList[..-1],lastName[1..]]; } - //println("cand: , modpath: "); + println("cand: , modpath: "); n = commonPrefix(reverse(candidateAsList), modulePathReversed); if(n > longestSuffix){ From 571dc3f01893aca1a0f5f68855574aeb1739e4a6 Mon Sep 17 00:00:00 2001 From: paulklint Date: Tue, 10 Dec 2024 20:36:55 +0100 Subject: [PATCH 061/191] Fixed getModuleName for library case --- src/org/rascalmpl/library/util/Reflective.rsc | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/org/rascalmpl/library/util/Reflective.rsc b/src/org/rascalmpl/library/util/Reflective.rsc index 7982523ad7b..a610850f975 100644 --- a/src/org/rascalmpl/library/util/Reflective.rsc +++ b/src/org/rascalmpl/library/util/Reflective.rsc @@ -195,7 +195,11 @@ str getModuleName(loc moduleLoc, PathConfig pcfg){ while(modulePathNoExt[0] == "/"){ modulePathNoExt = modulePathNoExt[1..]; } + modulePathAsList = split("/", modulePathNoExt); + if(modulePathAsList[0] == "rascal"){ + modulePathAsList = modulePathAsList[1..]; + } modulePathReversed = reverse(modulePathAsList); int longestSuffix = 0; @@ -215,11 +219,7 @@ str getModuleName(loc moduleLoc, PathConfig pcfg){ } candidateAsList = split("/", candidate); - lastName = candidateAsList[-1]; - if(lastName[0] == "$"){ - candidateAsList = [*candidateAsList[..-1],lastName[1..]]; - } - println("cand: , modpath: "); + // println("cand: , modpath: "); n = commonPrefix(reverse(candidateAsList), modulePathReversed); if(n > longestSuffix){ @@ -229,6 +229,10 @@ str getModuleName(loc moduleLoc, PathConfig pcfg){ } if(longestSuffix > 0){ + lastName = modulePathAsList[-1]; + if(lastName[0] == "$"){ + modulePathAsList = [*modulePathAsList[..-1],lastName[1..]]; + } return intercalate("::", modulePathAsList[size(modulePathAsList) - longestSuffix .. ]); } throw "No module name found for ;\nsrcs=;\nlibs="; From 5adbb8a433f77a74f35c2d1ea5ddeccb2f9d81b4 Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Wed, 11 Dec 2024 10:53:13 +0100 Subject: [PATCH 062/191] added accurate parse error test --- src/org/rascalmpl/library/lang/json/IO.rsc | 3 ++- .../tests/library/lang/json/JSONIOTests.rsc | 20 +++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/org/rascalmpl/library/lang/json/IO.rsc b/src/org/rascalmpl/library/lang/json/IO.rsc index f0b679a8bc4..2f40b1d4559 100644 --- a/src/org/rascalmpl/library/lang/json/IO.rsc +++ b/src/org/rascalmpl/library/lang/json/IO.rsc @@ -15,6 +15,7 @@ module lang::json::IO import util::Maybe; +import Exception; @synopsis{JSON parse errors have more information than general parse errors} @description{ @@ -22,7 +23,7 @@ import util::Maybe; * `cause` is a factual diagnosis of what was expected at that position, versus what was found. * `path` is a path query string into the JSON value from the root down to the leaf where the error was detected. } -data RuntimeException = ParseError(loc location, str cause="", str path=""); +data RuntimeException(str cause="", str path=""); @javaClass{org.rascalmpl.library.lang.json.IO} @synopsis{Maps any Rascal value to a JSON string} diff --git a/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc b/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc index 6853dcb52a3..6f5e55068b5 100644 --- a/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc +++ b/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc @@ -72,6 +72,26 @@ test bool originTracking() { return true; } +test bool accurateParseErrors() { + ex = readFile(|std:///lang/rascal/tests/library/lang/json/glossary.json|); + broken = ex[..size(ex)/2] + ex[size(ex)/2+10..]; + + try { + ex2 = parseJSON(#node, broken, trackOrigins=true); + } + catch ParseError(loc l): + return l.begin.line == 14; + + try { + // accurate locations have to be provided also when trackOrigins=false + ex2 = parseJSON(#node, broken, trackOrigins=false); + } + catch ParseError(loc l): // , cause=/^Unterminated object.*/, path="$.glossary.GlossDiv.GlossList.GlossEntry.GlossTerm") : + return l.begin.line == 14; + + return true; +} + data Cons = cons(str bla = "null"); test bool dealWithNull() { From 3d8a807206bc4e6bb187ef8c4f750f8faf15d3f3 Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Wed, 11 Dec 2024 14:47:51 +0100 Subject: [PATCH 063/191] made reflective tests thread safe --- .../tests/library/util/ReflectiveTests.rsc | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/src/org/rascalmpl/library/lang/rascal/tests/library/util/ReflectiveTests.rsc b/src/org/rascalmpl/library/lang/rascal/tests/library/util/ReflectiveTests.rsc index e9df6c2f808..06739ef33d6 100644 --- a/src/org/rascalmpl/library/lang/rascal/tests/library/util/ReflectiveTests.rsc +++ b/src/org/rascalmpl/library/lang/rascal/tests/library/util/ReflectiveTests.rsc @@ -1,12 +1,13 @@ module lang::rascal::tests::library::util::ReflectiveTests -import util::Reflective; - -import util::FileSystem; import IO; -import String; import List; +import String; +import util::FileSystem; +import util::Reflective; +import util::UUID; +private loc testLibraryLoc = |memory://myTestLibrary-/|; test bool commonSuffixCommutative(list[str] a, list[str] b) = commonSuffix(a, b) == commonSuffix(b, a); test bool cs1() = commonSuffix([], ["c"]) == 0; @@ -33,35 +34,35 @@ test bool moduleReflectiveWithSrc() { } test bool moduleExceptionOnlyTpl() { - writeFile(|memory://myTestLibrary/resources/rascal/$Exception.tpl|, + writeFile(testLibraryLoc + "/resources/rascal/$Exception.tpl", "$Exception.tpl (only file matters, content irrelevant) "); - pcfg = pathConfig(libs=[|memory://myTestLibrary/resources/|] + pcfg = pathConfig(libs=[testLibraryLoc + "/resources/"] ); return getModuleName(|project://rascal/src/org/rascalmpl/library/Exception.rsc|, pcfg) == "Exception"; } test bool moduleReflectiveOnlyTpl() { - writeFile(|memory://myTestLibrary/resources/rascal/util/Reflective.tpl|, + writeFile(testLibraryLoc + "/resources/rascal/util/Reflective.tpl", "util::$Reflective.tpl (only file matters, content irrelevant) "); pcfg = pathConfig(srcs = [], - libs=[|memory://myTestLibrary/resources/|] + libs=[testLibraryLoc + "/resources/"] ); return getModuleName(|project://rascal/src/org/rascalmpl/library/util/Reflective.rsc|, pcfg) == "util::Reflective"; } test bool longestModuleReflectiveOnlyTpl() { - writeFile(|memory://myTestLibrary1/resources/rascal/$Reflective.tpl|, + writeFile(testLibraryLoc + "/1/resources/rascal/$Reflective.tpl", "$Reflective.tpl at top level (only file matters, content irrelevant) "); - writeFile(|memory://myTestLibrary2/resources/rascal/util/Reflective.tpl|, + writeFile(testLibraryLoc + "/2/resources/rascal/util/Reflective.tpl", "util::$Reflective.tpl in subdir util (only file matters, content irrelevant) "); pcfg = pathConfig(srcs= [], - libs=[|memory://myTestLibrary1/resources/|, |memory://myTestLibrary2/resources/|] + libs=[testLibraryLoc + "1/resources/", testLibraryLoc + "/2/resources/"] ); return getModuleName(|project://rascal/src/org/rascalmpl/library/util/Reflective.rsc|, pcfg) == "util::Reflective"; From d51c5598b40497624ecef5d2fdf2c8dc1e7d57eb Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Wed, 11 Dec 2024 15:20:41 +0100 Subject: [PATCH 064/191] addresses a part of #2098 by recovering positional parameters for nodes based on the naming scheme arg --- .../lang/json/internal/JsonValueReader.java | 29 +++++++++++++++---- 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java index 7f7a09c2b72..872dafc0402 100644 --- a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java +++ b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java @@ -725,13 +725,25 @@ public IValue visitNode(Type type) throws IOException { int startCol = getCol(); Map kws = new HashMap<>(); - + Map args = new HashMap<>(); + while (in.hasNext()) { String kwName = nextName(); - IValue value = read(in, TF.valueType()); - - if (value != null) { - kws.put(kwName, value); + boolean positioned = kwName.startsWith("arg"); + + if (!isNull()) { // lookahead for null to give default parameters the preference. + IValue val = read(in, TF.valueType()); + + if (val != null) { + // if the value is null we'd use the default value of the defined field in the constructor + (positioned ? args : kws).put(kwName, val); + } + } + else { + var nullValue = inferNullValue(nulls, TF.valueType()); + if (nullValue != null) { + (positioned ? args : kws).put(kwName, nullValue); + } } } @@ -744,7 +756,12 @@ public IValue visitNode(Type type) throws IOException { kws.put(kws.containsKey("src") ? "rascal-src" : "src", vf.sourceLocation(src, startPos, endPos - startPos + 1, startLine, endLine, startCol, endCol + 1)); } - return vf.node("object", new IValue[] { }, kws); + IValue[] argArray = args.entrySet().stream() + .sorted((e, f) -> e.getKey().compareTo(f.getKey())) + .map(e -> e.getValue()) + .toArray(IValue[]::new); + + return vf.node("object", argArray, kws); } @Override From 49d4e22ba2ef8e4c75162269d5e764a87bbef2b8 Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Wed, 11 Dec 2024 15:35:24 +0100 Subject: [PATCH 065/191] fixes #2098 by cleansing random reals and ints and mapping them into the representable range for JSON --- .../tests/library/lang/json/JSONIOTests.rsc | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc b/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc index 6f5e55068b5..c6f03244f85 100644 --- a/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc +++ b/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc @@ -5,23 +5,16 @@ import lang::json::IO; import util::UUID; import util::Maybe; import IO; +import util::Math; loc targetFile = |memory://test-tmp/test-<"">.json|; -bool jsonFeaturesSupported(value v) { - for (/num r := v, size("") > 10) { - // json can only contain double precision numbers (doubles) - // so let's ignore the cases where we get higher random numbers - return false; - } - - return true; -} - bool writeRead(type[&T] returnType, &T dt) { - if (!jsonFeaturesSupported(dt)) { - return true; + dt = visit (dt) { + case real r => fitDouble(r) + case int i => i % floor(pow(2, 10)) when abs(i) > pow(2, 10) } + json = toJSON(dt); return fromJSON(returnType, json) == dt; } From 1800e0c2d0c8c473d51310e1a39bafcec537ba69 Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Wed, 11 Dec 2024 15:40:13 +0100 Subject: [PATCH 066/191] added some comments --- .../library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc b/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc index c6f03244f85..ce28b66894f 100644 --- a/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc +++ b/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc @@ -11,7 +11,9 @@ loc targetFile = |memory://test-tmp/test-<"">.json|; bool writeRead(type[&T] returnType, &T dt) { dt = visit (dt) { + // reals must fit in double case real r => fitDouble(r) + // integers must not overflow case int i => i % floor(pow(2, 10)) when abs(i) > pow(2, 10) } From 2e4e9c1f671bfc3cebe3de57364c54c88b8d7ccb Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Wed, 11 Dec 2024 15:42:09 +0100 Subject: [PATCH 067/191] used the wrong part of the UUID URI --- .../library/lang/rascal/tests/library/util/ReflectiveTests.rsc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/org/rascalmpl/library/lang/rascal/tests/library/util/ReflectiveTests.rsc b/src/org/rascalmpl/library/lang/rascal/tests/library/util/ReflectiveTests.rsc index 06739ef33d6..b10804d0ad0 100644 --- a/src/org/rascalmpl/library/lang/rascal/tests/library/util/ReflectiveTests.rsc +++ b/src/org/rascalmpl/library/lang/rascal/tests/library/util/ReflectiveTests.rsc @@ -7,7 +7,7 @@ import util::FileSystem; import util::Reflective; import util::UUID; -private loc testLibraryLoc = |memory://myTestLibrary-/|; +private loc testLibraryLoc = |memory://myTestLibrary-/|; test bool commonSuffixCommutative(list[str] a, list[str] b) = commonSuffix(a, b) == commonSuffix(b, a); test bool cs1() = commonSuffix([], ["c"]) == 0; From 785a8b7715e646c1ddf91c3514f367905ec6b264 Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Wed, 11 Dec 2024 15:47:54 +0100 Subject: [PATCH 068/191] set errorsAsWarnings to false for tutor compilation --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index b19c32f5c13..c27b3e181cd 100644 --- a/pom.xml +++ b/pom.xml @@ -178,7 +178,7 @@ false false - true + false ${project.build.outputDirectory} ${project.basedir}/LICENSE |http://github.com/usethesource/rascal/blob/main| From dd01d7caa6c00454b0e756153bd465f20b615237 Mon Sep 17 00:00:00 2001 From: paulklint Date: Thu, 12 Dec 2024 00:33:21 +0100 Subject: [PATCH 069/191] Deprecate getModuleName, getModuleLocation, etc. Gradually moving them to compiler --- src/org/rascalmpl/library/util/Reflective.rsc | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/org/rascalmpl/library/util/Reflective.rsc b/src/org/rascalmpl/library/util/Reflective.rsc index a610850f975..4238fd7d844 100644 --- a/src/org/rascalmpl/library/util/Reflective.rsc +++ b/src/org/rascalmpl/library/util/Reflective.rsc @@ -103,6 +103,7 @@ PathConfig applyManifests(PathConfig cfg) { return cfg; } +@deprecated{Function will be moved to Rascal compiler} str makeFileName(str qualifiedModuleName, str extension = "rsc") { str qnameSlashes = replaceAll(qualifiedModuleName, "::", "/"); int n = findLast(qnameSlashes, "/"); @@ -112,6 +113,7 @@ str makeFileName(str qualifiedModuleName, str extension = "rsc") { return "">"; } +@deprecated{Function will be moved to Rascal compiler} loc getSearchPathLoc(str filePath, PathConfig pcfg){ for(loc dir <- pcfg.srcs + pcfg.libs){ fileLoc = dir + filePath; @@ -123,6 +125,7 @@ loc getSearchPathLoc(str filePath, PathConfig pcfg){ throw "Module with path not found"; } +@deprecated{Function will be moved to Rascal compiler} @synopsis{Get the location of a named module, search for `src` in srcs and `tpl` in libs} loc getModuleLocation(str qualifiedModuleName, PathConfig pcfg){ fileName = makeFileName(qualifiedModuleName, extension="rsc"); @@ -143,16 +146,19 @@ loc getModuleLocation(str qualifiedModuleName, PathConfig pcfg){ throw "Module `` not found;\n"; } +@deprecated{Function will be moved to Rascal compiler} tuple[str,str] splitFileExtension(str path){ int n = findLast(path, "."); if(n < 0) return ; return ; } +@deprecated{Function will be moved to Rascal compiler} @synopsis{Determine length of common suffix of list of strings} int commonSuffix(list[str] dir, list[str] m) = commonPrefix(reverse(dir), reverse(m)); +@deprecated{Function will be moved to Rascal compiler} @synopsis{Determine length of common prefix of list of strings} int commonPrefix(list[str] rdir, list[str] rm){ for(int i <- index(rm)){ @@ -167,6 +173,7 @@ int commonPrefix(list[str] rdir, list[str] rm){ return size(rm); } +@deprecated{Function will be moved to Rascal compiler} @synopsis{Find the module name corresponding to a given module location via its (src or tpl) location} str getModuleName(loc moduleLoc, PathConfig pcfg){ modulePath = moduleLoc.path; @@ -238,6 +245,7 @@ str getModuleName(loc moduleLoc, PathConfig pcfg){ throw "No module name found for ;\nsrcs=;\nlibs="; } +@deprecated{Function will be moved to Rascal compiler} @synopsis{Derive a location from a given module name for reading} @description{ Given a module name, a file name extension, and a PathConfig, @@ -287,7 +295,7 @@ tuple[bool, loc] getDerivedReadLoc(str qualifiedModuleName, str extension, PathC return ; } - +@deprecated{Function will be moved to Rascal compiler} @synopsis{Derive a location from a given module name for writing} @description{ Given a module name, a file name extension, and a PathConfig, From 4800e528aa5901ff2f48659594b3d52ce7ff9311 Mon Sep 17 00:00:00 2001 From: paulklint Date: Fri, 13 Dec 2024 17:39:23 +0100 Subject: [PATCH 070/191] Backported fixes --- src/org/rascalmpl/library/util/Reflective.rsc | 36 +++++++++++++------ 1 file changed, 25 insertions(+), 11 deletions(-) diff --git a/src/org/rascalmpl/library/util/Reflective.rsc b/src/org/rascalmpl/library/util/Reflective.rsc index 4238fd7d844..7f0d90e0b0a 100644 --- a/src/org/rascalmpl/library/util/Reflective.rsc +++ b/src/org/rascalmpl/library/util/Reflective.rsc @@ -177,22 +177,26 @@ int commonPrefix(list[str] rdir, list[str] rm){ @synopsis{Find the module name corresponding to a given module location via its (src or tpl) location} str getModuleName(loc moduleLoc, PathConfig pcfg){ modulePath = moduleLoc.path; + + rscFile = endsWith(modulePath, "rsc"); + tplFile = endsWith(modulePath, "tpl"); - if(!(endsWith(modulePath, "rsc") || endsWith(modulePath, "tpl"))){ + if(!( rscFile || tplFile )){ throw "Not a Rascal .src or .tpl file: "; } // Find matching .rsc file in source directories - - for(loc dir <- pcfg.srcs){ - if(moduleLoc.authority == dir.authority && startsWith(modulePath, dir.path)) { - moduleName = replaceFirst(modulePath, dir.path, ""); - = splitFileExtension(moduleName); - if(moduleName[0] == "/"){ - moduleName = moduleName[1..]; - } - moduleName = replaceAll(moduleName, "/", "::"); - return moduleName; + if(rscFile){ + for(loc dir <- pcfg.srcs){ + if(moduleLoc.authority == dir.authority && startsWith(modulePath, dir.path)) { + moduleName = replaceFirst(modulePath, dir.path, ""); + = splitFileExtension(moduleName); + if(moduleName[0] == "/"){ + moduleName = moduleName[1..]; + } + moduleName = replaceAll(moduleName, "/", "::"); + return moduleName; + } } } @@ -204,6 +208,12 @@ str getModuleName(loc moduleLoc, PathConfig pcfg){ } modulePathAsList = split("/", modulePathNoExt); + if(tplFile){ + lastName = modulePathAsList[-1]; + if(lastName[0] == "$"){ + modulePathAsList = [*modulePathAsList[..-1],lastName[1..]]; + } + } if(modulePathAsList[0] == "rascal"){ modulePathAsList = modulePathAsList[1..]; } @@ -226,6 +236,10 @@ str getModuleName(loc moduleLoc, PathConfig pcfg){ } candidateAsList = split("/", candidate); + lastName = candidateAsList[-1]; + if(lastName[0] == "$"){ + candidateAsList = [*candidateAsList[..-1],lastName[1..]]; + } // println("cand: , modpath: "); n = commonPrefix(reverse(candidateAsList), modulePathReversed); From 48220be8dc9d30db5bf64b1e1fe9712f1c6dc14d Mon Sep 17 00:00:00 2001 From: paulklint Date: Sun, 15 Dec 2024 17:15:24 +0100 Subject: [PATCH 071/191] Completely reverted removal of getModuleName, etc. This has to wait until the merge of racal-core in rascal. Then we should do a complete refactoring of util::Reflective. --- src/org/rascalmpl/library/util/Reflective.rsc | 9 --------- 1 file changed, 9 deletions(-) diff --git a/src/org/rascalmpl/library/util/Reflective.rsc b/src/org/rascalmpl/library/util/Reflective.rsc index 7f0d90e0b0a..b8ed7f8ff5a 100644 --- a/src/org/rascalmpl/library/util/Reflective.rsc +++ b/src/org/rascalmpl/library/util/Reflective.rsc @@ -103,7 +103,6 @@ PathConfig applyManifests(PathConfig cfg) { return cfg; } -@deprecated{Function will be moved to Rascal compiler} str makeFileName(str qualifiedModuleName, str extension = "rsc") { str qnameSlashes = replaceAll(qualifiedModuleName, "::", "/"); int n = findLast(qnameSlashes, "/"); @@ -113,7 +112,6 @@ str makeFileName(str qualifiedModuleName, str extension = "rsc") { return "">"; } -@deprecated{Function will be moved to Rascal compiler} loc getSearchPathLoc(str filePath, PathConfig pcfg){ for(loc dir <- pcfg.srcs + pcfg.libs){ fileLoc = dir + filePath; @@ -125,7 +123,6 @@ loc getSearchPathLoc(str filePath, PathConfig pcfg){ throw "Module with path not found"; } -@deprecated{Function will be moved to Rascal compiler} @synopsis{Get the location of a named module, search for `src` in srcs and `tpl` in libs} loc getModuleLocation(str qualifiedModuleName, PathConfig pcfg){ fileName = makeFileName(qualifiedModuleName, extension="rsc"); @@ -146,19 +143,16 @@ loc getModuleLocation(str qualifiedModuleName, PathConfig pcfg){ throw "Module `` not found;\n"; } -@deprecated{Function will be moved to Rascal compiler} tuple[str,str] splitFileExtension(str path){ int n = findLast(path, "."); if(n < 0) return ; return ; } -@deprecated{Function will be moved to Rascal compiler} @synopsis{Determine length of common suffix of list of strings} int commonSuffix(list[str] dir, list[str] m) = commonPrefix(reverse(dir), reverse(m)); -@deprecated{Function will be moved to Rascal compiler} @synopsis{Determine length of common prefix of list of strings} int commonPrefix(list[str] rdir, list[str] rm){ for(int i <- index(rm)){ @@ -173,7 +167,6 @@ int commonPrefix(list[str] rdir, list[str] rm){ return size(rm); } -@deprecated{Function will be moved to Rascal compiler} @synopsis{Find the module name corresponding to a given module location via its (src or tpl) location} str getModuleName(loc moduleLoc, PathConfig pcfg){ modulePath = moduleLoc.path; @@ -259,7 +252,6 @@ str getModuleName(loc moduleLoc, PathConfig pcfg){ throw "No module name found for ;\nsrcs=;\nlibs="; } -@deprecated{Function will be moved to Rascal compiler} @synopsis{Derive a location from a given module name for reading} @description{ Given a module name, a file name extension, and a PathConfig, @@ -309,7 +301,6 @@ tuple[bool, loc] getDerivedReadLoc(str qualifiedModuleName, str extension, PathC return ; } -@deprecated{Function will be moved to Rascal compiler} @synopsis{Derive a location from a given module name for writing} @description{ Given a module name, a file name extension, and a PathConfig, From 043b663080cb6ba7cf81c90f6736e966f1113ac1 Mon Sep 17 00:00:00 2001 From: paulklint Date: Mon, 16 Dec 2024 14:09:01 +0100 Subject: [PATCH 072/191] (Re)-added deprecated warnings --- src/org/rascalmpl/library/util/Reflective.rsc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/org/rascalmpl/library/util/Reflective.rsc b/src/org/rascalmpl/library/util/Reflective.rsc index b8ed7f8ff5a..7f0d90e0b0a 100644 --- a/src/org/rascalmpl/library/util/Reflective.rsc +++ b/src/org/rascalmpl/library/util/Reflective.rsc @@ -103,6 +103,7 @@ PathConfig applyManifests(PathConfig cfg) { return cfg; } +@deprecated{Function will be moved to Rascal compiler} str makeFileName(str qualifiedModuleName, str extension = "rsc") { str qnameSlashes = replaceAll(qualifiedModuleName, "::", "/"); int n = findLast(qnameSlashes, "/"); @@ -112,6 +113,7 @@ str makeFileName(str qualifiedModuleName, str extension = "rsc") { return "">"; } +@deprecated{Function will be moved to Rascal compiler} loc getSearchPathLoc(str filePath, PathConfig pcfg){ for(loc dir <- pcfg.srcs + pcfg.libs){ fileLoc = dir + filePath; @@ -123,6 +125,7 @@ loc getSearchPathLoc(str filePath, PathConfig pcfg){ throw "Module with path not found"; } +@deprecated{Function will be moved to Rascal compiler} @synopsis{Get the location of a named module, search for `src` in srcs and `tpl` in libs} loc getModuleLocation(str qualifiedModuleName, PathConfig pcfg){ fileName = makeFileName(qualifiedModuleName, extension="rsc"); @@ -143,16 +146,19 @@ loc getModuleLocation(str qualifiedModuleName, PathConfig pcfg){ throw "Module `` not found;\n"; } +@deprecated{Function will be moved to Rascal compiler} tuple[str,str] splitFileExtension(str path){ int n = findLast(path, "."); if(n < 0) return ; return ; } +@deprecated{Function will be moved to Rascal compiler} @synopsis{Determine length of common suffix of list of strings} int commonSuffix(list[str] dir, list[str] m) = commonPrefix(reverse(dir), reverse(m)); +@deprecated{Function will be moved to Rascal compiler} @synopsis{Determine length of common prefix of list of strings} int commonPrefix(list[str] rdir, list[str] rm){ for(int i <- index(rm)){ @@ -167,6 +173,7 @@ int commonPrefix(list[str] rdir, list[str] rm){ return size(rm); } +@deprecated{Function will be moved to Rascal compiler} @synopsis{Find the module name corresponding to a given module location via its (src or tpl) location} str getModuleName(loc moduleLoc, PathConfig pcfg){ modulePath = moduleLoc.path; @@ -252,6 +259,7 @@ str getModuleName(loc moduleLoc, PathConfig pcfg){ throw "No module name found for ;\nsrcs=;\nlibs="; } +@deprecated{Function will be moved to Rascal compiler} @synopsis{Derive a location from a given module name for reading} @description{ Given a module name, a file name extension, and a PathConfig, @@ -301,6 +309,7 @@ tuple[bool, loc] getDerivedReadLoc(str qualifiedModuleName, str extension, PathC return ; } +@deprecated{Function will be moved to Rascal compiler} @synopsis{Derive a location from a given module name for writing} @description{ Given a module name, a file name extension, and a PathConfig, From a58f57e416ad1a3afb47c90ab3e0de1631a0bc0e Mon Sep 17 00:00:00 2001 From: Davy Landman Date: Tue, 17 Dec 2024 11:09:54 +0100 Subject: [PATCH 073/191] Added clear capability --- src/org/rascalmpl/ideservices/BasicIDEServices.java | 10 ++++++++++ src/org/rascalmpl/ideservices/IDEServices.java | 4 ++++ src/org/rascalmpl/repl/BaseREPL2.java | 2 ++ .../repl/completers/RascalCommandCompletion.java | 2 +- src/org/rascalmpl/semantics/dynamic/ShellCommand.java | 11 ++++++++++- src/org/rascalmpl/shell/RascalShell2.java | 5 +++-- 6 files changed, 30 insertions(+), 4 deletions(-) diff --git a/src/org/rascalmpl/ideservices/BasicIDEServices.java b/src/org/rascalmpl/ideservices/BasicIDEServices.java index f799fdecb4a..4f6ea8063ab 100644 --- a/src/org/rascalmpl/ideservices/BasicIDEServices.java +++ b/src/org/rascalmpl/ideservices/BasicIDEServices.java @@ -34,16 +34,26 @@ public class BasicIDEServices implements IDEServices { private final IRascalMonitor monitor; private final PrintWriter stderr; + private final Runnable clearRepl; public BasicIDEServices(PrintWriter stderr, IRascalMonitor monitor){ + this(stderr, monitor, () -> {}); + } + public BasicIDEServices(PrintWriter stderr, IRascalMonitor monitor, Runnable clearRepl){ this.stderr = stderr; this.monitor = monitor; + this.clearRepl = clearRepl; } @Override public PrintWriter stderr() { return stderr; } + + @Override + public void clearRepl() { + this.clearRepl.run(); + } public void browse(ISourceLocation loc, String title, int viewColumn){ browse(loc.getURI(), title, viewColumn); diff --git a/src/org/rascalmpl/ideservices/IDEServices.java b/src/org/rascalmpl/ideservices/IDEServices.java index c5164d95071..10ed5c843fb 100644 --- a/src/org/rascalmpl/ideservices/IDEServices.java +++ b/src/org/rascalmpl/ideservices/IDEServices.java @@ -73,6 +73,10 @@ default void unregisterLanguage(IConstructor language) { throw new UnsupportedOperationException("registerLanguage is not implemented in this environment."); } + default void clearRepl() { + throw new UnsupportedOperationException("Clear REPL is not supported in this IDE Service"); + } + /** * Asks the IDE to apply document edits as defined in the standard library module * analysis::diff::edits::TextEdits, according to the semantics defined in diff --git a/src/org/rascalmpl/repl/BaseREPL2.java b/src/org/rascalmpl/repl/BaseREPL2.java index 49ba74016e1..aa4f9a36912 100644 --- a/src/org/rascalmpl/repl/BaseREPL2.java +++ b/src/org/rascalmpl/repl/BaseREPL2.java @@ -19,6 +19,7 @@ import org.jline.terminal.Terminal.Signal; import org.jline.terminal.Terminal.SignalHandler; import org.jline.utils.ShutdownHooks; +import org.jline.utils.InfoCmp.Capability; public class BaseREPL2 { @@ -89,6 +90,7 @@ public BaseREPL2(IREPLService replService, Terminal term) { // - support for html results // - measure time // - history? + // - possible to tee output } public void run() throws IOException { diff --git a/src/org/rascalmpl/repl/completers/RascalCommandCompletion.java b/src/org/rascalmpl/repl/completers/RascalCommandCompletion.java index ac4e77ba27a..ab7cb49db44 100644 --- a/src/org/rascalmpl/repl/completers/RascalCommandCompletion.java +++ b/src/org/rascalmpl/repl/completers/RascalCommandCompletion.java @@ -35,7 +35,7 @@ public class RascalCommandCompletion implements Completer { COMMAND_KEYWORDS.put("history", "history"); // TODO: figure out what it does COMMAND_KEYWORDS.put("test", "run rest modules"); COMMAND_KEYWORDS.put("modules", "show imported modules");// TODO: figure out what it does - COMMAND_KEYWORDS.put("clear", "clear evaluator");// TODO: figure out what it does + COMMAND_KEYWORDS.put("clear", "clear repl screen"); } private final NavigableMap setOptions; diff --git a/src/org/rascalmpl/semantics/dynamic/ShellCommand.java b/src/org/rascalmpl/semantics/dynamic/ShellCommand.java index b57e5efd2f7..c9d316c8f1e 100644 --- a/src/org/rascalmpl/semantics/dynamic/ShellCommand.java +++ b/src/org/rascalmpl/semantics/dynamic/ShellCommand.java @@ -66,7 +66,16 @@ public Clear(ISourceLocation __param1, IConstructor tree) { @Override public Result interpret(IEvaluator> __eval) { - return null; + IRascalMonitor monitor = __eval.getMonitor(); + + if (monitor instanceof IDEServices) { + IDEServices services = (IDEServices) monitor; + services.clearRepl(); + } + else { + __eval.getStdErr().println("The current Rascal execution environment does not know how to clear the REPL."); + } + return org.rascalmpl.interpreter.result.ResultFactory.nothing(); } } diff --git a/src/org/rascalmpl/shell/RascalShell2.java b/src/org/rascalmpl/shell/RascalShell2.java index a273ac431c3..d19e9c77f90 100644 --- a/src/org/rascalmpl/shell/RascalShell2.java +++ b/src/org/rascalmpl/shell/RascalShell2.java @@ -19,6 +19,7 @@ import org.jline.terminal.TerminalBuilder; import org.jline.utils.OSUtils; +import org.jline.utils.InfoCmp.Capability; import org.rascalmpl.ideservices.BasicIDEServices; import org.rascalmpl.ideservices.IDEServices; import org.rascalmpl.interpreter.Evaluator; @@ -55,13 +56,13 @@ public static void main(String[] args) throws IOException { var repl = new BaseREPL2(new RascalReplServices((t) -> { var monitor = new TerminalProgressBarMonitor(term); - IDEServices services = new BasicIDEServices(term.writer(), monitor); + IDEServices services = new BasicIDEServices(term.writer(), monitor, () -> term.puts(Capability.clear_screen)); GlobalEnvironment heap = new GlobalEnvironment(); ModuleEnvironment root = heap.addModule(new ModuleEnvironment(ModuleEnvironment.SHELL_MODULE, heap)); IValueFactory vf = ValueFactoryFactory.getValueFactory(); - Evaluator evaluator = new Evaluator(vf, term.reader(), new PrintWriter(System.err, true), term.writer(), root, heap, monitor); + Evaluator evaluator = new Evaluator(vf, term.reader(), new PrintWriter(System.err, true), term.writer(), root, heap, services); evaluator.addRascalSearchPathContributor(StandardLibraryContributor.getInstance()); return evaluator; }), term); From 0a911aceb2c498bad8fa18e17bb389704704af34 Mon Sep 17 00:00:00 2001 From: Davy Landman Date: Tue, 17 Dec 2024 16:56:35 +0100 Subject: [PATCH 074/191] Remove old implementation of REPL --- .../DefaultTestResultListener.java | 2 +- src/org/rascalmpl/library/Prelude.java | 2 +- .../library/util/IDEServicesLibrary.java | 4 +- .../rascalmpl/library/util/Reflective.java | 4 +- src/org/rascalmpl/repl/BaseREPL.java_disabled | 451 -------------- src/org/rascalmpl/repl/BaseREPL2.java | 7 +- src/org/rascalmpl/repl/BaseRascalREPL.java | 560 ------------------ .../rascalmpl/repl/CompletionFunction.java | 5 - src/org/rascalmpl/repl/CompletionResult.java | 27 - src/org/rascalmpl/repl/ILanguageProtocol.java | 2 +- src/org/rascalmpl/repl/IOutputPrinter.java | 53 ++ src/org/rascalmpl/repl/IREPLService.java | 28 +- .../repl/NotifieableInputStream.java | 126 ---- .../rascalmpl/repl/RascalReplServices.java | 96 ++- .../repl/SourceLocationHistory.java_disabled | 68 --- .../completers/RascalCommandCompletion.java | 53 -- .../repl/{ => http}/REPLContentServer.java | 2 +- .../{ => http}/REPLContentServerManager.java | 2 +- .../repl/{ => streams}/ItalicErrorWriter.java | 2 +- .../repl/{ => streams}/LimitedLineWriter.java | 2 +- .../repl/{ => streams}/LimitedWriter.java | 2 +- .../{ => streams}/NonClosingFilterWriter.java | 4 +- .../repl/{ => streams}/RedErrorWriter.java | 2 +- .../repl/{ => streams}/ReplTextWriter.java | 2 +- .../{ => streams}/WrappedFilterWriter.java | 2 +- src/org/rascalmpl/shell/RascalShell2.java | 7 +- 26 files changed, 183 insertions(+), 1332 deletions(-) delete mode 100644 src/org/rascalmpl/repl/BaseREPL.java_disabled delete mode 100755 src/org/rascalmpl/repl/BaseRascalREPL.java delete mode 100644 src/org/rascalmpl/repl/CompletionFunction.java delete mode 100644 src/org/rascalmpl/repl/CompletionResult.java delete mode 100644 src/org/rascalmpl/repl/NotifieableInputStream.java delete mode 100644 src/org/rascalmpl/repl/SourceLocationHistory.java_disabled rename src/org/rascalmpl/repl/{ => http}/REPLContentServer.java (99%) rename src/org/rascalmpl/repl/{ => http}/REPLContentServerManager.java (99%) rename src/org/rascalmpl/repl/{ => streams}/ItalicErrorWriter.java (90%) rename src/org/rascalmpl/repl/{ => streams}/LimitedLineWriter.java (98%) rename src/org/rascalmpl/repl/{ => streams}/LimitedWriter.java (97%) rename src/org/rascalmpl/repl/{ => streams}/NonClosingFilterWriter.java (70%) rename src/org/rascalmpl/repl/{ => streams}/RedErrorWriter.java (91%) rename src/org/rascalmpl/repl/{ => streams}/ReplTextWriter.java (99%) rename src/org/rascalmpl/repl/{ => streams}/WrappedFilterWriter.java (95%) diff --git a/src/org/rascalmpl/interpreter/DefaultTestResultListener.java b/src/org/rascalmpl/interpreter/DefaultTestResultListener.java index 9d4ced0c270..af027eb9002 100644 --- a/src/org/rascalmpl/interpreter/DefaultTestResultListener.java +++ b/src/org/rascalmpl/interpreter/DefaultTestResultListener.java @@ -15,7 +15,7 @@ import java.io.PrintWriter; -import org.rascalmpl.repl.ReplTextWriter; +import org.rascalmpl.repl.streams.ReplTextWriter; import io.usethesource.vallang.ISourceLocation; diff --git a/src/org/rascalmpl/library/Prelude.java b/src/org/rascalmpl/library/Prelude.java index 61bcf1889c4..24ec1db3ede 100644 --- a/src/org/rascalmpl/library/Prelude.java +++ b/src/org/rascalmpl/library/Prelude.java @@ -78,7 +78,7 @@ import org.rascalmpl.exceptions.Throw; import org.rascalmpl.ideservices.IDEServices; import org.rascalmpl.interpreter.utils.IResourceLocationProvider; -import org.rascalmpl.repl.LimitedLineWriter; +import org.rascalmpl.repl.streams.LimitedLineWriter; import org.rascalmpl.types.TypeReifier; import org.rascalmpl.unicode.UnicodeOffsetLengthReader; import org.rascalmpl.unicode.UnicodeOutputStreamWriter; diff --git a/src/org/rascalmpl/library/util/IDEServicesLibrary.java b/src/org/rascalmpl/library/util/IDEServicesLibrary.java index 5476c5d2509..3798e7d0e0a 100644 --- a/src/org/rascalmpl/library/util/IDEServicesLibrary.java +++ b/src/org/rascalmpl/library/util/IDEServicesLibrary.java @@ -16,8 +16,8 @@ import org.rascalmpl.exceptions.RuntimeExceptionFactory; import org.rascalmpl.ideservices.IDEServices; -import org.rascalmpl.repl.REPLContentServer; -import org.rascalmpl.repl.REPLContentServerManager; +import org.rascalmpl.repl.http.REPLContentServer; +import org.rascalmpl.repl.http.REPLContentServerManager; import org.rascalmpl.uri.URIUtil; import org.rascalmpl.values.IRascalValueFactory; import org.rascalmpl.values.functions.IFunction; diff --git a/src/org/rascalmpl/library/util/Reflective.java b/src/org/rascalmpl/library/util/Reflective.java index 371d60474bc..dba61d268b8 100644 --- a/src/org/rascalmpl/library/util/Reflective.java +++ b/src/org/rascalmpl/library/util/Reflective.java @@ -43,8 +43,8 @@ import org.rascalmpl.parser.gtd.result.out.DefaultNodeFlattener; import org.rascalmpl.parser.uptr.UPTRNodeFactory; import org.rascalmpl.parser.uptr.action.NoActionExecutor; -import org.rascalmpl.repl.LimitedLineWriter; -import org.rascalmpl.repl.LimitedWriter; +import org.rascalmpl.repl.streams.LimitedLineWriter; +import org.rascalmpl.repl.streams.LimitedWriter; import org.rascalmpl.uri.URIResolverRegistry; import org.rascalmpl.values.RascalValueFactory; import org.rascalmpl.values.ValueFactoryFactory; diff --git a/src/org/rascalmpl/repl/BaseREPL.java_disabled b/src/org/rascalmpl/repl/BaseREPL.java_disabled deleted file mode 100644 index 0f9e66f64d6..00000000000 --- a/src/org/rascalmpl/repl/BaseREPL.java_disabled +++ /dev/null @@ -1,451 +0,0 @@ -package org.rascalmpl.repl; - -import java.io.File; -import java.io.FilterWriter; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.OutputStream; -import java.io.PrintWriter; -import java.io.Reader; -import java.io.Writer; -import java.net.URISyntaxException; -import java.nio.charset.StandardCharsets; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Queue; -import java.util.concurrent.ConcurrentLinkedQueue; - -import org.fusesource.jansi.Ansi; -import org.rascalmpl.ideservices.IDEServices; -import org.rascalmpl.library.util.PathConfig; - -import io.usethesource.vallang.ISourceLocation; -import jline.Terminal; -import jline.console.ConsoleReader; -import jline.console.UserInterruptException; -import jline.console.completer.CandidateListCompletionHandler; -import jline.console.completer.Completer; -import jline.console.history.FileHistory; -import jline.console.history.PersistentHistory; -import jline.internal.ShutdownHooks; -import jline.internal.ShutdownHooks.Task; - -public class BaseREPL { - protected final ConsoleReader reader; - protected final OutputStream originalStdOut; - protected final OutputStream stderr; - protected final InputStream wrappedStream; - - protected final Writer errorWriter; - - protected final boolean prettyPrompt; - protected final boolean allowColors; - - protected volatile boolean keepRunning = true; - private volatile Task historyFlusher = null; - private volatile PersistentHistory history = null; - private final Queue commandQueue = new ConcurrentLinkedQueue(); - protected IDEServices ideServices; - private final ILanguageProtocol language; - private final Terminal underlyingTerminal; - - private static byte CANCEL_RUNNING_COMMAND = (byte)ctrl('C'); - private static byte STOP_REPL = (byte)ctrl('D'); - private static byte STACK_TRACE = (byte)ctrl('\\'); - - - public BaseREPL(ILanguageProtocol language, PathConfig pcfg, InputStream stdin, OutputStream stderr, OutputStream stdout, boolean prettyPrompt, boolean allowColors, File file, Terminal terminal, IDEServices ideServices) throws IOException, URISyntaxException { - this(language, pcfg, stdin, stderr, stdout, prettyPrompt, allowColors, file != null ? new FileHistory(file) : null, terminal, ideServices); - } - - public BaseREPL(ILanguageProtocol language, PathConfig pcfg, InputStream stdin, OutputStream stderr, OutputStream stdout, boolean prettyPrompt, boolean allowColors, ISourceLocation file, Terminal terminal, IDEServices ideServices) throws IOException, URISyntaxException { - this(language, pcfg, stdin, stderr, stdout, prettyPrompt, allowColors, file != null ? new SourceLocationHistory(file) : null, terminal, ideServices); - } - - private BaseREPL(ILanguageProtocol language, PathConfig pcfg, InputStream stdin, OutputStream stderr, OutputStream stdout, boolean prettyPrompt, boolean allowColors, PersistentHistory history, Terminal terminal, IDEServices ideServices) throws IOException, URISyntaxException { - this.originalStdOut = stdout; - this.stderr = stderr; - this.language = language; - - if (!(stdin instanceof NotifieableInputStream) && !(stdin.getClass().getCanonicalName().contains("jline"))) { - if (stdin == System.in) { - // before we wrap it with our own early detection of ctrl+c and friends, we need to see if jline has some specific - // wrappings that we need to do first - stdin = terminal.wrapInIfNeeded(stdin); - } - stdin = new NotifieableInputStream(stdin, new byte[] { CANCEL_RUNNING_COMMAND, STOP_REPL, STACK_TRACE }, this::handleEscape); - wrappedStream = null; - } - else { - wrappedStream = null; - } - reader = new ConsoleReader(stdin, stdout, terminal); - this.ideServices = ideServices; - if (history != null) { - this.history = history; - reader.setHistory(history); - historyFlusher = new Task() { - @Override - public void run() throws Exception { - history.flush(); - } - }; - ShutdownHooks.add(historyFlusher); - } - reader.setExpandEvents(false); - - prettyPrompt = prettyPrompt && terminal != null && terminal.isAnsiSupported(); - this.prettyPrompt = prettyPrompt; - this.allowColors = allowColors; - if (prettyPrompt && allowColors) { - this.errorWriter = new RedErrorWriter(reader.getOutput()); - } - else if (prettyPrompt) { - this.errorWriter = new ItalicErrorWriter(reader.getOutput()); - } - else { - this.errorWriter = new FilterWriter(reader.getOutput()) { }; // create a basic wrapper to avoid locking on stdout and stderr - } - initialize(stdin, terminal.wrapOutIfNeeded(stdout) /*JURGEN LET OP reader.getOutput()*/, terminal.wrapOutIfNeeded(stderr), ideServices); - if (supportsCompletion()) { - reader.addCompleter(new Completer(){ - @Override - public int complete(String buffer, int cursor, List candidates) { - try { - CompletionResult res = completeFragment(buffer, cursor); - candidates.clear(); - if (res != null && res.getOffset() > -1 && !res.getSuggestions().isEmpty()) { - candidates.addAll(res.getSuggestions()); - return res.getOffset(); - } - return -1; - } - catch(Throwable t) { - // the completer should never fail, this breaks jline - return -1; - } - } - }); - if (reader.getCompletionHandler() instanceof CandidateListCompletionHandler) { - ((CandidateListCompletionHandler)reader.getCompletionHandler()).setPrintSpaceAfterFullCompletion(printSpaceAfterFullCompletion()); - } - } - reader.setHandleUserInterrupt(true); - underlyingTerminal = terminal; - } - - - public static char ctrl(char ch) { - assert 'A' <= ch && ch <= '_'; - return (char)((((int)ch) - 'A') + 1); - } - - - /** - * During the constructor call initialize is called after the REPL is setup enough to have a stdout and std err to write to. - * @param pcfg the PathConfig to be used - * @param stdout the output stream to write normal output to. - * @param stderr the error stream to write error messages on, depending on the environment and options passed, will print in red. - * @param ideServices TODO - * @throws NoSuchRascalFunction - * @throws IOException - * @throws URISyntaxException - */ - protected void initialize(InputStream input, OutputStream stdout, OutputStream stderr, IDEServices services) throws IOException, URISyntaxException { - language.initialize(input, stdout, stderr, services); - } - - /** - * Will be called everytime a new prompt is printed. - * @return The string representing the prompt. - */ - protected String getPrompt() { - return language.getPrompt(); - } - - /** - * After a newline is pressed, the current line is handed to this method. - * @param line the current line entered. - * @throws InterruptedException throw this exception to stop the REPL (instead of calling .stop()) - */ - protected void handleInput(String line) throws InterruptedException { - Map output = new HashMap<>(); - - underlyingTerminal.disableInterruptCharacter(); - try { - language.handleInput(line, output, new HashMap<>()); - } - finally { - underlyingTerminal.enableInterruptCharacter(); - } - - // TODO: maybe we can do this cleaner, but this works for now - InputStream out = output.get("text/plain"); - - if (out != null) { - copyToReader(out, reader); - } - } - - private static void copyToReader(InputStream source, ConsoleReader target) { - try { - try (Reader reader = new InputStreamReader(source, StandardCharsets.UTF_8)) { - char[] chunk = new char[8*1024]; - int read; - while ((read = reader.read(chunk, 0, chunk.length)) != -1) { - target.print(new String(chunk, 0, read)); - } - } - catch (IOException e) { - target.print("Error printing: " + e); - } - target.flush(); - } - catch (IOException e) { - } - } - - - /** - * If a line is canceled with ctrl-C this method is called too handle the reset in the child-class. - * @throws InterruptedException throw this exception to stop the REPL (instead of calling .stop()) - */ - protected void handleReset(Map output, Map metadata) throws InterruptedException { - language.handleReset(output, metadata); - } - - /** - * Test if completion of statement in the current line is supported - * @return true if the completeFragment method can provide completions - */ - protected boolean supportsCompletion() { - return language.supportsCompletion(); - } - - /** - * If the completion succeeded with one match, should a space be printed aftwards? - * @return true if completed fragment should be followed by a space - */ - protected boolean printSpaceAfterFullCompletion() { - return language.printSpaceAfterFullCompletion(); - } - - /** - * If a user hits the TAB key, the current line and the offset is provided to try and complete a fragment of the current line. - * @param line The current line. - * @param cursor The cursor offset in the line. - * @return suggestions for the line. - */ - protected CompletionResult completeFragment(String line, int cursor) { - return language.completeFragment(line, cursor); - } - - /** - * This method gets called from another thread, and indicates the user pressed CTLR-C during a call to handleInput. - * - * Interrupt the handleInput code as soon as possible, but leave stuff in a valid state. - * @throws InterruptedException - */ - protected void cancelRunningCommandRequested() { - language.cancelRunningCommandRequested(); - } - - /** - * This method gets called from another thread, and indicates the user pressed CTLR-D during a call to handleInput. - * - * Quit the code from handleInput as soon as possible, assume the REPL will close after this. - * @throws InterruptedException - */ - protected void terminateRequested() { - language.terminateRequested(); - } - - /** - * This method gets called from another thread, indicates a user pressed CTRL+\ during a call to handleInput. - * - * If possible, print the current stack trace. - */ - protected void stackTraceRequested() { - language.stackTraceRequested(); - } - - private String previousPrompt = ""; - public static final String PRETTY_PROMPT_PREFIX = Ansi.ansi().reset().bold().toString(); - public static final String PRETTY_PROMPT_POSTFIX = Ansi.ansi().boldOff().reset().toString(); - - protected void updatePrompt() { - String newPrompt = getPrompt(); - if (newPrompt != null && !newPrompt.equals(previousPrompt)) { - previousPrompt = newPrompt; - if (prettyPrompt) { - reader.setPrompt(PRETTY_PROMPT_PREFIX + newPrompt + PRETTY_PROMPT_POSTFIX); - } - else { - reader.setPrompt(newPrompt); - } - } - } - - /** - * Queue a command (separated by newlines) to be "entered" - */ - public void queueCommand(String command) { - commandQueue.addAll(Arrays.asList(command.split("[\\n\\r]"))); - } - - - private volatile boolean handlingInput = false; - - private boolean handleEscape(Byte b) { - if (handlingInput) { - if (b == CANCEL_RUNNING_COMMAND) { - cancelRunningCommandRequested(); - return true; - } - else if (b == STOP_REPL) { - // jline already handles this - // but we do have to stop the interpreter - terminateRequested(); - this.stop(); - return true; - } - else if (b == STACK_TRACE) { - stackTraceRequested(); - return true; - } - } - return false; - } - - /** - * This will run the console in the current thread, and will block until it is either: - *
    - *
  • handleInput throws an InteruptedException. - *
  • input reaches the end of the stream - *
  • either the input or output stream throws an IOException - *
- */ - public void run() throws IOException { - try { - updatePrompt(); - while(keepRunning) { - - handleCommandQueue(); - - updatePrompt(); - try { - String line = reader.readLine(reader.getPrompt(), null, null); - if (line == null) { // EOF - break; - } - try { - handlingInput = true; - handleInput(line); - } - finally { - handlingInput = false; - } - } - catch (UserInterruptException u) { - reader.println(); - reader.flush(); - handleReset(new HashMap<>(), new HashMap<>()); - updatePrompt(); - } - - } - } - catch (InterruptedException e) { - // we are closing down, so do nothing, the finally clause will take care of it - } - catch (Throwable e) { - PrintWriter err = new PrintWriter(errorWriter, true); - - if (!err.checkError()) { - err.println("Unexpected (uncaught) exception, closing the REPL: "); - err.print(e.toString()); - e.printStackTrace(err); - } - else { - System.err.println("Unexpected (uncaught) exception, closing the REPL: "); - System.err.print(e.toString()); - e.printStackTrace(System.err); - } - - err.flush(); - - throw e; - } - finally { - reader.flush(); - originalStdOut.flush(); - if (historyFlusher != null) { - ShutdownHooks.remove(historyFlusher); - history.flush(); - } - } - } - - @Override - protected void finalize() throws Throwable { - // We have to wait until finalize instead of the finally block in the run method - // because jline requires time to reset the terminal using PTY commands over - // the same stream. By delaying the close operation until the garbage collector - // kicks in, jline gets the opportunity to do that. - // BTW, closing the wrappedStream is essential for fixing a memory leak that - // would hold on to entire Evaluator instances after the REPL was closed. - if (wrappedStream != null) { - try { - wrappedStream.close(); - } - catch (IOException e) { - } - } - reader.close(); - } - - private void handleCommandQueue() throws IOException, InterruptedException { - boolean handledQueue = false; - String queuedCommand; - while ((queuedCommand = commandQueue.poll()) != null) { - handledQueue = true; - reader.resetPromptLine(reader.getPrompt(), queuedCommand, 0); - reader.println(); - reader.flush(); - reader.getHistory().add(queuedCommand); - try { - handlingInput = true; - handleInput(queuedCommand); - } - finally { - handlingInput = false; - } - } - if (handledQueue) { - String oldPrompt = reader.getPrompt(); - reader.resetPromptLine("", "", 0); - reader.setPrompt(oldPrompt); - reader.flush(); - } - } - - /** - * stop the REPL without waiting for it to stop - */ - public void stop() { - language.stop(); - keepRunning = false; - reader.close(); - } - - public Terminal getTerminal() { - return reader.getTerminal(); - } - - public InputStream getInput() { - return reader.getInput(); - } -} diff --git a/src/org/rascalmpl/repl/BaseREPL2.java b/src/org/rascalmpl/repl/BaseREPL2.java index aa4f9a36912..b95bd20cacb 100644 --- a/src/org/rascalmpl/repl/BaseREPL2.java +++ b/src/org/rascalmpl/repl/BaseREPL2.java @@ -19,7 +19,6 @@ import org.jline.terminal.Terminal.Signal; import org.jline.terminal.Terminal.SignalHandler; import org.jline.utils.ShutdownHooks; -import org.jline.utils.InfoCmp.Capability; public class BaseREPL2 { @@ -78,11 +77,9 @@ public BaseREPL2(IREPLService replService, Terminal term) { this.unicodeSupported = term.encoding().newEncoder().canEncode("💓"); this.currentPrompt = replService.prompt(ansiSupported, unicodeSupported); reader.variable(LineReader.SECONDARY_PROMPT_PATTERN, replService.parseErrorPrompt(ansiSupported, unicodeSupported)); - this.reader = reader.build(); - // todo: // - ctrl + / support (might not be possible) // - highlighting in the prompt? (future work, as it also hurts other parts) @@ -90,7 +87,9 @@ public BaseREPL2(IREPLService replService, Terminal term) { // - support for html results // - measure time // - history? - // - possible to tee output + // - possible to tee output (future work) + // - check if the REPL close properly closes the right streams + // - fix progress bar speed & proper recovering from intermediate prints } public void run() throws IOException { diff --git a/src/org/rascalmpl/repl/BaseRascalREPL.java b/src/org/rascalmpl/repl/BaseRascalREPL.java deleted file mode 100755 index 14caabb1e5d..00000000000 --- a/src/org/rascalmpl/repl/BaseRascalREPL.java +++ /dev/null @@ -1,560 +0,0 @@ -package org.rascalmpl.repl; - -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.PrintWriter; -import java.io.Reader; -import java.io.StringWriter; -import java.io.Writer; -import java.net.URI; -import java.net.URISyntaxException; -import java.nio.charset.StandardCharsets; -import java.util.Collection; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; -import java.util.SortedSet; -import java.util.TreeSet; -import java.util.function.Function; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import java.util.stream.Collectors; - -import org.rascalmpl.interpreter.asserts.Ambiguous; -import org.rascalmpl.interpreter.result.IRascalResult; -import org.rascalmpl.interpreter.utils.ReadEvalPrintDialogMessages; -import org.rascalmpl.interpreter.utils.StringUtils; -import org.rascalmpl.interpreter.utils.StringUtils.OffsetLengthTerm; -import org.rascalmpl.repl.completers.RascalCommandCompletion; -import org.rascalmpl.uri.URIResolverRegistry; -import org.rascalmpl.uri.URIUtil; -import org.rascalmpl.values.RascalValueFactory; -import org.rascalmpl.values.ValueFactoryFactory; -import org.rascalmpl.values.functions.IFunction; -import org.rascalmpl.values.parsetrees.TreeAdapter; - -import io.usethesource.vallang.IConstructor; -import io.usethesource.vallang.ISourceLocation; -import io.usethesource.vallang.IString; -import io.usethesource.vallang.IValue; -import io.usethesource.vallang.IValueFactory; -import io.usethesource.vallang.IWithKeywordParameters; -import io.usethesource.vallang.io.StandardTextWriter; -import io.usethesource.vallang.type.Type; - -public abstract class BaseRascalREPL implements ILanguageProtocol { - - protected enum State { - FRESH, - CONTINUATION, - DEBUG, - DEBUG_CONTINUATION - } - - private State currentState = State.FRESH; - - protected State getState() { - return currentState; - } - - private final static int LINE_LIMIT = 200; - private final static int CHAR_LIMIT = LINE_LIMIT * 20; - protected String currentPrompt = ReadEvalPrintDialogMessages.PROMPT; - private StringBuffer currentCommand; - protected final StandardTextWriter indentedPrettyPrinter; - private final boolean allowColors; - private final static IValueFactory VF = ValueFactoryFactory.getValueFactory(); - protected final REPLContentServerManager contentManager = new REPLContentServerManager(); - - public BaseRascalREPL(boolean prettyPrompt, boolean allowColors) throws IOException, URISyntaxException { - this.allowColors = allowColors; - - if (allowColors) { - indentedPrettyPrinter = new ReplTextWriter(true); - } - else { - indentedPrettyPrinter = new StandardTextWriter(true); - } - } - - @Override - public String getPrompt() { - return currentPrompt; - } - - private InputStream stringStream(String x) { - return new ByteArrayInputStream(x.getBytes(StandardCharsets.UTF_8)); - } - - - @Override - public void handleInput(String line, Map output, Map metadata) throws InterruptedException { - assert line != null; - - try { - if (line.trim().length() == 0) { - // cancel command - getErrorWriter().println(ReadEvalPrintDialogMessages.CANCELLED); - currentPrompt = ReadEvalPrintDialogMessages.PROMPT; - currentCommand = null; - currentState = State.FRESH; - return; - } - if (currentCommand == null) { - // we are still at a new command so let's see if the line is a full command - if (isStatementComplete(line)) { - - printResult(evalStatement(line, line), output, metadata); - } - else { - currentCommand = new StringBuffer(line); - currentPrompt = ReadEvalPrintDialogMessages.CONTINUE_PROMPT; - currentState = State.CONTINUATION; - return; - } - } - else { - currentCommand.append('\n'); - currentCommand.append(line); - if (isStatementComplete(currentCommand.toString())) { - printResult(evalStatement(currentCommand.toString(), line), output, metadata); - currentPrompt = ReadEvalPrintDialogMessages.PROMPT; - currentCommand = null; - currentState = State.FRESH; - return; - } - } - } catch (IOException ie) { - throw new RuntimeException(ie); - } catch (Ambiguous e) { - getErrorWriter().println("Internal error: ambiguous command: " + TreeAdapter.yield(e.getTree())); - return; - } - finally { - getOutputWriter().flush(); - } - } - - @Override - public void handleReset(Map output, Map metadata) throws InterruptedException { - handleInput("", output, metadata); - } - - @FunctionalInterface - public interface IOConsumer { - void accept(T t) throws IOException; - } - - private static interface OutputWriter { - void writeOutput(Type tp , IOConsumer contentsWriter) throws IOException; - void finishOutput(); - } - - protected void printResult(IRascalResult result, Map output, Map metadata) throws IOException { - if (result == null || result.getValue() == null) { - output.put("text/plain", stringStream("ok\n")); - return; - } - else if (result.getStaticType().isSubtypeOf(RascalValueFactory.Content) && !result.getStaticType().isBottom()) { - // we have interactive output in HTML form to serve - serveContent(result, output, metadata); - return; - } - else { - // otherwise we have simple output to print on the REPL in either text/html or text/plain format: - - final StringWriter out = new StringWriter(); - OutputWriter writer = new OutputWriter() { - @Override - public void writeOutput(Type tp, IOConsumer contentsWriter) throws IOException { - out.write(tp.toString()); - out.write(": "); - contentsWriter.accept(out); - } - - @Override - public void finishOutput() { - out.write('\n'); - } - }; - - writeOutput(result, writer); - - if (out.getBuffer().length() == 0) { - output.put("text/plain", stringStream("ok\n")); - } - else { - output.put("text/plain", stringStream(out.toString())); - } - } - } - - private void serveContent(IRascalResult result, Map output, Map metadata) - throws IOException { - IConstructor provider = (IConstructor) result.getValue(); - String id; - Function target; - - if (provider.has("id")) { - id = ((IString) provider.get("id")).getValue(); - target = liftProviderFunction((IFunction) provider.get("callback")); - } - else { - id = "*static content*"; - target = (r) -> provider.get("response"); - } - - // this installs the provider such that subsequent requests are handled. - REPLContentServer server = contentManager.addServer(id, target); - - // now we need some HTML to show - String URL = "http://localhost:" + server.getListeningPort() + "/"; - - IWithKeywordParameters kp = provider.asWithKeywordParameters(); - - metadata.put("url", URL); - metadata.put("title", kp.hasParameter("title") ? ((IString) kp.getParameter("title")).getValue() : id); - metadata.put("viewColumn", kp.hasParameter("viewColumn") ? kp.getParameter("title").toString() : "1"); - - output.put("text/plain", stringStream("Serving \'" + id + "\' at |" + URL + "|\n")); - output.put("text/html", stringStream("")); - } - - abstract protected Function liftProviderFunction(IFunction callback); - - private void writeOutput(IRascalResult result, OutputWriter target) throws IOException { - IValue value = result.getValue(); - Type type = result.getStaticType(); - - if (type.isAbstractData() && type.isStrictSubtypeOf(RascalValueFactory.Tree) && !type.isBottom()) { - target.writeOutput(type, (StringWriter w) -> { - w.write("(" + type.toString() +") `"); - TreeAdapter.yield((IConstructor)result.getValue(), allowColors, w); - w.write("`"); - }); - } - else if (type.isString()) { - target.writeOutput(type, (StringWriter w) -> { - try (Writer wrt = new LimitedWriter(new LimitedLineWriter(w, LINE_LIMIT), CHAR_LIMIT)) { - indentedPrettyPrinter.write(value, wrt); - } - catch (/*IOLimitReachedException*/ RuntimeException e) { - // ignore since this is what we wanted - // if we catch IOLimitReachedException we get an IllegalArgument exception instead - // "Self-suppression not permitted" - } - w.write("\n---\n"); - try (Writer wrt = new LimitedWriter(new LimitedLineWriter(w, LINE_LIMIT), CHAR_LIMIT)) { - ((IString) value).write(wrt); - } - catch (/*IOLimitReachedException*/ RuntimeException e) { - // ignore since this is what we wanted - // if we catch IOLimitReachedException we get an IllegalArgument exception instead - // "Self-suppression not permitted" - } - w.write("\n---"); - }); - } - else { - target.writeOutput(type, (StringWriter w) -> { - // limit both the lines and the characters - try (Writer wrt = new LimitedWriter(new LimitedLineWriter(w, LINE_LIMIT), CHAR_LIMIT)) { - indentedPrettyPrinter.write(value, wrt); - } - catch (/*IOLimitReachedException*/ RuntimeException e) { - // ignore since this is what we wanted - // if we catch IOLimitReachedException we get an IllegalArgument exception instead - // "Self-suppression not permitted" - } - }); - } - target.finishOutput(); - } - - public abstract PrintWriter getErrorWriter(); - public abstract PrintWriter getOutputWriter(); - public abstract InputStream getInput(); - - public abstract IRascalResult evalStatement(String statement, String lastLine) throws InterruptedException; - - /** - * provide which :set flags (:set profiling true for example) - * @return strings that can be set - */ - protected abstract SortedSet getCommandLineOptions(); - protected abstract Collection completePartialIdentifier(String line, int cursor, String qualifier, String identifier); - protected abstract Collection completeModule(String qualifier, String partialModuleName); - - protected boolean isREPLCommand(String line){ - return line.startsWith(":"); - } - - - private static String prefixTrim(String input) { - int sLength = input.length(); - int offset = 0; - while (offset < sLength && input.charAt(offset) == ' ') { - offset++; - } - return input.substring(offset); - } - - @Override - public CompletionResult completeFragment(String line, int cursor) { - if (currentState == State.FRESH) { - String trimmedLine = prefixTrim(line); - if (isREPLCommand(trimmedLine)) { - return completeREPLCommand(line, cursor); - } - if (trimmedLine.startsWith("import ") || trimmedLine.startsWith("extend ")) { - return completeModule(line, cursor); - } - } - int locationStart = StringUtils.findRascalLocationStart(line, cursor); - - if (locationStart != -1) { - return completeLocation(line, locationStart); - } - return completeIdentifier(line, cursor); - } - - protected CompletionResult completeIdentifier(String line, int cursor) { - OffsetLengthTerm identifier = StringUtils.findRascalIdentifierAtOffset(line, cursor); - if (identifier != null) { - String[] qualified = StringUtils.splitQualifiedName(unescapeKeywords(identifier.term)); - String qualifier = qualified.length == 2 ? qualified[0] : ""; - String qualifee = qualified.length == 2 ? qualified[1] : qualified[0]; - Collection suggestions = completePartialIdentifier(line, cursor, qualifier, qualifee); - if (suggestions != null && ! suggestions.isEmpty()) { - return new CompletionResult(identifier.offset, escapeKeywords(suggestions)); - } - } - return null; - } - - - private static final Pattern splitIdentifiers = Pattern.compile("[:][:]"); - private static Collection escapeKeywords(Collection suggestions) { - return suggestions.stream() - .map(s -> splitIdentifiers.splitAsStream(s + " ") // add space such that the ending "::" is not lost - .map(BaseRascalREPL::escapeKeyword) - .collect(Collectors.joining("::")).trim() - ) - .collect(Collectors.toList()); - } - private static String unescapeKeywords(String term) { - return splitIdentifiers.splitAsStream(term + " ") // add space such that the ending "::" is not lost - .map(BaseRascalREPL::unescapeKeyword) - .collect(Collectors.joining("::")).trim() - ; - } - - private static final Set RASCAL_KEYWORDS = new HashSet(); - - private static void assureKeywordsAreScrapped() { - if (RASCAL_KEYWORDS.isEmpty()) { - synchronized (RASCAL_KEYWORDS) { - if (!RASCAL_KEYWORDS.isEmpty()) { - return; - } - - String rascalGrammar = ""; - try (Reader grammarReader = URIResolverRegistry.getInstance().getCharacterReader(ValueFactoryFactory.getValueFactory().sourceLocation("std", "", "/lang/rascal/syntax/Rascal.rsc"))) { - StringBuilder res = new StringBuilder(); - char[] chunk = new char[8 * 1024]; - int read; - while ((read = grammarReader.read(chunk, 0, chunk.length)) != -1) { - res.append(chunk, 0, read); - } - rascalGrammar = res.toString(); - } - catch (IOException | URISyntaxException e) { - e.printStackTrace(); - } - if (!rascalGrammar.isEmpty()) { - /* - * keyword RascalKeywords - * = "o" - * | "syntax" - * | "keyword" - * | "lexical" - * ... - * ; - */ - Pattern findKeywordSection = Pattern.compile("^\\s*keyword([^=]|\\s)*=(?([^;]|\\s)*);", Pattern.MULTILINE); - Matcher m = findKeywordSection.matcher(rascalGrammar); - if (m.find()) { - String keywords = "|" + m.group("keywords"); - Pattern keywordEntry = Pattern.compile("\\s*[|]\\s*[\"](?[^\"]*)[\"]"); - m = keywordEntry.matcher(keywords); - while (m.find()) { - RASCAL_KEYWORDS.add(m.group("keyword")); - } - } - /* - * syntax BasicType - = \value: "value" - | \loc: "loc" - | \node: "node" - */ - Pattern findBasicTypeSection = Pattern.compile("^\\s*syntax\\s*BasicType([^=]|\\s)*=(?([^;]|\\s)*);", Pattern.MULTILINE); - m = findBasicTypeSection.matcher(rascalGrammar); - if (m.find()) { - String keywords = "|" + m.group("keywords"); - Pattern keywordEntry = Pattern.compile("\\s*[|][^:]*:\\s*[\"](?[^\"]*)[\"]"); - m = keywordEntry.matcher(keywords); - while (m.find()) { - RASCAL_KEYWORDS.add(m.group("keyword")); - } - } - } - if (RASCAL_KEYWORDS.isEmpty()) { - RASCAL_KEYWORDS.add("syntax"); - } - } - } - } - - private static String escapeKeyword(String s) { - assureKeywordsAreScrapped(); - if (RASCAL_KEYWORDS.contains(s)) { - return "\\" + s; - } - return s; - } - private static String unescapeKeyword(String s) { - assureKeywordsAreScrapped(); - if (s.startsWith("\\") && !s.contains("-")) { - return s.substring(1); - } - return s; - } - - - @Override - public boolean supportsCompletion() { - return true; - } - - @Override - public boolean printSpaceAfterFullCompletion() { - return false; - } - - private CompletionResult completeLocation(String line, int locationStart) { - int locationEnd = StringUtils.findRascalLocationEnd(line, locationStart); - try { - String locCandidate = line.substring(locationStart + 1, locationEnd + 1); - if (!locCandidate.contains("://")) { - // only complete scheme - return completeSchema(locCandidate, locationStart + 1); - } - - CompletionResult authorityResult = completeAuthorities(locCandidate, locationStart + 1); - if (authorityResult != null) { - return authorityResult; - } - - - ISourceLocation directory = VF.sourceLocation(new URI(locCandidate)); - String fileName = ""; - URIResolverRegistry reg = URIResolverRegistry.getInstance(); - if (!reg.isDirectory(directory)) { - // split filename and directory - String fullPath = directory.getPath(); - int lastSeparator = fullPath.lastIndexOf('/'); - fileName = fullPath.substring(lastSeparator + 1); - fullPath = fullPath.substring(0, lastSeparator); - directory = VF.sourceLocation(directory.getScheme(), directory.getAuthority(), fullPath); - if (!reg.isDirectory(directory)) { - return null; - } - } - String[] filesInPath = reg.listEntries(directory); - Set result = new TreeSet<>(); // sort it up - for (String currentFile : filesInPath) { - if (currentFile.startsWith(fileName)) { - ISourceLocation currentDir = URIUtil.getChildLocation(directory, currentFile); - boolean isDirectory = reg.isDirectory(currentDir); - result.add(currentDir.getURI().toString() + (isDirectory ? "/" : "|")); - } - } - if (!result.isEmpty()) { - return new CompletionResult(locationStart + 1, result); - } - return null; - } - catch (URISyntaxException|IOException e) { - return null; - } - } - - private CompletionResult completeAuthorities(String locCandidate, int locationStart) throws URISyntaxException, - IOException { - int lastSeparator = locCandidate.lastIndexOf('/'); - if (lastSeparator > 3 && locCandidate.substring(lastSeparator - 2, lastSeparator + 1).equals("://")) { - URIResolverRegistry reg = URIResolverRegistry.getInstance(); - // special case, we want to complete authorities (but URI's without a authority are not valid) - String scheme = locCandidate.substring(0, lastSeparator - 2); - String partialAuthority = locCandidate.substring(lastSeparator + 1); - ISourceLocation root = VF.sourceLocation(scheme, "", ""); - Set result = new TreeSet<>(); - for (String candidate: reg.listEntries(root)) { - if (candidate.startsWith(partialAuthority)) { - result.add(scheme + "://" + candidate); - } - } - if (!result.isEmpty()) { - return new CompletionResult(locationStart, result); - } - } - return null; - } - - private CompletionResult completeSchema(String locCandidate, int start) { - URIResolverRegistry reg = URIResolverRegistry.getInstance(); - Set result = new TreeSet<>(); - filterCandidates(reg.getRegisteredInputSchemes(), result, locCandidate); - filterCandidates(reg.getRegisteredLogicalSchemes(), result, locCandidate); - filterCandidates(reg.getRegisteredOutputSchemes(), result, locCandidate); - if (result.isEmpty()) { - return null; - } - return new CompletionResult(start, result); - } - - private static void filterCandidates(Set src, Set target, String prefix) { - for (String s : src) { - if (s.startsWith(prefix)) { - target.add(s); - } - } - } - - public CompletionResult completeModule(String line, int cursor) { - if (line.trim().equals("import")) { - // special case of an import without any partial module name - Collection suggestions = completeModule("", ""); - if (suggestions != null && ! suggestions.isEmpty()) { - return new CompletionResult(line.length(), escapeKeywords(suggestions)); - } - return null; - } - OffsetLengthTerm identifier = StringUtils.findRascalIdentifierAtOffset(line, line.length()); - if (identifier != null) { - String[] qualified = StringUtils.splitQualifiedName(unescapeKeywords(identifier.term)); - String qualifier = qualified.length == 2 ? qualified[0] : ""; - String qualifee = qualified.length == 2 ? qualified[1] : qualified[0]; - Collection suggestions = completeModule(qualifier, qualifee); - if (suggestions != null && ! suggestions.isEmpty()) { - return new CompletionResult(identifier.offset, escapeKeywords(suggestions)); - } - } - return null; - } - - protected CompletionResult completeREPLCommand(String line, int cursor) { - return RascalCommandCompletion.complete(line, cursor, getCommandLineOptions(), (l,i) -> completeIdentifier(l,i), (l,i) -> completeModule(l,i)); - } -} diff --git a/src/org/rascalmpl/repl/CompletionFunction.java b/src/org/rascalmpl/repl/CompletionFunction.java deleted file mode 100644 index a5407536989..00000000000 --- a/src/org/rascalmpl/repl/CompletionFunction.java +++ /dev/null @@ -1,5 +0,0 @@ -package org.rascalmpl.repl; - -public interface CompletionFunction { - CompletionResult complete(String line, int cursor); -} diff --git a/src/org/rascalmpl/repl/CompletionResult.java b/src/org/rascalmpl/repl/CompletionResult.java deleted file mode 100644 index 4f1ea45b899..00000000000 --- a/src/org/rascalmpl/repl/CompletionResult.java +++ /dev/null @@ -1,27 +0,0 @@ -package org.rascalmpl.repl; - -import java.util.Collection; - -public class CompletionResult { - private final int offset; - private final Collection suggestions; - - public CompletionResult(int offset, Collection suggestions) { - this.offset = offset; - this.suggestions = suggestions; - } - public int getOffset() { - return offset; - } - public Collection getSuggestions() { - return suggestions; - } - - public CompletionResult joinWith(CompletionResult other){ - if(offset != other.offset){ - throw new RuntimeException("Cannot join CompletionResults with different offset"); - } - suggestions.addAll(other.getSuggestions()); - return new CompletionResult(offset, suggestions); - } -} diff --git a/src/org/rascalmpl/repl/ILanguageProtocol.java b/src/org/rascalmpl/repl/ILanguageProtocol.java index 9da826d0389..a85cc6eb084 100755 --- a/src/org/rascalmpl/repl/ILanguageProtocol.java +++ b/src/org/rascalmpl/repl/ILanguageProtocol.java @@ -79,7 +79,7 @@ public interface ILanguageProtocol { * @param cursor The cursor offset in the line. * @return suggestions for the line. */ - CompletionResult completeFragment(String line, int cursor); + void/*CompletionResult*/ completeFragment(String line, int cursor); /** * This method gets called from another thread, and indicates the user pressed CTLR-C during a call to handleInput. diff --git a/src/org/rascalmpl/repl/IOutputPrinter.java b/src/org/rascalmpl/repl/IOutputPrinter.java index 6b055f852fb..80b207058fb 100644 --- a/src/org/rascalmpl/repl/IOutputPrinter.java +++ b/src/org/rascalmpl/repl/IOutputPrinter.java @@ -1,14 +1,35 @@ package org.rascalmpl.repl; import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; import java.io.PrintWriter; import java.io.Reader; import java.io.StringReader; import java.io.StringWriter; +import java.io.ByteArrayOutputStream; +import java.io.ByteArrayInputStream; + +/** + * The output of a REPL command is represented by this class, depending on the consumer (terminal/notebook/webserver) a different function might be called. + */ public interface IOutputPrinter { + /** + * Write the output on this print writer interface. + * In case {@linkplain #isBinary()} returns true, it might not be called, but please write a message why binary output should have been used. + * @param target where to write the output to. + */ void write(PrintWriter target); + + /** + * Offer the same output as {@linkplain #write(PrintWriter)} but as a pull based reader. + * The standard implementation takes care to just call the write function with a buffer. + * If you however can provide a streaming reading, override this function instead, depending + * on the consumer, it might be called instead of the write function. + * @return a reader that produces the same contents as the write function, but in a pull style instead of push. + */ default Reader asReader() { try (var result = new StringWriter()) { try (var resultWriter = new PrintWriter(result)) { @@ -20,4 +41,36 @@ default Reader asReader() { throw new IllegalStateException("StringWriter close should never throw exception", ex); } } + + /** + * Some renders support binary output (such as images), if this function returns true, they'll call + * either {@linkplain #write(OutputStream)} or {@linkplain #asInputStream()} instead. + */ + default boolean isBinary() { + return false; + } + + /** + * Write bytes to a stream, it will only be called is {@linkplain #isBinary()} returns true, the renderer supports it, and the renderer opens a dedicated stream per resource. + * @throws IOException function on `OutputStream` can cause IOExceptions + */ + + default void write(OutputStream target) throws IOException { + throw new RuntimeException("Write to output stream only supported in case of binary output (such as images)"); + } + + + /** + * Produce bytes that represent the output of a stream, in a streaming/pull style. Will only be called if {@linkplain #isBinary()} is true, the renderer supports it, and the renderer prefers an inputstream to copy from. + * @return an streaming representation of the bytes that makeup the output of the command + */ + default InputStream asInputStream() { + try (var result = new ByteArrayOutputStream()) { + write(result); + return new ByteArrayInputStream(result.toByteArray()); + } + catch (IOException ex) { + throw new IllegalStateException("Write or Close should not have throw an exception", ex); + } + } } diff --git a/src/org/rascalmpl/repl/IREPLService.java b/src/org/rascalmpl/repl/IREPLService.java index 5be73ad6c5e..d12261c7ed2 100644 --- a/src/org/rascalmpl/repl/IREPLService.java +++ b/src/org/rascalmpl/repl/IREPLService.java @@ -15,6 +15,10 @@ public interface IREPLService { String MIME_PLAIN = "text/plain"; String MIME_ANSI = "text/x-ansi"; + String MIME_HTML = "text/html"; + String MIME_PNG = "image/png"; + String MIME_JPEG = "image/jpeg"; + String MIME_SVG = "image/svg+xml"; /** * Does this language support completion @@ -40,6 +44,10 @@ default Parser inputParser() { } + /** + * Should the history of the REPL be stored + * @return + */ default boolean storeHistory() { return false; } @@ -58,17 +66,12 @@ default Path historyFile() { default String name() { return "Rascal REPL"; } - /** - * Check if an input is valid, for multi-line support - */ - boolean isInputComplete(String input); - - // todo see if we really need the meta-data void handleInput(String input, Map output, Map metadata) throws InterruptedException; /** * Will be called from a different thread then the one that called `handleInput` + * Should try to stop the running command */ void handleInterrupt() throws InterruptedException; @@ -76,14 +79,27 @@ default Path historyFile() { * Default prompt */ String prompt(boolean ansiSupported, boolean unicodeSupported); + /** * Continuation prompt */ String parseErrorPrompt(boolean ansiSupported, boolean unicodeSupported); + /** + * Connect the REPL to the Terminal, most likely want to take a copy of at least the {@link Terminal#writer()}. + * @param term + */ void connect(Terminal term); + /** + * if a REPL service has wrapped the writer for error output, return that instance + * @return + */ PrintWriter errorWriter(); + /** + * if a REPL service has wrapped the writer for regular output, return that instance + * @return + */ PrintWriter outputWriter(); /** diff --git a/src/org/rascalmpl/repl/NotifieableInputStream.java b/src/org/rascalmpl/repl/NotifieableInputStream.java deleted file mode 100644 index 5378f34032f..00000000000 --- a/src/org/rascalmpl/repl/NotifieableInputStream.java +++ /dev/null @@ -1,126 +0,0 @@ -package org.rascalmpl.repl; - -import java.io.IOException; -import java.io.InputStream; -import java.util.concurrent.ArrayBlockingQueue; -import java.util.concurrent.BlockingQueue; -import java.util.concurrent.TimeUnit; -import java.util.function.Function; - -public class NotifieableInputStream extends InputStream { - private final BlockingQueue queue; - private volatile boolean closed; - private volatile IOException toThrow; - private final Thread reader; - private final InputStream peekAt; - - /** - * scan for certain bytes in the stream, and if they are found, call the callback function to see if - * it has to be swallowed. - */ - public NotifieableInputStream(final InputStream peekAt, final byte[] watchFor, - final Function swallow) { - this.queue = new ArrayBlockingQueue<>(8 * 1024); - this.closed = false; - this.toThrow = null; - this.peekAt = peekAt; - this.reader = new Thread(() -> { - try { - reading: while (!closed) { - int b = peekAt.read(); - if (b == -1) { - NotifieableInputStream.this.close(); - return; - } - for (byte c : watchFor) { - if (b == c) { - if (swallow.apply((byte) b)) { - continue reading; - } - break; - } - } - queue.put((byte) b); - } - } - catch (IOException e2) { - if (!e2.getMessage().contains("closed")) { - toThrow = e2; - try { - NotifieableInputStream.this.close(); - } - catch (IOException e1) { - } - } - } - catch (InterruptedException e3) { - Thread.currentThread().interrupt(); - } - }); - reader.setName("InputStream scanner"); - reader.setDaemon(true); - reader.start(); - } - - @Override - public int read(byte[] b) throws IOException { - return read(b, 0, b.length); - } - - @Override - public int read(byte[] b, int off, int len) throws IOException { - if (b == null) { - throw new NullPointerException(); - } - else if ((off < 0) || (off > b.length) || (len < 0) || ((off + len) > b.length) || ((off + len) < 0)) { - throw new IndexOutOfBoundsException(); - } - else if (len == 0) { - return 0; - } - // we have to at least read one (so block until we can) - int atLeastOne = read(); - if (atLeastOne == -1) { - return -1; - } - int index = off; - b[index++] = (byte) atLeastOne; - - // now consume the rest of the available bytes - Byte current; - while ((current = queue.poll()) != null && (index < off + len)) { - b[index++] = current; - } - return index - off; - } - - @Override - public int read() throws IOException { - Byte result; - try { - while ((result = queue.poll(100, TimeUnit.MILLISECONDS)) == null) { - if (closed) { - return -1; - } - if (toThrow != null) { - IOException throwCopy = toThrow; - toThrow = null; - if (throwCopy != null) { - throw throwCopy; - } - } - } - } - catch (InterruptedException e) { - Thread.currentThread().interrupt(); - return -1; - } - return (result & 0xFF); - } - - @Override - public void close() throws IOException { - closed = true; - peekAt.close(); - } -} diff --git a/src/org/rascalmpl/repl/RascalReplServices.java b/src/org/rascalmpl/repl/RascalReplServices.java index c45f320a140..0df0e666f45 100644 --- a/src/org/rascalmpl/repl/RascalReplServices.java +++ b/src/org/rascalmpl/repl/RascalReplServices.java @@ -36,24 +36,34 @@ import org.rascalmpl.parser.gtd.exception.ParseError; import org.rascalmpl.repl.completers.RascalCommandCompletion; import org.rascalmpl.repl.completers.RascalIdentifierCompletion; -import org.rascalmpl.repl.completers.RascalModuleCompletion; import org.rascalmpl.repl.completers.RascalKeywordCompletion; import org.rascalmpl.repl.completers.RascalLocationCompletion; +import org.rascalmpl.repl.completers.RascalModuleCompletion; +import org.rascalmpl.repl.http.REPLContentServer; +import org.rascalmpl.repl.http.REPLContentServerManager; import org.rascalmpl.repl.jline3.RascalLineParser; +import org.rascalmpl.repl.streams.ItalicErrorWriter; +import org.rascalmpl.repl.streams.LimitedLineWriter; +import org.rascalmpl.repl.streams.LimitedWriter; +import org.rascalmpl.repl.streams.RedErrorWriter; +import org.rascalmpl.repl.streams.ReplTextWriter; import org.rascalmpl.uri.URIUtil; import org.rascalmpl.values.RascalValueFactory; +import org.rascalmpl.values.functions.IFunction; import org.rascalmpl.values.parsetrees.TreeAdapter; import io.usethesource.vallang.IConstructor; import io.usethesource.vallang.ISourceLocation; import io.usethesource.vallang.IString; import io.usethesource.vallang.IValue; +import io.usethesource.vallang.IWithKeywordParameters; import io.usethesource.vallang.io.StandardTextWriter; import io.usethesource.vallang.type.Type; public class RascalReplServices implements IREPLService { private final Function buildEvaluator; private Evaluator eval; + private final REPLContentServerManager contentManager = new REPLContentServerManager(); private static final StandardTextWriter ansiIndentedPrinter = new ReplTextWriter(true); private static final StandardTextWriter plainIndentedPrinter = new StandardTextWriter(true); private final static int LINE_LIMIT = 200; @@ -61,6 +71,7 @@ public class RascalReplServices implements IREPLService { private String newline = System.lineSeparator(); + public RascalReplServices(Function buildEvaluator) { super(); this.buildEvaluator = buildEvaluator; @@ -78,6 +89,31 @@ public void connect(Terminal term) { this.eval = buildEvaluator.apply(term); } + public static PrintWriter generateErrorStream(Terminal tm, Writer out) { + // previously we would alway write errors to System.err, but that tends to mess up terminals + // and also our own error print + // so now we try to not write to System.err + if (supportsColors(tm)) { + return new PrintWriter(new RedErrorWriter(out), true); + } + if (supportsItalic(tm)) { + return new PrintWriter(new ItalicErrorWriter(out), true); + } + return new PrintWriter(System.err, true); + + } + + private static boolean supportsColors(Terminal tm) { + Integer cols = tm.getNumericCapability(Capability.max_colors); + return cols != null && cols >= 8; + } + + private static boolean supportsItalic(Terminal tm) { + String ital = tm.getStringCapability(Capability.enter_italics_mode); + return ital != null && !ital.equals(""); + } + + private static final ISourceLocation PROMPT_LOCATION = URIUtil.rootLocation("prompt"); @Override @@ -89,11 +125,6 @@ public Parser inputParser() { }); } - @Override - public boolean isInputComplete(String input) { - throw new UnsupportedOperationException("Unimplemented method 'isInputComplete'"); - } - @Override public void handleInput(String input, Map output, Map metadata) @@ -103,7 +134,7 @@ public void handleInput(String input, Map output, Map value; value = eval.eval(eval.getMonitor(), input, URIUtil.rootLocation("prompt")); - outputResult(output, value); + outputResult(output, value, metadata); } catch (InterruptException ex) { reportError(output, (w, sw) -> { @@ -140,7 +171,7 @@ public void handleInput(String input, Map output, Map output, IRascalResult result) { + private void outputResult(Map output, IRascalResult result, Map metadata) { if (result == null || result.getValue() == null) { output.put(MIME_PLAIN, new StringOutputPrinter("ok", newline)); return; @@ -149,8 +180,7 @@ private void outputResult(Map output, IRascalResult resu Type type = result.getStaticType(); if (type.isSubtypeOf(RascalValueFactory.Content) && !type.isBottom()) { - output.put(MIME_PLAIN, new StringOutputPrinter("Serving content", newline)); - // TODO: serve content! + serveContent(output, (IConstructor)value, metadata); return; } @@ -214,6 +244,52 @@ else if (type.isString()) { } + private Function addEvalLock(IFunction func) { + return a -> { + synchronized(eval) { + return func.call(a); + } + }; + } + + private void serveContent(Map output, IConstructor provider, Map metadata) { + String id; + Function target; + + if (provider.has("id")) { + id = ((IString) provider.get("id")).getValue(); + target = addEvalLock(((IFunction) provider.get("callback"))); + } + else { + id = "*static content*"; + target = (r) -> provider.get("response"); + } + + try { + // this installs the provider such that subsequent requests are handled. + REPLContentServer server = contentManager.addServer(id, target); + + // now we need some HTML to show + String URL = "http://localhost:" + server.getListeningPort() + "/"; + + IWithKeywordParameters kp = provider.asWithKeywordParameters(); + + metadata.put("url", URL); + metadata.put("title", kp.hasParameter("title") ? ((IString) kp.getParameter("title")).getValue() : id); + metadata.put("viewColumn", kp.hasParameter("viewColumn") ? kp.getParameter("title").toString() : "1"); + + output.put(MIME_PLAIN, new StringOutputPrinter("Serving \'" + id + "\' at |" + URL + "|", newline)); + output.put(MIME_HTML, new StringOutputPrinter("", newline)); + } + catch (IOException e) { + reportError(output, (w, sw) -> { + w.println("Could not start webserver to render html content: "); + w.println(e.getMessage()); + }); + } + + } + private static void reportError(Map output, ThrowingWriter writer) { output.put(MIME_PLAIN, new ExceptionPrinter(writer, plainIndentedPrinter)); output.put(MIME_ANSI, new ExceptionPrinter(writer, ansiIndentedPrinter)); diff --git a/src/org/rascalmpl/repl/SourceLocationHistory.java_disabled b/src/org/rascalmpl/repl/SourceLocationHistory.java_disabled deleted file mode 100644 index eb14ea04d84..00000000000 --- a/src/org/rascalmpl/repl/SourceLocationHistory.java_disabled +++ /dev/null @@ -1,68 +0,0 @@ -package org.rascalmpl.repl; - -import static jline.internal.Preconditions.checkNotNull; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.PrintStream; -import java.io.Reader; - -import org.jline.reader.History.Entry; -import org.jline.utils.Log; -import org.rascalmpl.uri.URIResolverRegistry; - -import io.usethesource.vallang.ISourceLocation; - - -public class SourceLocationHistory extends History implements PersistentHistory { - - private static final URIResolverRegistry reg = URIResolverRegistry.getInstance(); - private final ISourceLocation loc; - - public SourceLocationHistory(ISourceLocation loc) throws IOException { - this.loc = loc; - load(loc); - } - - public void load(final ISourceLocation loc) throws IOException { - checkNotNull(loc); - if (reg.exists(loc)) { - Log.trace("Loading history from: ", loc); - load(reg.getInputStream(loc)); - } - } - - public void load(final InputStream input) throws IOException { - checkNotNull(input); - load(new InputStreamReader(input)); - } - - public void load(final Reader reader) throws IOException { - checkNotNull(reader); - BufferedReader input = new BufferedReader(reader); - - String item; - while ((item = input.readLine()) != null) { - internalAdd(item); - } - } - - public void flush() throws IOException { - Log.trace("Flushing history"); - - try (PrintStream out = new PrintStream(reg.getOutputStream(loc, false))) { - for (Entry entry : this) { - out.println(entry.value()); - } - } - } - - public void purge() throws IOException { - Log.trace("Purging history"); - clear(); - reg.remove(loc, true); - } - -} diff --git a/src/org/rascalmpl/repl/completers/RascalCommandCompletion.java b/src/org/rascalmpl/repl/completers/RascalCommandCompletion.java index ab7cb49db44..48a995f9f64 100644 --- a/src/org/rascalmpl/repl/completers/RascalCommandCompletion.java +++ b/src/org/rascalmpl/repl/completers/RascalCommandCompletion.java @@ -18,9 +18,6 @@ import org.jline.reader.ParsedLine; import org.rascalmpl.interpreter.utils.StringUtils; import org.rascalmpl.interpreter.utils.StringUtils.OffsetLengthTerm; -import org.rascalmpl.repl.CompletionFunction; -import org.rascalmpl.repl.CompletionResult; - public class RascalCommandCompletion implements Completer { private static final NavigableMap COMMAND_KEYWORDS; static { @@ -48,56 +45,6 @@ public RascalCommandCompletion(NavigableMap setOptions, BiConsum } - - private static final Pattern splitCommand = Pattern.compile("^[\\t ]*:(?[a-z]*)([\\t ]|$)"); - /**@deprecated remove this function */ - public static CompletionResult complete(String line, int cursor, SortedSet commandOptions, CompletionFunction completeIdentifier, CompletionFunction completeModule) { - assert line.trim().startsWith(":"); - Matcher m = splitCommand.matcher(line); - if (m.find()) { - String currentCommand = m.group("command"); - switch(currentCommand) { - case "set": { - OffsetLengthTerm identifier = StringUtils.findRascalIdentifierAtOffset(line, cursor); - if (identifier != null && identifier.offset > m.end("command")) { - Collection suggestions = commandOptions.stream() - .filter(s -> s.startsWith(identifier.term)) - .sorted() - .collect(Collectors.toList()); - if (suggestions != null && ! suggestions.isEmpty()) { - return new CompletionResult(identifier.offset, suggestions); - } - } - else if (line.trim().equals(":set")) { - return new CompletionResult(line.length(), commandOptions); - } - return null; - } - case "undeclare": return completeIdentifier.complete(line, cursor); - case "edit": - case "unimport": return completeModule.complete(line, line.length()); - default: { - if (COMMAND_KEYWORDS.containsKey(currentCommand)) { - return null; // nothing to complete after a full command - } - List result = null; - if (currentCommand.isEmpty()) { - result = new ArrayList<>(COMMAND_KEYWORDS.keySet()); - } - else { - result = COMMAND_KEYWORDS.keySet().stream() - .filter(s -> s.startsWith(currentCommand)) - .collect(Collectors.toList()); - } - if (!result.isEmpty()) { - return new CompletionResult(m.start("command"), result); - } - } - } - } - return null; - } - private static void generateCandidates(String partial, NavigableMap candidates, String group, List target) { for (var can : candidates.subMap(partial, true, partial + Character.MAX_VALUE, false).entrySet()) { target.add(new Candidate(can.getKey(), can.getKey(), group, can.getValue(), null, null, true)); diff --git a/src/org/rascalmpl/repl/REPLContentServer.java b/src/org/rascalmpl/repl/http/REPLContentServer.java similarity index 99% rename from src/org/rascalmpl/repl/REPLContentServer.java rename to src/org/rascalmpl/repl/http/REPLContentServer.java index de811bcb6ef..18068ba02b0 100644 --- a/src/org/rascalmpl/repl/REPLContentServer.java +++ b/src/org/rascalmpl/repl/http/REPLContentServer.java @@ -1,4 +1,4 @@ -package org.rascalmpl.repl; +package org.rascalmpl.repl.http; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; diff --git a/src/org/rascalmpl/repl/REPLContentServerManager.java b/src/org/rascalmpl/repl/http/REPLContentServerManager.java similarity index 99% rename from src/org/rascalmpl/repl/REPLContentServerManager.java rename to src/org/rascalmpl/repl/http/REPLContentServerManager.java index 2c14bb47df6..24bb5331869 100644 --- a/src/org/rascalmpl/repl/REPLContentServerManager.java +++ b/src/org/rascalmpl/repl/http/REPLContentServerManager.java @@ -10,7 +10,7 @@ * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -package org.rascalmpl.repl; +package org.rascalmpl.repl.http; import java.io.IOException; import java.util.Map.Entry; diff --git a/src/org/rascalmpl/repl/ItalicErrorWriter.java b/src/org/rascalmpl/repl/streams/ItalicErrorWriter.java similarity index 90% rename from src/org/rascalmpl/repl/ItalicErrorWriter.java rename to src/org/rascalmpl/repl/streams/ItalicErrorWriter.java index a650a64e4ac..38c3aa61db2 100644 --- a/src/org/rascalmpl/repl/ItalicErrorWriter.java +++ b/src/org/rascalmpl/repl/streams/ItalicErrorWriter.java @@ -1,4 +1,4 @@ -package org.rascalmpl.repl; +package org.rascalmpl.repl.streams; import java.io.Writer; diff --git a/src/org/rascalmpl/repl/LimitedLineWriter.java b/src/org/rascalmpl/repl/streams/LimitedLineWriter.java similarity index 98% rename from src/org/rascalmpl/repl/LimitedLineWriter.java rename to src/org/rascalmpl/repl/streams/LimitedLineWriter.java index ed5e9a054c6..f16b80454ee 100644 --- a/src/org/rascalmpl/repl/LimitedLineWriter.java +++ b/src/org/rascalmpl/repl/streams/LimitedLineWriter.java @@ -1,4 +1,4 @@ -package org.rascalmpl.repl; +package org.rascalmpl.repl.streams; import java.io.IOException; import java.io.Writer; diff --git a/src/org/rascalmpl/repl/LimitedWriter.java b/src/org/rascalmpl/repl/streams/LimitedWriter.java similarity index 97% rename from src/org/rascalmpl/repl/LimitedWriter.java rename to src/org/rascalmpl/repl/streams/LimitedWriter.java index 9fdd6c98706..f3377baa44a 100644 --- a/src/org/rascalmpl/repl/LimitedWriter.java +++ b/src/org/rascalmpl/repl/streams/LimitedWriter.java @@ -1,4 +1,4 @@ -package org.rascalmpl.repl; +package org.rascalmpl.repl.streams; import java.io.IOException; import java.io.Writer; diff --git a/src/org/rascalmpl/repl/NonClosingFilterWriter.java b/src/org/rascalmpl/repl/streams/NonClosingFilterWriter.java similarity index 70% rename from src/org/rascalmpl/repl/NonClosingFilterWriter.java rename to src/org/rascalmpl/repl/streams/NonClosingFilterWriter.java index 8cd4b4210f8..0e44cab6772 100644 --- a/src/org/rascalmpl/repl/NonClosingFilterWriter.java +++ b/src/org/rascalmpl/repl/streams/NonClosingFilterWriter.java @@ -1,11 +1,11 @@ -package org.rascalmpl.repl; +package org.rascalmpl.repl.streams; import java.io.FilterWriter; import java.io.IOException; import java.io.Writer; -public abstract class NonClosingFilterWriter extends FilterWriter { +abstract class NonClosingFilterWriter extends FilterWriter { protected NonClosingFilterWriter(Writer out) { super(out); diff --git a/src/org/rascalmpl/repl/RedErrorWriter.java b/src/org/rascalmpl/repl/streams/RedErrorWriter.java similarity index 91% rename from src/org/rascalmpl/repl/RedErrorWriter.java rename to src/org/rascalmpl/repl/streams/RedErrorWriter.java index b2300a3787d..60cd23d16aa 100644 --- a/src/org/rascalmpl/repl/RedErrorWriter.java +++ b/src/org/rascalmpl/repl/streams/RedErrorWriter.java @@ -1,4 +1,4 @@ -package org.rascalmpl.repl; +package org.rascalmpl.repl.streams; import java.io.Writer; diff --git a/src/org/rascalmpl/repl/ReplTextWriter.java b/src/org/rascalmpl/repl/streams/ReplTextWriter.java similarity index 99% rename from src/org/rascalmpl/repl/ReplTextWriter.java rename to src/org/rascalmpl/repl/streams/ReplTextWriter.java index 647680fb2e8..b885573672e 100644 --- a/src/org/rascalmpl/repl/ReplTextWriter.java +++ b/src/org/rascalmpl/repl/streams/ReplTextWriter.java @@ -1,4 +1,4 @@ -package org.rascalmpl.repl; +package org.rascalmpl.repl.streams; import java.io.IOException; import java.io.StringWriter; diff --git a/src/org/rascalmpl/repl/WrappedFilterWriter.java b/src/org/rascalmpl/repl/streams/WrappedFilterWriter.java similarity index 95% rename from src/org/rascalmpl/repl/WrappedFilterWriter.java rename to src/org/rascalmpl/repl/streams/WrappedFilterWriter.java index b8122ab72d4..86936a2dd2a 100644 --- a/src/org/rascalmpl/repl/WrappedFilterWriter.java +++ b/src/org/rascalmpl/repl/streams/WrappedFilterWriter.java @@ -1,4 +1,4 @@ -package org.rascalmpl.repl; +package org.rascalmpl.repl.streams; diff --git a/src/org/rascalmpl/shell/RascalShell2.java b/src/org/rascalmpl/shell/RascalShell2.java index d19e9c77f90..fdb0b22cffc 100644 --- a/src/org/rascalmpl/shell/RascalShell2.java +++ b/src/org/rascalmpl/shell/RascalShell2.java @@ -14,12 +14,11 @@ package org.rascalmpl.shell; import java.io.IOException; -import java.io.PrintWriter; import java.nio.charset.StandardCharsets; import org.jline.terminal.TerminalBuilder; -import org.jline.utils.OSUtils; import org.jline.utils.InfoCmp.Capability; +import org.jline.utils.OSUtils; import org.rascalmpl.ideservices.BasicIDEServices; import org.rascalmpl.ideservices.IDEServices; import org.rascalmpl.interpreter.Evaluator; @@ -57,12 +56,10 @@ public static void main(String[] args) throws IOException { var repl = new BaseREPL2(new RascalReplServices((t) -> { var monitor = new TerminalProgressBarMonitor(term); IDEServices services = new BasicIDEServices(term.writer(), monitor, () -> term.puts(Capability.clear_screen)); - - GlobalEnvironment heap = new GlobalEnvironment(); ModuleEnvironment root = heap.addModule(new ModuleEnvironment(ModuleEnvironment.SHELL_MODULE, heap)); IValueFactory vf = ValueFactoryFactory.getValueFactory(); - Evaluator evaluator = new Evaluator(vf, term.reader(), new PrintWriter(System.err, true), term.writer(), root, heap, services); + Evaluator evaluator = new Evaluator(vf, term.reader(), RascalReplServices.generateErrorStream(t, monitor), monitor, root, heap, services); evaluator.addRascalSearchPathContributor(StandardLibraryContributor.getInstance()); return evaluator; }), term); From 540416be3aba5ccc7dbbfc8aad19e4af0052ecd7 Mon Sep 17 00:00:00 2001 From: PieterOlivier <103408614+PieterOlivier@users.noreply.github.com> Date: Tue, 17 Dec 2024 21:34:36 +0100 Subject: [PATCH 075/191] Replaced `==` with `equals` on two String objects (#2102) --- src/org/rascalmpl/values/parsetrees/TreeAdapter.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/org/rascalmpl/values/parsetrees/TreeAdapter.java b/src/org/rascalmpl/values/parsetrees/TreeAdapter.java index 4ab329a2a92..ce8b20943d6 100644 --- a/src/org/rascalmpl/values/parsetrees/TreeAdapter.java +++ b/src/org/rascalmpl/values/parsetrees/TreeAdapter.java @@ -941,9 +941,9 @@ public static IList searchCategory(ITree tree, String category) { IListWriter writer = ValueFactoryFactory.getValueFactory().listWriter(); if (isAppl(tree)) { String s = ProductionAdapter.getCategory(getProduction(tree)); - if (s == category) + if (s.equals(category)) { writer.append(tree); - else { + } else { IList z = getArgs(tree); for (IValue q : z) { if (!(q instanceof IConstructor)) From 9380bf80bcf459ae663295347a70d7f8a133242d Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Wed, 18 Dec 2024 09:41:44 +0100 Subject: [PATCH 076/191] commented out the tutor because of changed method signatures in lang::json::IO --- pom.xml | 5 +++-- src/org/rascalmpl/library/lang/html5/DOM.rsc | 6 +----- .../library/lang/rascal/vis/ImportGraph.rsc | 3 ++- src/org/rascalmpl/library/vis/Graphs.rsc | 21 +++++++++++++++++++ 4 files changed, 27 insertions(+), 8 deletions(-) diff --git a/pom.xml b/pom.xml index c27b3e181cd..b664674a733 100644 --- a/pom.xml +++ b/pom.xml @@ -169,7 +169,8 @@ package - + diff --git a/src/org/rascalmpl/library/lang/html5/DOM.rsc b/src/org/rascalmpl/library/lang/html5/DOM.rsc index f8bfd0cbd2d..79127968a1d 100644 --- a/src/org/rascalmpl/library/lang/html5/DOM.rsc +++ b/src/org/rascalmpl/library/lang/html5/DOM.rsc @@ -3,7 +3,6 @@ module lang::html5::DOM import List; -import Content; @synopsis{Generic representation for all HTML tag types.} @description{ @@ -459,7 +458,4 @@ str toString(HTML5Node x) { attrs = { k | HTML5Attr k <- x.kids }; kids = [ k | value k <- x.kids, !(HTML5Attr _ := k) ]; return nodeToString(x.name, attrs, kids); -} - -@synopsis{convenience function to render the HTML5Node dom tree in the browser} -public Content serve(HTML5Node x) = html(toString(x)); +} \ No newline at end of file diff --git a/src/org/rascalmpl/library/lang/rascal/vis/ImportGraph.rsc b/src/org/rascalmpl/library/lang/rascal/vis/ImportGraph.rsc index 07e0939441c..4dd099d8eb0 100644 --- a/src/org/rascalmpl/library/lang/rascal/vis/ImportGraph.rsc +++ b/src/org/rascalmpl/library/lang/rascal/vis/ImportGraph.rsc @@ -107,7 +107,8 @@ void importGraph(PathConfig pcfg, bool hideExternals=true) { title="Rascal Import/Extend Graph", nodeClassifier=nodeClass, edgeClassifier=edgeClass, - nodeLinker=modLinker + nodeLinker=modLinker, + edgeStyle=defaultEdgeStyle()[\curve-style=taxi()] ); showInteractiveContent(graph(g, cfg=cfg), title=cfg.title); diff --git a/src/org/rascalmpl/library/vis/Graphs.rsc b/src/org/rascalmpl/library/vis/Graphs.rsc index 42a16471050..a4cb855dda4 100644 --- a/src/org/rascalmpl/library/vis/Graphs.rsc +++ b/src/org/rascalmpl/library/vis/Graphs.rsc @@ -504,6 +504,27 @@ str formatCytoSelector(greaterEqual(str field, int lim)) = "[ \>= ]" str formatCytoSelector(lessEqual(str field, int lim)) = "[ \<= ]"; str formatCytoSelector(less(str field, int lim)) = "[ \< ]"; +@synopsis{Choice of different node layout algorithms.} +@description{ +The different algorithms use heuristics to find a layout +that shows the structure of a graph best. Different types +of graph data call for different algorithms: +* `grid` is best when there are very few edges or when edges are not important. The edge relation +is not used at all for deciding where each node will end up. Grid +is typically used for an initial exploration of the graph. It is very fast. +* `circle` puts all nodes on the edge of a circle and draws edges between them. The order on the +circle is arbitrary. This layout fails on larger collections of nodes because the points on the +circle will become really small and indistinguishable. However for graphs with less than 100 nodes +it provides a quick and natural overview. +* `breadthfirst` computes a breadthfirst spanning tree, and uses path length to decide on which +layer each node will reside. Cross-edges (between branches) and back-edges are allowed but if there +are many the graph will be messy. So this layout is best when you have a mostly hierarchical graph. +Examples are flow charts and dependency graphs. +* `cose` is a so-called "force-directed" layout. The edges become springs that both push nodes +apart as well as pull them together. Nodes drag on the surface but have an initial momentum such +that they can find a spot on the plain. This layout is very natural for scale-free networks such +as biological organisms, friends graphs and software ecosystems. +} data CytoLayoutName = grid() | circle() From c244bfa59fec81bfd08429602510e96beb4c81d2 Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Wed, 18 Dec 2024 10:42:38 +0100 Subject: [PATCH 077/191] [maven-release-plugin] prepare release v0.41.0-RC1 --- pom.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index b664674a733..e904d7b56c9 100644 --- a/pom.xml +++ b/pom.xml @@ -3,12 +3,12 @@ org.rascalmpl rascal - 0.40.18-SNAPSHOT + 0.41.0-RC1 jar scm:git:ssh://git@github.com/usethesource/rascal.git - v0.40.16 + v0.41.0-RC1 @@ -325,8 +325,8 @@ META-INF/sisu/javax.inject.Named - - + + false From 48716812accc44942782841b0320536736265239 Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Wed, 18 Dec 2024 10:43:04 +0100 Subject: [PATCH 078/191] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index e904d7b56c9..a4f803401d6 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ org.rascalmpl rascal - 0.41.0-RC1 + 0.41.0-RC2-SNAPSHOT jar From cfc601c16a7cf04251b272654f46c7eeb75539b8 Mon Sep 17 00:00:00 2001 From: Rodin Aarssen Date: Wed, 18 Dec 2024 11:08:30 +0100 Subject: [PATCH 079/191] Fixed logic around fallback resolver in URIResolverRegistry (#2101) * Fixed logic around the fallback resolver returning null while resolving locations * Accounted for another edge case around the fallback resolver. Thanks @DavyLandman * Improved handling of an edge case around the fallback resolver. * Improved handling of an edge case around the fallback resolver. --- src/org/rascalmpl/uri/URIResolverRegistry.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/org/rascalmpl/uri/URIResolverRegistry.java b/src/org/rascalmpl/uri/URIResolverRegistry.java index 258fc34dd9c..9051eb8c764 100644 --- a/src/org/rascalmpl/uri/URIResolverRegistry.java +++ b/src/org/rascalmpl/uri/URIResolverRegistry.java @@ -402,9 +402,10 @@ private ISourceLocation physicalLocation(ISourceLocation loc) throws IOException ILogicalSourceLocationResolver resolver = map.get(auth); loc = resolveAndFixOffsets(loc, resolver, map.values()); } - var fallBack = fallbackLogicalResolver; - if (fallBack != null) { - return resolveAndFixOffsets(loc == null ? original : loc, fallBack, Collections.emptyList()); + + if (fallbackLogicalResolver != null) { + var fallbackResult = resolveAndFixOffsets(loc == null ? original : loc, fallbackLogicalResolver, Collections.emptyList()); + return fallbackResult == null ? loc : fallbackResult; } return loc; } From 94dd242617acb2a191874a8fa89f1c0f536b59f3 Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Wed, 18 Dec 2024 13:27:11 +0100 Subject: [PATCH 080/191] removed 8 year old deprecated functions from JSON IO and switched the tests to using the new. This triggers several hidden bugs in the "new" API --- .../rascalmpl/library/lang/json/Factory.java | 29 - src/org/rascalmpl/library/lang/json/IO.java | 48 -- src/org/rascalmpl/library/lang/json/IO.rsc | 15 - .../lang/json/internal/IValueAdapter.java | 27 - .../json/internal/JSONReadingTypeVisitor.java | 713 ------------------ .../internal/JSONWritingValueVisitor.java | 453 ----------- .../tests/library/lang/json/JSONIOTests.rsc | 4 +- 7 files changed, 2 insertions(+), 1287 deletions(-) delete mode 100644 src/org/rascalmpl/library/lang/json/Factory.java delete mode 100644 src/org/rascalmpl/library/lang/json/internal/IValueAdapter.java delete mode 100644 src/org/rascalmpl/library/lang/json/internal/JSONReadingTypeVisitor.java delete mode 100644 src/org/rascalmpl/library/lang/json/internal/JSONWritingValueVisitor.java diff --git a/src/org/rascalmpl/library/lang/json/Factory.java b/src/org/rascalmpl/library/lang/json/Factory.java deleted file mode 100644 index ef2c12b958e..00000000000 --- a/src/org/rascalmpl/library/lang/json/Factory.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.rascalmpl.library.lang.json; - -import io.usethesource.vallang.type.Type; -import io.usethesource.vallang.type.TypeFactory; -import io.usethesource.vallang.type.TypeStore; - -public class Factory { - private static final TypeFactory tf = TypeFactory.getInstance(); - private static final TypeStore json = new TypeStore(); - - public static final Type JSON = tf.abstractDataType(json, "JSON"); - - public static final Type JSON_null = tf.constructor(json, JSON, "null"); - - public static final Type JSON_object = tf.constructor(json, JSON, "object", - tf.mapType(tf.stringType(), JSON), "properties"); - - public static final Type JSON_array = tf.constructor(json, JSON, "array", - tf.listType(JSON), "values"); - - public static final Type JSON_number = tf.constructor(json, JSON, "number", tf.realType(), "n"); - public static final Type JSON_string = tf.constructor(json, JSON, "string", tf.stringType(), "s"); - public static final Type JSON_boolean = tf.constructor(json, JSON, "boolean", tf.boolType(), "b"); - - public static final Type JSON_ivalue = tf.constructor(json, JSON, "ivalue", tf.valueType(), "v"); - - - -} diff --git a/src/org/rascalmpl/library/lang/json/IO.java b/src/org/rascalmpl/library/lang/json/IO.java index 43d8fd3ece4..c96dd763cb0 100644 --- a/src/org/rascalmpl/library/lang/json/IO.java +++ b/src/org/rascalmpl/library/lang/json/IO.java @@ -23,8 +23,6 @@ import java.util.stream.Collectors; import org.rascalmpl.debug.IRascalMonitor; import org.rascalmpl.exceptions.RuntimeExceptionFactory; -import org.rascalmpl.library.lang.json.internal.IValueAdapter; -import org.rascalmpl.library.lang.json.internal.JSONReadingTypeVisitor; import org.rascalmpl.library.lang.json.internal.JsonValueReader; import org.rascalmpl.library.lang.json.internal.JsonValueWriter; import org.rascalmpl.types.ReifiedType; @@ -45,13 +43,8 @@ import io.usethesource.vallang.type.Type; import io.usethesource.vallang.type.TypeStore; -import com.google.gson.FieldNamingPolicy; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.google.gson.reflect.TypeToken; import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonWriter; -import com.ibm.icu.text.DateFormat; public class IO { private final IRascalValueFactory values; @@ -62,48 +55,7 @@ public IO(IRascalValueFactory values, IRascalMonitor monitor) { this.values = values; this.monitor = monitor; } - - public IString toJSON(IValue value) { - return toJSON(value, this.values.bool(false)); - } - - public IString toJSON(IValue value, IBool compact) { - IValueAdapter adap = new IValueAdapter(compact.getValue()); - Gson gson = new GsonBuilder() - .registerTypeAdapter(IValue.class, adap) - .enableComplexMapKeySerialization() - .setDateFormat(DateFormat.LONG) - .setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE) - .setVersion(1.0) - .disableHtmlEscaping() - .create(); - try { - String json = gson.toJson(value, new TypeToken() {}.getType()); - return values.string(json); - } catch (Exception e) { - throw RuntimeExceptionFactory.io(values.string(e.getMessage()), null, null); - } - } - - public IValue fromJSON(IValue type, IString src) { - TypeStore store = new TypeStore(); - Type start = new TypeReifier(values).valueToType((IConstructor) type, store); - Gson gson = new GsonBuilder() - .enableComplexMapKeySerialization() - .setDateFormat(DateFormat.LONG) - .setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE) - .setVersion(1.0) - .create(); - Object obj = gson.fromJson(src.getValue(), Object.class); - try { - return JSONReadingTypeVisitor.read(obj, values, store, start); - } - catch (IOException e) { - throw RuntimeExceptionFactory.io(values.string(e.getMessage()), null, null); - } - } - public IValue readJSON(IValue type, ISourceLocation loc, IString dateTimeFormat, IBool lenient, IBool trackOrigins, IFunction parsers, IMap nulls, IBool explicitConstructorNames, IBool explicitDataTypes) { TypeStore store = new TypeStore(); Type start = new TypeReifier(values).valueToType((IConstructor) type, store); diff --git a/src/org/rascalmpl/library/lang/json/IO.rsc b/src/org/rascalmpl/library/lang/json/IO.rsc index 2f40b1d4559..427c84aee0a 100644 --- a/src/org/rascalmpl/library/lang/json/IO.rsc +++ b/src/org/rascalmpl/library/lang/json/IO.rsc @@ -25,21 +25,6 @@ import Exception; } data RuntimeException(str cause="", str path=""); -@javaClass{org.rascalmpl.library.lang.json.IO} -@synopsis{Maps any Rascal value to a JSON string} -@deprecated{use ((writeJSON))} -public java str toJSON(value v); - -@javaClass{org.rascalmpl.library.lang.json.IO} -@synopsis{Maps any Rascal value to a JSON string, optionally in compact form.} -@deprecated{use ((asJSON))} -public java str toJSON(value v, bool compact); - -@javaClass{org.rascalmpl.library.lang.json.IO} -@deprecated{use ((readJSON))} -@synopsis{Parses a JSON string and maps it to the requested type of Rascal value.} -public java &T fromJSON(type[&T] typ, str src); - @javaClass{org.rascalmpl.library.lang.json.IO} @synopsis{reads JSON values from a stream} @description{ diff --git a/src/org/rascalmpl/library/lang/json/internal/IValueAdapter.java b/src/org/rascalmpl/library/lang/json/internal/IValueAdapter.java deleted file mode 100644 index 2cf2c78d2b9..00000000000 --- a/src/org/rascalmpl/library/lang/json/internal/IValueAdapter.java +++ /dev/null @@ -1,27 +0,0 @@ -package org.rascalmpl.library.lang.json.internal; - -import java.io.IOException; - -import io.usethesource.vallang.IValue; - -import com.google.gson.TypeAdapter; -import com.google.gson.stream.JsonReader; -import com.google.gson.stream.JsonWriter; - -public class IValueAdapter extends TypeAdapter { - private final boolean compact; - - @Override - public void write(JsonWriter out, IValue value) throws IOException { - value.accept(new JSONWritingValueVisitor(out, compact)); - } - - @Override - public IValue read(JsonReader in) throws IOException { - throw new AssertionError("should not be used"); - } - - public IValueAdapter(boolean compact) { - this.compact = compact; - } -} diff --git a/src/org/rascalmpl/library/lang/json/internal/JSONReadingTypeVisitor.java b/src/org/rascalmpl/library/lang/json/internal/JSONReadingTypeVisitor.java deleted file mode 100644 index bd867b68f0e..00000000000 --- a/src/org/rascalmpl/library/lang/json/internal/JSONReadingTypeVisitor.java +++ /dev/null @@ -1,713 +0,0 @@ -package org.rascalmpl.library.lang.json.internal; - -import static org.rascalmpl.library.lang.json.Factory.JSON; -import static org.rascalmpl.library.lang.json.Factory.JSON_array; -import static org.rascalmpl.library.lang.json.Factory.JSON_boolean; -import static org.rascalmpl.library.lang.json.Factory.JSON_ivalue; -import static org.rascalmpl.library.lang.json.Factory.JSON_null; -import static org.rascalmpl.library.lang.json.Factory.JSON_number; -import static org.rascalmpl.library.lang.json.Factory.JSON_object; -import static org.rascalmpl.library.lang.json.Factory.JSON_string; - -import java.io.IOException; -import java.net.URISyntaxException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; -import java.util.Stack; - -import org.rascalmpl.interpreter.asserts.NotYetImplemented; -import org.rascalmpl.types.NonTerminalType; -import org.rascalmpl.values.RascalValueFactory; - -import io.usethesource.vallang.IBool; -import io.usethesource.vallang.IConstructor; -import io.usethesource.vallang.IDateTime; -import io.usethesource.vallang.IExternalValue; -import io.usethesource.vallang.IInteger; -import io.usethesource.vallang.IList; -import io.usethesource.vallang.IListWriter; -import io.usethesource.vallang.IMap; -import io.usethesource.vallang.IMapWriter; -import io.usethesource.vallang.INode; -import io.usethesource.vallang.IRational; -import io.usethesource.vallang.IReal; -import io.usethesource.vallang.ISet; -import io.usethesource.vallang.ISetWriter; -import io.usethesource.vallang.ISourceLocation; -import io.usethesource.vallang.IString; -import io.usethesource.vallang.ITuple; -import io.usethesource.vallang.IValue; -import io.usethesource.vallang.IValueFactory; -import io.usethesource.vallang.IWithKeywordParameters; -import io.usethesource.vallang.type.ITypeVisitor; -import io.usethesource.vallang.type.Type; -import io.usethesource.vallang.type.TypeFactory; -import io.usethesource.vallang.type.TypeStore; -import io.usethesource.vallang.visitors.IValueVisitor; - -@SuppressWarnings("rawtypes") -public class JSONReadingTypeVisitor implements ITypeVisitor { - - private static final TypeFactory tf = TypeFactory.getInstance(); - private final IValueFactory vf; - private final TypeStore ts; - private final Stack stack; - - public static IValue read(Object obj, IValueFactory vf, TypeStore ts, Type t) throws IOException { - JSONReadingTypeVisitor v = new JSONReadingTypeVisitor(obj, vf, ts); - return v.read(t); - } - - private JSONReadingTypeVisitor(Object obj, IValueFactory vf, TypeStore ts) { - this.stack = new Stack(); - this.stack.push(obj); - this.vf = vf; - this.ts = ts; - } - - private IValue read(Type type) throws IOException { - while (type.isAliased()) { - type = type.getAliased(); - } - - if (type == tf.valueType()) { - return visitValue(type); - } - - if (type == tf.numberType()) { - return visitNumber(type); - } - - if (type == JSON) { - return readPlainJSON(); - } - - // NB: why not treat isNode same as isNumber: - // because nodes have values, but nums do not. - - stack.push(contents()); // skip tag - IValue v = type.accept(this); - stack.pop(); - return v; - } - - - private String tag() { - assert stack.peek() instanceof List && ((List)stack.peek()).size() == 2; - List m = (List)stack.peek(); - return (String) m.get(0); - } - - private Object contents() { - assert stack.peek() instanceof List && ((List)stack.peek()).size() == 2; - List m = (List)stack.peek(); - return m.get(1); - } - - @Override - public IValue visitReal(Type type) throws IOException { - return vf.real(((Double)stack.peek()).doubleValue()); - } - - @Override - public IValue visitInteger(Type type) throws IOException { - return vf.integer(((Double)stack.peek()).longValue()); - } - - @Override - public IValue visitRational(Type type) throws IOException { - // [ num, denom ] - List l = (List)stack.peek(); - long num = ((Double)l.get(0)).longValue(); - long den = ((Double)l.get(1)).longValue(); - return vf.rational(num, den); - } - - private Type elementType(Type t) { - return t.isTop() ? tf.valueType() : t.getElementType(); - } - - private Type keyType(Type t) { - return t.isTop() ? tf.valueType() : t.getKeyType(); - } - - private Type valueType(Type t) { - return t.isTop() ? tf.valueType() : t.getValueType(); - } - - @Override - public IValue visitList(Type type) throws IOException { - IListWriter w = vf.listWriter(); - List l = (List)stack.peek(); - for (Object e: l) { - stack.push(e); - w.append(read(elementType(type))); - stack.pop(); - } - return w.done(); - } - - @Override - public IValue visitMap(Type type) throws IOException { - // [ [k, v], ... ] - IMapWriter w = vf.mapWriter(); - List l = (List)stack.peek(); - for (Object e: l) { - List pair = (List)e; - stack.push(pair.get(0)); - IValue k = read(keyType(type)); - stack.pop(); - stack.push(pair.get(1)); - IValue v = read(valueType(type)); - stack.pop(); - w.put(k, v); - } - return w.done(); - } - - @Override - public IValue visitNumber(Type type) throws IOException { - IValue value = null; - String tag = tag(); - stack.push(contents()); - switch (tag) { - case "int": - value = visitInteger(type); - break; - case "real": - value = visitReal(type); - break; - case "rat": - value = visitRational(type); - break; - default: - throw new IOException("invalid tag for num: " + tag); - } - stack.pop(); - return value; - } - - @Override - public IValue visitAlias(Type type) throws IOException { - throw new AssertionError("alias normalization should happen in read()"); - } - - @Override - public IValue visitFunction(Type type) throws IOException { - throw new AssertionError("can not deserialize functions from JSON"); - } - - @Override - public IValue visitSet(Type type) throws IOException { - ISetWriter w = vf.setWriter(); - List l = (List)stack.peek(); - for (Object e: l) { - stack.push(e); - w.insert(read(elementType(type))); - stack.pop(); - } - return w.done(); - } - - @Override - public IValue visitSourceLocation(Type type) throws IOException { - String scheme = null; - String authority = null; - String path = null; - String fragment = ""; - String query = ""; - int offset = -1; - int length = -1; - int beginLine = -1; - int endLine = -1; - int beginColumn = -1; - int endColumn = -1; - - Map m = (Map)stack.peek(); - for (Object k: m.keySet()) { - String name = (String)k; - switch (name) { - case "scheme": - scheme = (String)m.get(name); - break; - case "authority": - authority = (String)m.get(name); - break; - case "path": - path = (String)m.get(name); - break; - case "fragment": - fragment = (String)m.get(name); - break; - case "query": - query = (String)m.get(name); - break; - case "offset": - offset = ((Double)m.get(name)).intValue(); - break; - case "length": - length = ((Double)m.get(name)).intValue(); - break; - case "beginLine": - beginLine = ((Double)m.get(name)).intValue(); - break; - case "endLine": - endLine = ((Double)m.get(name)).intValue(); - break; - case "beginColumn": - beginColumn = ((Double)m.get(name)).intValue(); - break; - case "endColumn": - endColumn = ((Double)m.get(name)).intValue(); - break; - default: - throw new IOException( - "invalid property name in SourceLocation serialization: " - + name); - } - } - try { - ISourceLocation top = vf.sourceLocation(scheme, authority, path, query, fragment); - if (offset != -1 && length != -1 && beginLine != -1 && endLine != -1 && beginColumn != -1 && endColumn != -1) { - return vf.sourceLocation(top, offset, length, beginLine, endLine, beginColumn, endColumn); - } - else if (offset != -1 && length != -1) { - return vf.sourceLocation(top, offset, length); - } - else { - return top; - } - } catch (URISyntaxException e) { - throw new IOException(e); - } - } - - @Override - public IValue visitString(Type type) throws IOException { - return vf.string((String)stack.peek()); - } - - @Override - public IValue visitNode(Type type) throws IOException { - // ["name", [ ... ] ] - - List l = (List)stack.peek(); - - String name = (String)l.get(0); - int arity = ((Double)l.get(1)).intValue(); - - List argsList = (List) l.get(2); - - IValue[] args = new IValue[arity]; - for (int i = 0; i < arity; i++) { - stack.push(argsList.get(i)); - args[i] = read(tf.valueType()); - stack.pop(); - } - - Map kwargs = null; - if (l.size() > 3) { - kwargs = new HashMap<>(); - Map kw = (Map)l.get(3); - for (Object k: kw.keySet()) { - String label = (String)k; - stack.push(kw.get(label)); - kwargs.put(label, fixupTypeOfNodeValues(read(tf.valueType()))); - stack.pop(); - } - } - - if (kwargs != null) { - return vf.node(name, args, kwargs); - } - return vf.node(name, args); - } - - private IValue fixupTypeOfNodeValues(IValue input) { - return input.accept(new IValueVisitor() { - - @Override - public IValue visitList(IList o) throws RuntimeException { - List elements = new ArrayList(o.length()); - for (IValue e : o) { - elements.add(e.accept(this)); - } - IListWriter writer = vf.listWriter(); - writer.appendAll(elements); - return writer.done(); - } - - @Override - public IValue visitSet(ISet o) throws RuntimeException { - List elements = new ArrayList(o.size()); - for (IValue e : o) { - elements.add(e.accept(this)); - } - ISetWriter writer = vf.setWriter(); - writer.insertAll(elements); - return writer.done(); - } - - @Override - public IValue visitTuple(ITuple o) throws RuntimeException { - IValue[] elements = new IValue[o.arity()]; - Type[] types = new Type[o.arity()]; - for (int i = 0; i < elements.length; i++) { - elements[i] = o.get(i).accept(this); - types[i] = elements[i].getType(); - } - - return vf.tuple(elements); - } - - @Override - public IValue visitNode(INode o) throws RuntimeException { - IValue[] children = new IValue[o.arity()]; - for (int i = 0; i < children.length; i++) { - children[i] = o.get(i).accept(this); - } - if (o.mayHaveKeywordParameters()) { - IWithKeywordParameters okw = o.asWithKeywordParameters(); - Map oldKwParams = okw.getParameters(); - Map kwParams = new HashMap<>(oldKwParams.size()); - for (String key : oldKwParams.keySet()) { - kwParams.put(key, oldKwParams.get(key).accept(this)); - - } - return vf.node(o.getName(), children, kwParams); - } - - return vf.node(o.getName(), children); - } - - @Override - public IValue visitMap(IMap o) throws RuntimeException { - Iterator> entries = o.entryIterator(); - Map newEntries = new HashMap<>(o.size()); - while (entries.hasNext()) { - Entry ent = entries.next(); - newEntries.put(ent.getKey().accept(this), ent.getValue().accept(this)); - } - - IMapWriter writer = vf.mapWriter(); - writer.putAll(newEntries); - return writer.done(); - } - - @Override - public IValue visitConstructor(IConstructor o) - throws RuntimeException { - throw new NotYetImplemented("Constructors are not yet implemented"); - } - - @Override - public IValue visitString(IString o) throws RuntimeException { - return o; - } - - @Override - public IValue visitReal(IReal o) throws RuntimeException { - return o; - } - - @Override - public IValue visitRational(IRational o) throws RuntimeException { - return o; - } - - - - @Override - public IValue visitSourceLocation(ISourceLocation o) - throws RuntimeException { - return o; - } - - - @Override - public IValue visitInteger(IInteger o) throws RuntimeException { - return o; - } - - @Override - public IValue visitBoolean(IBool boolValue) throws RuntimeException { - return boolValue; - } - - @Override - public IValue visitExternal(IExternalValue externalValue) - throws RuntimeException { - return externalValue; - } - - @Override - public IValue visitDateTime(IDateTime o) throws RuntimeException { - return o; - } - }); - } - - @Override - public IValue visitConstructor(Type type) throws IOException { - throw new NotYetImplemented("constructor types"); - } - - @Override - public IValue visitAbstractData(Type type) throws IOException { - // [ "name", [ ... ], { ... } } - - if (type == JSON) { - return readPlainJSON(); - } - - List l = (List)stack.peek(); - String name = (String)l.get(0); - int arity = ((Double)l.get(1)).intValue(); - - Set ctors = ts.lookupConstructor(type, name); - Type ctor = null; - for (Type t: ctors) { - if (t.getArity() == arity) { - ctor = t; - break; - } - } - - if (ctor == null) { - throw new IOException("no constructor " + name + "/" + arity+ " in " + type); - } - - List argsList = (List) l.get(2); - - IValue[] args = new IValue[arity]; - for (int i = 0; i < arity; i++) { - stack.push(argsList.get(i)); - args[i] = read(ctor.getFieldType(i)); - stack.pop(); - } - - Map kwargs = null; - Map kwformals = ts.getKeywordParameters(ctor); - - if (kwformals.size() > 0 && l.size() > 3) { - kwargs = new HashMap<>(); - Map kw = (Map)l.get(3); - for (Object k: kw.keySet()) { - String label = (String)k; - Type kwType = kwformals.get(label); - if (kwType == null) { - // TODO: JV added this, kwType could be null - kwType = tf.valueType(); - } - stack.push(kw.get(label)); - kwargs.put(label, read(kwType)); - stack.pop(); - } - } - - if (kwargs != null) { - return vf.constructor(ctor, args, kwargs); - } - - return vf.constructor(ctor, args); - } - - - private IValue readPlainJSON() throws IOException { - return convertToIValue(stack.peek()); - } - - private IValue convertToIValue(Object obj) throws IOException { - if (obj == null) { - return vf.constructor(JSON_null); - } - if (obj instanceof Double) { - return vf.constructor(JSON_number, vf.real(((Double)obj).doubleValue())); - } - if (obj instanceof Boolean) { - return vf.constructor(JSON_boolean, vf.bool(((Boolean)obj).booleanValue())); - } - if (obj instanceof String) { - return vf.constructor(JSON_string, vf.string((String)obj)); - } - if (obj instanceof Map) { - Map map = (Map)obj; - if (map.keySet().size() == 1) { - for (Object k: map.keySet()) { - if (k.equals("#value")) { - stack.push(map.get(k)); - IValue v = read(tf.valueType()); - stack.pop(); - return vf.constructor(JSON_ivalue, v); - } - } - } - IMapWriter w = vf.mapWriter(); - for (Object k: map.keySet()) { - w.put(vf.string((String) k), convertToIValue(map.get(k))); - } - return vf.constructor(JSON_object, w.done()); - } - if (obj instanceof List) { - IListWriter w = vf.listWriter(); - for (Object k: (List)obj) { - w.append(convertToIValue(k)); - } - return vf.constructor(JSON_array, w.done()); - } - - throw new AssertionError("unhandled generic JSON object: " + obj); - } - - @Override - public IValue visitTuple(Type type) throws IOException { - List l = (List)stack.peek(); - - if (type.isTop()) { - IValue[] args = new IValue[l.size()]; - for (int i = 0; i < l.size(); i++) { - stack.push(l.get(i)); - args[i] = read(tf.valueType()); - stack.pop(); - } - return vf.tuple(args); - } - - IValue args[] = new IValue[type.getArity()]; - for (int i = 0; i < l.size(); i++) { - stack.push(l.get(i)); - args[i] = read(type.getFieldType(i)); - stack.pop(); - } - return vf.tuple(args); - } - - @Override - public IValue visitValue(Type type) throws IOException { - String tag = tag(); - IValue value = null; - stack.push(contents()); - switch (tag) { - case "cons": - value = visitNode(type); - break; - case "node": - value = visitNode(type); - break; - case "int": - value = visitInteger(type); - break; - case "rat": - value = visitRational(type); - break; - case "real": - value = visitReal(type); - break; - case "loc": - value = visitSourceLocation(type); - break; - case "datetime": - value = visitDateTime(type); - break; - case "bool": - value = visitBool(type); - break; - case "list": - value = visitList(type); - break; - case "set": - value = visitSet(type); - break; - case "map": - value = visitMap(type); - break; - case "str": - value = visitString(type); - break; - case "tuple": - value = visitTuple(type); - break; - default: - throw new IOException("invalid tag for value: " + tag); - } - stack.pop(); - return value; - } - - @Override - public IValue visitDateTime(Type type) throws IOException { - // {datetime: { }} - int year = -1; - int monthOfYear = -1; - int dayOfMonth = -1; - - int hourOfDay = -1; - int minuteOfHour = -1; - int secondOfMinute = -1; - int millisecondsOfSecond = -1; - int timezoneOffsetHours = -99; - int timezoneOffsetMinutes = -99; - - Map m = (Map)stack.peek(); - - for (Object k: m.keySet()) { - String fld = (String)k; - int n = ((Double)m.get(fld)).intValue(); - switch (fld) { - case "year": year = n; break; - case "monthOfYear": monthOfYear = n; break; - case "dayOfMonth": dayOfMonth = n; break; - case "hourOfDay": hourOfDay = n; break; - case "minuteOfHour": minuteOfHour = n; break; - case "secondOfMinute": secondOfMinute = n; break; - case "millisecondsOfSecond": millisecondsOfSecond = n; break; - case "timezoneOffsetHours": timezoneOffsetHours = n; break; - case "timezoneOffsetMinutes": timezoneOffsetMinutes = n; break; - default: throw new IOException("invalid field for date time: " + fld); - } - } - - if (year != -1 && monthOfYear != -1 && dayOfMonth != -1 && hourOfDay != -1 - && minuteOfHour != -1 && secondOfMinute != -1 && millisecondsOfSecond != -1 - && timezoneOffsetHours != -99 && timezoneOffsetMinutes != -99) { - return vf.datetime(year, monthOfYear, dayOfMonth, hourOfDay, minuteOfHour, secondOfMinute, millisecondsOfSecond, timezoneOffsetHours, timezoneOffsetMinutes); - } - if (year != -1 && monthOfYear != -1 && dayOfMonth != -1 && hourOfDay != -1 - && minuteOfHour != -1 && secondOfMinute != -1 && millisecondsOfSecond != -1) { - return vf.datetime(year, monthOfYear, dayOfMonth, hourOfDay, minuteOfHour, secondOfMinute, millisecondsOfSecond); - } - if (year != -1 && monthOfYear != -1 && dayOfMonth != -1) { - return vf.date(year, monthOfYear, dayOfMonth); - } - throw new IOException("insufficient fields for making a datetime value"); - } - - @Override - public IValue visitVoid(Type type) throws IOException { - throw new AssertionError("cannot read values of type void"); - } - - @Override - public IValue visitBool(Type type) throws IOException { - return vf.bool((Boolean)stack.peek()); - } - - @Override - public IValue visitParameter(Type type) throws IOException { - throw new AssertionError("parameter types should have been bound"); - } - - @Override - public IValue visitExternal(Type type) throws IOException { - if (type instanceof NonTerminalType) { - return RascalValueFactory.Tree.accept(this); - } - throw new IOException("cannot deserialize external values"); - } - -} \ No newline at end of file diff --git a/src/org/rascalmpl/library/lang/json/internal/JSONWritingValueVisitor.java b/src/org/rascalmpl/library/lang/json/internal/JSONWritingValueVisitor.java deleted file mode 100644 index 19c91fcb576..00000000000 --- a/src/org/rascalmpl/library/lang/json/internal/JSONWritingValueVisitor.java +++ /dev/null @@ -1,453 +0,0 @@ -package org.rascalmpl.library.lang.json.internal; - -import java.io.IOException; - -import org.rascalmpl.exceptions.RuntimeExceptionFactory; -import org.rascalmpl.library.lang.json.Factory; -import io.usethesource.vallang.IBool; -import io.usethesource.vallang.IConstructor; -import io.usethesource.vallang.IDateTime; -import io.usethesource.vallang.IExternalValue; -import io.usethesource.vallang.IInteger; -import io.usethesource.vallang.IList; -import io.usethesource.vallang.IMap; -import io.usethesource.vallang.INode; -import io.usethesource.vallang.IRational; -import io.usethesource.vallang.IReal; -import io.usethesource.vallang.ISet; -import io.usethesource.vallang.ISourceLocation; -import io.usethesource.vallang.IString; -import io.usethesource.vallang.ITuple; -import io.usethesource.vallang.IValue; -import io.usethesource.vallang.IWithKeywordParameters; -import io.usethesource.vallang.impl.fields.ConstructorWithKeywordParametersFacade; -import io.usethesource.vallang.visitors.IValueVisitor; - -import com.google.gson.stream.JsonWriter; - -public class JSONWritingValueVisitor implements IValueVisitor { - - private final JsonWriter out; - - private final boolean compact; - - public JSONWritingValueVisitor(JsonWriter out, boolean compact) { - this.out = out; - this.compact = compact; - } - - public static void write(JsonWriter out, IValue value, boolean compact) - throws IOException { - value.accept(new JSONWritingValueVisitor(out, compact)); - } - - public static void write(JsonWriter out, IValue value) - throws IOException { - write(out, value, false); - } - - @Override - public Void visitReal(IReal value) throws IOException { - // {real: n} - if (compact) { - out.value(value.doubleValue()); - } else { - out.beginArray() - .value("real") - .value(value.doubleValue()) - .endArray(); - } - return null; - } - - @Override - public Void visitInteger(IInteger value) throws IOException { - // {int: n} - if (compact) { - out.value(value.intValue()); - } else { - out.beginArray() - .value("int") - .value(((IInteger) value).intValue()) - .endArray(); - } - return null; - } - - @Override - public Void visitRational(IRational value) throws IOException { - // {rat: [n, d] } - if (!compact) { - out.beginArray() - .value("rat"); - } - - out.beginArray() - .value(((IRational) value).numerator().longValue()) - .value(((IRational) value).denominator().longValue()) - .endArray(); - - if (!compact) { - out.endArray(); - } - return null; - } - - @Override - public Void visitList(IList value) throws IOException { - // {list: [ ... ] } - if (compact) { - out.beginArray(); - for (IValue v : (IList) value) { - write(out, v, compact); - } - out.endArray(); - } - else - { - out.beginArray() - .value("list") - .beginArray(); - for (IValue v : (IList) value) { - write(out, v); - } - out.endArray() - .endArray(); - } - return null; - } - - @Override - public Void visitMap(IMap value) throws IOException { - // {map: [ [k, v], [k, v] ] } - if (compact) { - out.beginObject(); - for (IValue k : (IMap) value) { - if (k.getType().isString()) { - String s = ((IString) k).getValue(); - out.name(s); - write(out, ((IMap) value).get(k), compact); - } else - throw new IOException("Not possible to translate: " + value); - } - out.endObject(); - } else { - out.beginArray() - .value("map") - .beginArray(); - for (IValue k : (IMap) value) { - out.beginArray(); - write(out, k); - write(out, ((IMap) value).get(k)); - out.endArray(); - } - out.endArray() - .endArray(); - } - return null; - } - - @Override - public Void visitSet(ISet value) throws IOException { - if (compact) { - out.beginArray(); - for (IValue v : (ISet) value) { - write(out, v, compact); - } - out.endArray(); - } else { - // {set: [.... ]} - out.beginArray(); - out.value("set"); - out.beginArray(); - for (IValue v : (ISet) value) { - write(out, v); - } - out.endArray(); - out.endArray(); - } - return null; - } - - @Override - public Void visitSourceLocation(ISourceLocation value) throws IOException { - // {loc: {...} } - if (!compact) { - out.beginArray(); - out.value("loc"); - } - - out.beginObject(); - ISourceLocation loc = (ISourceLocation) value; - - out.name("scheme"); - out.value(loc.getScheme()); - - if (loc.hasAuthority()) { - out.name("authority"); - out.value(loc.getAuthority()); - } - if (loc.hasPath()) { - out.name("path"); - out.value(loc.getPath()); - } - if (loc.hasFragment()) { - out.name("fragment"); - out.value(loc.getFragment()); - } - if (loc.hasQuery()) { - out.name("query"); - out.value(loc.getQuery()); - } - - if (loc.hasOffsetLength()) { - out.name("offset"); - out.value(loc.getOffset()); - out.name("length"); - out.value(loc.getLength()); - } - - if (loc.hasLineColumn()) { - out.name("beginLine"); - out.value(loc.getBeginLine()); - out.name("endLine"); - out.value(loc.getEndLine()); - out.name("beginColumn"); - out.value(loc.getBeginColumn()); - out.name("endColumn"); - out.value(loc.getEndColumn()); - } - - out.endObject(); - - if (!compact) { - out.endArray(); - } - - return null; - } - - @Override - public Void visitString(IString value) throws IOException { - if (compact) { - out.value(((IString) value).getValue()); - } else { - out.beginArray() - .value("str") - .value(((IString) value).getValue()) - .endArray(); - } - return null; - } - - @Override - public Void visitNode(INode value) throws IOException { - // ["node", ["name", arity, [...]] ] - if (compact) { - throw RuntimeExceptionFactory.illegalTypeArgument(value.toString(), - null, null, "cannot serialize node types"); - } else { - out.beginArray(); - out.value("node"); - out.beginArray(); - INode n = (INode) value; - out.value(n.getName()); - out.value(n.arity()); - out.beginArray(); - for (IValue v : n.getChildren()) { - write(out, v); - } - out.endArray(); - - if (value.mayHaveKeywordParameters()) { - IWithKeywordParameters kw = value.asWithKeywordParameters(); - if (kw.hasParameters()) { - out.beginObject(); - for (String k : kw.getParameterNames()) { - out.name(k); - write(out, kw.getParameter(k)); - } - out.endObject(); - } - } - - out.endArray(); - out.endArray(); - } - return null; - } - - @Override - public Void visitConstructor(IConstructor value) throws IOException { - if (compact) { - throw RuntimeExceptionFactory.illegalTypeArgument(value.toString(), - null, null, "cannot serialize constructor types"); - } - else { - if (value.getType().getAbstractDataType() == Factory.JSON) { - return writePlainJSON(value); - } - - - // ["cons", ["name", arity, [...], { }]] - out.beginArray(); - out.value("cons"); - out.beginArray(); - out.value(value.getName()); - out.value(value.arity()); - out.beginArray(); - for (IValue v : value.getChildren()) { - write(out, v); - } - out.endArray(); - - //if (!value.asAnnotatable().hasAnnotations()) { - // temp hack - if (value instanceof ConstructorWithKeywordParametersFacade) { - IWithKeywordParameters kw = value.asWithKeywordParameters(); - if (kw.hasParameters()) { - out.beginObject(); - for (String k : kw.getParameterNames()) { - out.name(k); - write(out, kw.getParameter(k)); - } - out.endObject(); - - } - } -// } - - out.endArray(); - - out.endArray(); - } - return null; - } - - private Void writePlainJSON(IConstructor value) throws IndexOutOfBoundsException, IOException { - switch (value.getName()) { - case "null": - out.nullValue(); - break; - case "object": - IMap props = (IMap) value.get(0); - out.beginObject(); - for (IValue k: props) { - out.name(((IString)k).getValue()); - writePlainJSON((IConstructor) props.get(k)); - } - out.endObject(); - break; - case "array": - IList vals = (IList) value.get(0); - out.beginArray(); - for (IValue v: vals) { - writePlainJSON((IConstructor) v); - } - out.endArray(); - break; - case "number": - out.value(((IReal)value.get(0)).doubleValue()); - break; - case "string": - out.value(((IString)value.get(0)).getValue()); - break; - case "boolean": - out.value(((IBool)value.get(0)).getValue()); - break; - case "ivalue": - out.beginObject(); - out.name("#value"); - value.get(0).accept(this); - out.endObject(); - break; - default: - throw new IOException("invalid JSON constructor " + value); - } - return null; - } - - @Override - public Void visitTuple(ITuple value) throws IOException { - // {tuple: [ ... ]} - if (compact) { - throw RuntimeExceptionFactory.illegalTypeArgument(value.toString(), - null, null, "cannot serialize tuple types"); - - } else { - out.beginArray() - .value("tuple"); - out.beginArray(); - ITuple t = (ITuple) value; - for (int i = 0; i < t.arity(); i++) { - write(out, t.get(i)); - } - out.endArray(); - out.endArray(); - } - return null; - } - - - - @Override - public Void visitBoolean(IBool value) throws IOException { - // {bool: ..} - if (compact) { - out.value(((IBool) value).getValue()); - } else { - out.beginArray() - .value("bool") - .value(((IBool) value).getValue()) - .endArray(); - } - return null; - } - - - @Override - public Void visitExternal(IExternalValue value) throws IOException { - throw RuntimeExceptionFactory.illegalTypeArgument(value.toString(), - null, null, "cannot serialize external types"); - } - - @Override - public Void visitDateTime(IDateTime value) throws IOException { - // {datetime: { }} - if (compact) { - throw RuntimeExceptionFactory.illegalTypeArgument(value.toString(), - null, null, "cannot serialize datetime types"); - } else { - IDateTime dt = (IDateTime) value; - out.beginArray(); - out.value("datetime"); - out.beginObject(); - if (dt.isDate() || dt.isDateTime()) { - out.name("year"); - out.value(dt.getYear()); - out.name("monthOfYear"); - out.value(dt.getMonthOfYear()); - out.name("dayOfMonth"); - out.value(dt.getDayOfMonth()); - - } - if (dt.isTime() || dt.isDateTime()) { - out.name("hourOfDay"); - out.value(dt.getHourOfDay()); - out.name("minuteOfHour"); - out.value(dt.getMinuteOfHour()); - out.name("secondOfMinute"); - out.value(dt.getSecondOfMinute()); - out.name("millisecondsOfSecond"); - out.value(dt.getMillisecondsOfSecond()); - out.name("timezoneOffsetHours"); - out.value(dt.getTimezoneOffsetHours()); - out.name("timezoneOffsetMinutes"); - out.value(dt.getTimezoneOffsetMinutes()); - } - out.endObject(); - out.endArray(); - } - return null; - } -} diff --git a/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc b/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc index ce28b66894f..573104f3ca3 100644 --- a/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc +++ b/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc @@ -17,8 +17,8 @@ bool writeRead(type[&T] returnType, &T dt) { case int i => i % floor(pow(2, 10)) when abs(i) > pow(2, 10) } - json = toJSON(dt); - return fromJSON(returnType, json) == dt; + json = asJSON(dt); + return parseJSON(returnType, json) == dt; } // only single constructors supported for now From 43d4b6583444ff5a5cceb21610ab610b38d24e97 Mon Sep 17 00:00:00 2001 From: Davy Landman Date: Wed, 18 Dec 2024 14:47:09 +0100 Subject: [PATCH 081/191] Rewrote everything into output streams to reduce all the strings --- src/org/rascalmpl/repl/BaseREPL2.java | 51 ++--- src/org/rascalmpl/repl/IOutputPrinter.java | 76 -------- src/org/rascalmpl/repl/IREPLService.java | 17 +- .../rascalmpl/repl/RascalReplServices.java | 184 ++++++++++++------ .../repl/output/IAnsiCommandOutput.java | 5 + .../repl/output/IBinaryOutputPrinter.java | 43 ++++ .../rascalmpl/repl/output/ICommandOutput.java | 5 + .../repl/output/IErrorCommandOutput.java | 5 + .../repl/output/IHtmlCommandOutput.java | 5 + .../repl/output/IImageCommandOutput.java | 6 + .../rascalmpl/repl/output/IOutputPrinter.java | 41 ++++ .../repl/output/IWebContentOutput.java | 9 + src/org/rascalmpl/repl/output/MimeTypes.java | 11 ++ .../repl/output/impl/StringOutputPrinter.java | 37 ++++ src/org/rascalmpl/shell/RascalShell2.java | 97 +-------- 15 files changed, 323 insertions(+), 269 deletions(-) delete mode 100644 src/org/rascalmpl/repl/IOutputPrinter.java create mode 100644 src/org/rascalmpl/repl/output/IAnsiCommandOutput.java create mode 100644 src/org/rascalmpl/repl/output/IBinaryOutputPrinter.java create mode 100644 src/org/rascalmpl/repl/output/ICommandOutput.java create mode 100644 src/org/rascalmpl/repl/output/IErrorCommandOutput.java create mode 100644 src/org/rascalmpl/repl/output/IHtmlCommandOutput.java create mode 100644 src/org/rascalmpl/repl/output/IImageCommandOutput.java create mode 100644 src/org/rascalmpl/repl/output/IOutputPrinter.java create mode 100644 src/org/rascalmpl/repl/output/IWebContentOutput.java create mode 100644 src/org/rascalmpl/repl/output/MimeTypes.java create mode 100644 src/org/rascalmpl/repl/output/impl/StringOutputPrinter.java diff --git a/src/org/rascalmpl/repl/BaseREPL2.java b/src/org/rascalmpl/repl/BaseREPL2.java index b95bd20cacb..40601313998 100644 --- a/src/org/rascalmpl/repl/BaseREPL2.java +++ b/src/org/rascalmpl/repl/BaseREPL2.java @@ -19,6 +19,11 @@ import org.jline.terminal.Terminal.Signal; import org.jline.terminal.Terminal.SignalHandler; import org.jline.utils.ShutdownHooks; +import org.rascalmpl.repl.output.IAnsiCommandOutput; +import org.rascalmpl.repl.output.ICommandOutput; +import org.rascalmpl.repl.output.IErrorCommandOutput; +import org.rascalmpl.repl.output.IOutputPrinter; +import org.rascalmpl.repl.output.impl.StringOutputPrinter; public class BaseREPL2 { @@ -28,11 +33,9 @@ public class BaseREPL2 { private volatile boolean keepRunning = true; private final @MonotonicNonNull DefaultHistory history; private String currentPrompt; - private static final String FALLBACK_MIME_TYPE = "text/plain"; - private static final String ANSI_MIME_TYPE = "text/x-ansi"; - private final boolean ansiSupported; + private final boolean ansiColorsSupported; + private final boolean advancedTermFeaturesSupported; private final boolean unicodeSupported; - private final String mimeType; public BaseREPL2(IREPLService replService, Terminal term) { this.replService = replService; @@ -62,21 +65,21 @@ public BaseREPL2(IREPLService replService, Terminal term) { switch (term.getType()) { case Terminal.TYPE_DUMB: - this.ansiSupported = false; - this.mimeType = FALLBACK_MIME_TYPE; + this.ansiColorsSupported = false; + this.advancedTermFeaturesSupported = false; break; case Terminal.TYPE_DUMB_COLOR: - this.ansiSupported = false; - this.mimeType = ANSI_MIME_TYPE; + this.ansiColorsSupported = false; + this.advancedTermFeaturesSupported = true; break; default: - this.ansiSupported = true; - this.mimeType = ANSI_MIME_TYPE; + this.ansiColorsSupported = true; + this.advancedTermFeaturesSupported = true; break; } this.unicodeSupported = term.encoding().newEncoder().canEncode("💓"); - this.currentPrompt = replService.prompt(ansiSupported, unicodeSupported); - reader.variable(LineReader.SECONDARY_PROMPT_PATTERN, replService.parseErrorPrompt(ansiSupported, unicodeSupported)); + this.currentPrompt = replService.prompt(ansiColorsSupported, unicodeSupported); + reader.variable(LineReader.SECONDARY_PROMPT_PATTERN, replService.parseErrorPrompt(ansiColorsSupported, unicodeSupported)); this.reader = reader.build(); @@ -187,22 +190,24 @@ private AtomicBoolean setupInterruptHandler() { private void handleInput(String line) throws InterruptedException { - var result = new HashMap(); - var meta = new HashMap(); - replService.handleInput(line, result, meta); - writeResult(result); + writeResult(replService.handleInput(line)); } - private void writeResult(HashMap result) { - var writer = result.get(this.mimeType); - if (writer == null) { - writer = result.get(FALLBACK_MIME_TYPE); + private void writeResult(ICommandOutput result) { + PrintWriter target = replService.outputWriter(); + if (result instanceof IErrorCommandOutput) { + target = replService.errorWriter(); + result = ((IErrorCommandOutput)result).getError(); } - if (writer == null) { - replService.outputWriter().println("Ok"); + + IOutputPrinter writer; + if (ansiColorsSupported && result instanceof IAnsiCommandOutput) { + writer = ((IAnsiCommandOutput)result).asAnsi(); } else { - writer.write(replService.outputWriter()); + writer = result.asPlain(); } + + writer.write(target); } } diff --git a/src/org/rascalmpl/repl/IOutputPrinter.java b/src/org/rascalmpl/repl/IOutputPrinter.java deleted file mode 100644 index 80b207058fb..00000000000 --- a/src/org/rascalmpl/repl/IOutputPrinter.java +++ /dev/null @@ -1,76 +0,0 @@ -package org.rascalmpl.repl; - -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.io.PrintWriter; -import java.io.Reader; -import java.io.StringReader; -import java.io.StringWriter; - -import java.io.ByteArrayOutputStream; -import java.io.ByteArrayInputStream; - -/** - * The output of a REPL command is represented by this class, depending on the consumer (terminal/notebook/webserver) a different function might be called. - */ -public interface IOutputPrinter { - /** - * Write the output on this print writer interface. - * In case {@linkplain #isBinary()} returns true, it might not be called, but please write a message why binary output should have been used. - * @param target where to write the output to. - */ - void write(PrintWriter target); - - - /** - * Offer the same output as {@linkplain #write(PrintWriter)} but as a pull based reader. - * The standard implementation takes care to just call the write function with a buffer. - * If you however can provide a streaming reading, override this function instead, depending - * on the consumer, it might be called instead of the write function. - * @return a reader that produces the same contents as the write function, but in a pull style instead of push. - */ - default Reader asReader() { - try (var result = new StringWriter()) { - try (var resultWriter = new PrintWriter(result)) { - write(resultWriter); - } - return new StringReader(result.toString()); - } - catch (IOException ex) { - throw new IllegalStateException("StringWriter close should never throw exception", ex); - } - } - - /** - * Some renders support binary output (such as images), if this function returns true, they'll call - * either {@linkplain #write(OutputStream)} or {@linkplain #asInputStream()} instead. - */ - default boolean isBinary() { - return false; - } - - /** - * Write bytes to a stream, it will only be called is {@linkplain #isBinary()} returns true, the renderer supports it, and the renderer opens a dedicated stream per resource. - * @throws IOException function on `OutputStream` can cause IOExceptions - */ - - default void write(OutputStream target) throws IOException { - throw new RuntimeException("Write to output stream only supported in case of binary output (such as images)"); - } - - - /** - * Produce bytes that represent the output of a stream, in a streaming/pull style. Will only be called if {@linkplain #isBinary()} is true, the renderer supports it, and the renderer prefers an inputstream to copy from. - * @return an streaming representation of the bytes that makeup the output of the command - */ - default InputStream asInputStream() { - try (var result = new ByteArrayOutputStream()) { - write(result); - return new ByteArrayInputStream(result.toByteArray()); - } - catch (IOException ex) { - throw new IllegalStateException("Write or Close should not have throw an exception", ex); - } - } -} diff --git a/src/org/rascalmpl/repl/IREPLService.java b/src/org/rascalmpl/repl/IREPLService.java index d12261c7ed2..e7792540a5c 100644 --- a/src/org/rascalmpl/repl/IREPLService.java +++ b/src/org/rascalmpl/repl/IREPLService.java @@ -4,22 +4,14 @@ import java.nio.file.Path; import java.util.Collections; import java.util.List; -import java.util.Map; import org.jline.reader.Completer; import org.jline.reader.Parser; import org.jline.reader.impl.DefaultParser; import org.jline.terminal.Terminal; +import org.rascalmpl.repl.output.ICommandOutput; public interface IREPLService { - - String MIME_PLAIN = "text/plain"; - String MIME_ANSI = "text/x-ansi"; - String MIME_HTML = "text/html"; - String MIME_PNG = "image/png"; - String MIME_JPEG = "image/jpeg"; - String MIME_SVG = "image/svg+xml"; - /** * Does this language support completion * @return @@ -66,8 +58,7 @@ default Path historyFile() { default String name() { return "Rascal REPL"; } - // todo see if we really need the meta-data - void handleInput(String input, Map output, Map metadata) throws InterruptedException; + ICommandOutput handleInput(String input) throws InterruptedException; /** * Will be called from a different thread then the one that called `handleInput` @@ -78,12 +69,12 @@ default Path historyFile() { /** * Default prompt */ - String prompt(boolean ansiSupported, boolean unicodeSupported); + String prompt(boolean ansiColorsSupported, boolean unicodeSupported); /** * Continuation prompt */ - String parseErrorPrompt(boolean ansiSupported, boolean unicodeSupported); + String parseErrorPrompt(boolean ansiColorSupported, boolean unicodeSupported); /** * Connect the REPL to the Terminal, most likely want to take a copy of at least the {@link Terminal#writer()}. diff --git a/src/org/rascalmpl/repl/RascalReplServices.java b/src/org/rascalmpl/repl/RascalReplServices.java index 0df0e666f45..a2d036d0d60 100644 --- a/src/org/rascalmpl/repl/RascalReplServices.java +++ b/src/org/rascalmpl/repl/RascalReplServices.java @@ -7,9 +7,9 @@ import java.io.IOException; import java.io.PrintWriter; -import java.io.Reader; -import java.io.StringReader; import java.io.Writer; +import java.net.URI; +import java.net.URISyntaxException; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -42,6 +42,14 @@ import org.rascalmpl.repl.http.REPLContentServer; import org.rascalmpl.repl.http.REPLContentServerManager; import org.rascalmpl.repl.jline3.RascalLineParser; +import org.rascalmpl.repl.output.IAnsiCommandOutput; +import org.rascalmpl.repl.output.ICommandOutput; +import org.rascalmpl.repl.output.IErrorCommandOutput; +import org.rascalmpl.repl.output.IHtmlCommandOutput; +import org.rascalmpl.repl.output.IOutputPrinter; +import org.rascalmpl.repl.output.IWebContentOutput; +import org.rascalmpl.repl.output.MimeTypes; +import org.rascalmpl.repl.output.impl.StringOutputPrinter; import org.rascalmpl.repl.streams.ItalicErrorWriter; import org.rascalmpl.repl.streams.LimitedLineWriter; import org.rascalmpl.repl.streams.LimitedWriter; @@ -53,6 +61,7 @@ import org.rascalmpl.values.parsetrees.TreeAdapter; import io.usethesource.vallang.IConstructor; +import io.usethesource.vallang.IInteger; import io.usethesource.vallang.ISourceLocation; import io.usethesource.vallang.IString; import io.usethesource.vallang.IValue; @@ -125,63 +134,60 @@ public Parser inputParser() { }); } - @Override - public void handleInput(String input, Map output, Map metadata) - throws InterruptedException { + public ICommandOutput handleInput(String input) throws InterruptedException { synchronized(eval) { Objects.requireNonNull(eval, "Not initialized yet"); try { - Result value; - value = eval.eval(eval.getMonitor(), input, URIUtil.rootLocation("prompt")); - outputResult(output, value, metadata); + Result value = eval.eval(eval.getMonitor(), input, URIUtil.rootLocation("prompt")); + return outputResult(value); } catch (InterruptException ex) { - reportError(output, (w, sw) -> { + return reportError((w, sw) -> { w.println("Interrupted"); ex.getRascalStackTrace().prettyPrintedString(w, sw); }); } catch (ParseError pe) { - reportError(output, (w, sw) -> { + return reportError((w, sw) -> { parseErrorMessage(w, input, "prompt", pe, sw); }); } catch (StaticError e) { - reportError(output, (w, sw) -> { + return reportError((w, sw) -> { staticErrorMessage(w, e, sw); }); } catch (Throw e) { - reportError(output, (w, sw) -> { + return reportError((w, sw) -> { throwMessage(w,e, sw); }); } catch (QuitException q) { - reportError(output, (w, sw) -> { + throw new EndOfFileException("Quiting REPL"); + /* + return reportError((w, sw) -> { w.println("Quiting REPL"); }); - throw new EndOfFileException("Quiting REPL"); + */ } catch (Throwable e) { - reportError(output, (w, sw) -> { + return reportError((w, sw) -> { throwableMessage(w, e, eval.getStackTrace(), sw); }); } } } - private void outputResult(Map output, IRascalResult result, Map metadata) { + private ICommandOutput outputResult(IRascalResult result) { if (result == null || result.getValue() == null) { - output.put(MIME_PLAIN, new StringOutputPrinter("ok", newline)); - return; + return () -> new StringOutputPrinter("ok", newline, MimeTypes.PLAIN_TEXT); } IValue value = result.getValue(); Type type = result.getStaticType(); if (type.isSubtypeOf(RascalValueFactory.Content) && !type.isBottom()) { - serveContent(output, (IConstructor)value, metadata); - return; + return serveContent((IConstructor)value); } ThrowingWriter resultWriter; @@ -239,9 +245,25 @@ else if (type.isString()) { w.println(); }; - output.put(MIME_PLAIN, new ExceptionPrinter(typePrefixed, plainIndentedPrinter)); - output.put(MIME_ANSI, new ExceptionPrinter(typePrefixed, ansiIndentedPrinter)); + return new DoubleOutput(typePrefixed); + } + + private static class DoubleOutput implements IAnsiCommandOutput { + private ThrowingWriter writer; + + DoubleOutput(ThrowingWriter writer) { + this.writer = writer; + } + @Override + public IOutputPrinter asAnsi() { + return new ParameterizedPrinterOutput(writer, ansiIndentedPrinter, MimeTypes.ANSI); + } + + @Override + public IOutputPrinter asPlain() { + return new ParameterizedPrinterOutput(writer, plainIndentedPrinter, MimeTypes.PLAIN_TEXT); + } } private Function addEvalLock(IFunction func) { @@ -252,7 +274,7 @@ private Function addEvalLock(IFunction func) { }; } - private void serveContent(Map output, IConstructor provider, Map metadata) { + private ICommandOutput serveContent(IConstructor provider) { String id; Function target; @@ -267,32 +289,86 @@ private void serveContent(Map output, IConstructor provi try { // this installs the provider such that subsequent requests are handled. - REPLContentServer server = contentManager.addServer(id, target); + REPLContentServer server = contentManager.addServer(id, target); // now we need some HTML to show - String URL = "http://localhost:" + server.getListeningPort() + "/"; IWithKeywordParameters kp = provider.asWithKeywordParameters(); + String title = kp.hasParameter("title") ? ((IString) kp.getParameter("title")).getValue() : id; + int viewColumn = kp.hasParameter("viewColumn") ? ((IInteger)kp.getParameter("viewColumn")).intValue() : 1; + URI serverUri = new URI("http", null, "localhost", server.getListeningPort(), "/", null, null); - metadata.put("url", URL); - metadata.put("title", kp.hasParameter("title") ? ((IString) kp.getParameter("title")).getValue() : id); - metadata.put("viewColumn", kp.hasParameter("viewColumn") ? kp.getParameter("title").toString() : "1"); + return new HostedWebContentOutput(id, serverUri, title, viewColumn); - output.put(MIME_PLAIN, new StringOutputPrinter("Serving \'" + id + "\' at |" + URL + "|", newline)); - output.put(MIME_HTML, new StringOutputPrinter("", newline)); } catch (IOException e) { - reportError(output, (w, sw) -> { + return reportError((w, sw) -> { w.println("Could not start webserver to render html content: "); w.println(e.getMessage()); }); } + catch (URISyntaxException e) { + return reportError((w, sw) -> { + w.println("Could not start build the uri: "); + w.println(e.getMessage()); + }); + } + } + + private class HostedWebContentOutput implements IWebContentOutput, IHtmlCommandOutput { + private final String id; + private final URI uri; + private final String title; + private final int viewColumn; + + HostedWebContentOutput(String id, URI uri, String title, int viewColumn) { + this.id = id; + this.uri = uri; + this.title = title; + this.viewColumn = viewColumn; + } + + @Override + public IOutputPrinter asPlain() { + return new StringOutputPrinter("Serving \'" + id + "\' at |" + uri + "|", newline, MimeTypes.PLAIN_TEXT); + } + + @Override + public IOutputPrinter asHtml() { + return new StringOutputPrinter( + "", + newline, MimeTypes.HTML + ); + } + + @Override + public URI webUri() { + return uri; + } + @Override + public String webTitle() { + return title; + } + + @Override + public int webviewColumn() { + return viewColumn; + } } - private static void reportError(Map output, ThrowingWriter writer) { - output.put(MIME_PLAIN, new ExceptionPrinter(writer, plainIndentedPrinter)); - output.put(MIME_ANSI, new ExceptionPrinter(writer, ansiIndentedPrinter)); + private static IErrorCommandOutput reportError(ThrowingWriter writer) { + return new IErrorCommandOutput() { + @Override + public ICommandOutput getError() { + return new DoubleOutput(writer); + } + + @Override + public IOutputPrinter asPlain() { + return new ParameterizedPrinterOutput(writer, plainIndentedPrinter, MimeTypes.PLAIN_TEXT); + } + }; } @FunctionalInterface @@ -300,13 +376,20 @@ private static interface ThrowingWriter { void write(PrintWriter writer, StandardTextWriter prettyPrinter) throws IOException; } - private static class ExceptionPrinter implements IOutputPrinter { + private static class ParameterizedPrinterOutput implements IOutputPrinter { private final ThrowingWriter internalWriter; private final StandardTextWriter prettyPrinter; + private final String mimeType; - public ExceptionPrinter(ThrowingWriter internalWriter, StandardTextWriter prettyPrinter) { + public ParameterizedPrinterOutput(ThrowingWriter internalWriter, StandardTextWriter prettyPrinter, String mimeType) { this.internalWriter = internalWriter; this.prettyPrinter = prettyPrinter; + this.mimeType = mimeType; + } + + @Override + public String mimeType() { + return mimeType; } @Override @@ -322,43 +405,23 @@ public void write(PrintWriter target) { } } - private static class StringOutputPrinter implements IOutputPrinter { - private final String value; - private final String newline; - - public StringOutputPrinter(String value, String newline) { - this.value = value; - this.newline = newline; - } - - @Override - public void write(PrintWriter target) { - target.println(value); - } - - @Override - public Reader asReader() { - return new StringReader(value + newline); - } - } - @Override public void handleInterrupt() throws InterruptedException { eval.interrupt(); } @Override - public String prompt(boolean ansiSupported, boolean unicodeSupported) { - if (ansiSupported) { + public String prompt(boolean ansiColorsSupported, boolean unicodeSupported) { + if (ansiColorsSupported) { return Ansi.ansi().reset().bold() + "rascal>" + Ansi.ansi().reset(); } return "rascal>"; } @Override - public String parseErrorPrompt(boolean ansiSupported, boolean unicodeSupported) { + public String parseErrorPrompt(boolean ansiColorsSupported, boolean unicodeSupported) { String errorPrompt = (unicodeSupported ? "│" : "|") + "%N %P>"; - if (ansiSupported) { + if (ansiColorsSupported) { return Ansi.ansi().reset().bold() + errorPrompt + Ansi.ansi().reset(); } return errorPrompt; @@ -377,7 +440,6 @@ public PrintWriter outputWriter() { @Override public void flush() { - // TODO figure out why this function is called? eval.getStdErr().flush(); eval.getStdOut().flush(); } diff --git a/src/org/rascalmpl/repl/output/IAnsiCommandOutput.java b/src/org/rascalmpl/repl/output/IAnsiCommandOutput.java new file mode 100644 index 00000000000..e7363f320ca --- /dev/null +++ b/src/org/rascalmpl/repl/output/IAnsiCommandOutput.java @@ -0,0 +1,5 @@ +package org.rascalmpl.repl.output; + +public interface IAnsiCommandOutput extends ICommandOutput { + IOutputPrinter asAnsi(); +} diff --git a/src/org/rascalmpl/repl/output/IBinaryOutputPrinter.java b/src/org/rascalmpl/repl/output/IBinaryOutputPrinter.java new file mode 100644 index 00000000000..01b28a62cf5 --- /dev/null +++ b/src/org/rascalmpl/repl/output/IBinaryOutputPrinter.java @@ -0,0 +1,43 @@ +package org.rascalmpl.repl.output; + + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.io.ByteArrayOutputStream; +import java.io.ByteArrayInputStream; + +/** + * Sometimes, an output produced a binary (such as an image or a executable file) + * In that case, you can return a return an overload of this type, which a renderer can add support for + * + *

+ * For example an output under the image/png would most likely have regular {@link IOutputPrinter#write(java.io.PrintWriter)} that prints a message saying it's a image that can't be printed as text, while the render (if it supports it) can cast it to this interface and get the actual bytes + *

+ */ +public interface IBinaryOutputPrinter extends IOutputPrinter { + /** + * Write bytes to a stream. + * @throws IOException functions on `OutputStream` can cause IOExceptions + */ + + default void write(OutputStream target) throws IOException { + throw new RuntimeException("Write to output stream only supported in case of binary output (such as images)"); + } + + + /** + * Produce bytes that represent the output of a stream, in a streaming/pull style. Will only be called if {@linkplain #isBinary()} is true, the renderer supports it, and the renderer prefers an inputstream to copy from. + * @return an streaming representation of the bytes that makeup the output of the command + */ + default InputStream asInputStream() { + try (var result = new ByteArrayOutputStream()) { + write(result); + return new ByteArrayInputStream(result.toByteArray()); + } + catch (IOException ex) { + throw new IllegalStateException("Write or Close should not have throw an exception", ex); + } + } + +} diff --git a/src/org/rascalmpl/repl/output/ICommandOutput.java b/src/org/rascalmpl/repl/output/ICommandOutput.java new file mode 100644 index 00000000000..55faa539a1e --- /dev/null +++ b/src/org/rascalmpl/repl/output/ICommandOutput.java @@ -0,0 +1,5 @@ +package org.rascalmpl.repl.output; + +public interface ICommandOutput { + IOutputPrinter asPlain(); +} diff --git a/src/org/rascalmpl/repl/output/IErrorCommandOutput.java b/src/org/rascalmpl/repl/output/IErrorCommandOutput.java new file mode 100644 index 00000000000..e79c451a2a1 --- /dev/null +++ b/src/org/rascalmpl/repl/output/IErrorCommandOutput.java @@ -0,0 +1,5 @@ +package org.rascalmpl.repl.output; + +public interface IErrorCommandOutput extends ICommandOutput { + ICommandOutput getError(); +} diff --git a/src/org/rascalmpl/repl/output/IHtmlCommandOutput.java b/src/org/rascalmpl/repl/output/IHtmlCommandOutput.java new file mode 100644 index 00000000000..307e64ef876 --- /dev/null +++ b/src/org/rascalmpl/repl/output/IHtmlCommandOutput.java @@ -0,0 +1,5 @@ +package org.rascalmpl.repl.output; + +public interface IHtmlCommandOutput extends ICommandOutput { + IOutputPrinter asHtml(); +} diff --git a/src/org/rascalmpl/repl/output/IImageCommandOutput.java b/src/org/rascalmpl/repl/output/IImageCommandOutput.java new file mode 100644 index 00000000000..d44fd1888d3 --- /dev/null +++ b/src/org/rascalmpl/repl/output/IImageCommandOutput.java @@ -0,0 +1,6 @@ +package org.rascalmpl.repl.output; + + +public interface IImageCommandOutput extends ICommandOutput { + IBinaryOutputPrinter asImage(); +} diff --git a/src/org/rascalmpl/repl/output/IOutputPrinter.java b/src/org/rascalmpl/repl/output/IOutputPrinter.java new file mode 100644 index 00000000000..83c1b1c0c76 --- /dev/null +++ b/src/org/rascalmpl/repl/output/IOutputPrinter.java @@ -0,0 +1,41 @@ +package org.rascalmpl.repl.output; + +import java.io.IOException; +import java.io.PrintWriter; +import java.io.Reader; +import java.io.StringReader; +import java.io.StringWriter; + +/** + * The output of a REPL command is represented by this class, depending on the consumer (terminal/notebook/webserver) a different function might be called. + */ +public interface IOutputPrinter { + + /** + * Write the output on this print writer interface. It should always print something, even if it's a warning saying it cannot be printed + * @param target where to write the output to. + */ + void write(PrintWriter target); + + String mimeType(); + + /** + * Offer the same output as {@linkplain #write(PrintWriter)} but as a pull based reader. + * The standard implementation takes care to just call the write function with a buffer. + * If you however can provide a streaming reading, override this function instead, depending + * on the consumer, it might be called instead of the write function. + * @return a reader that produces the same contents as the write function, but in a pull style instead of push. + */ + default Reader asReader() { + try (var result = new StringWriter()) { + try (var resultWriter = new PrintWriter(result)) { + write(resultWriter); + } + return new StringReader(result.toString()); + } + catch (IOException ex) { + throw new IllegalStateException("StringWriter close should never throw exception", ex); + } + } + +} diff --git a/src/org/rascalmpl/repl/output/IWebContentOutput.java b/src/org/rascalmpl/repl/output/IWebContentOutput.java new file mode 100644 index 00000000000..3bc8040a11b --- /dev/null +++ b/src/org/rascalmpl/repl/output/IWebContentOutput.java @@ -0,0 +1,9 @@ +package org.rascalmpl.repl.output; + +import java.net.URI; + +public interface IWebContentOutput extends ICommandOutput { + URI webUri(); + String webTitle(); + int webviewColumn(); +} diff --git a/src/org/rascalmpl/repl/output/MimeTypes.java b/src/org/rascalmpl/repl/output/MimeTypes.java new file mode 100644 index 00000000000..fb50edf0970 --- /dev/null +++ b/src/org/rascalmpl/repl/output/MimeTypes.java @@ -0,0 +1,11 @@ +package org.rascalmpl.repl.output; + +public class MimeTypes { + public static final String PLAIN_TEXT = "text/plain"; + public static final String ANSI = "text/x-ansi"; + public static final String HTML = "text/html"; + public static final String PNG = "image/png"; + public static final String JPEG = "image/JPEG"; + public static final String SVG = "image/svg+xml"; + +} diff --git a/src/org/rascalmpl/repl/output/impl/StringOutputPrinter.java b/src/org/rascalmpl/repl/output/impl/StringOutputPrinter.java new file mode 100644 index 00000000000..d3da7b064b9 --- /dev/null +++ b/src/org/rascalmpl/repl/output/impl/StringOutputPrinter.java @@ -0,0 +1,37 @@ +package org.rascalmpl.repl.output.impl; + +import java.io.PrintWriter; +import java.io.Reader; +import java.io.StringReader; + +import org.rascalmpl.repl.output.IOutputPrinter; +import org.rascalmpl.repl.output.MimeTypes; + +public class StringOutputPrinter implements IOutputPrinter { + private final String body; + private final String newline; + + public StringOutputPrinter(String body, String newline) { + this(body, newline, MimeTypes.PLAIN_TEXT); + } + public StringOutputPrinter(String body, String newline, String mimeType) { + this.body = body; + this.newline = newline; + } + + @Override + public String mimeType() { + return mimeType(); + } + + @Override + public void write(PrintWriter target) { + target.print(body); + target.print(newline); + } + + @Override + public Reader asReader() { + return new StringReader(body + newline); + } +} diff --git a/src/org/rascalmpl/shell/RascalShell2.java b/src/org/rascalmpl/shell/RascalShell2.java index fdb0b22cffc..9ad4236e5ca 100644 --- a/src/org/rascalmpl/shell/RascalShell2.java +++ b/src/org/rascalmpl/shell/RascalShell2.java @@ -56,6 +56,7 @@ public static void main(String[] args) throws IOException { var repl = new BaseREPL2(new RascalReplServices((t) -> { var monitor = new TerminalProgressBarMonitor(term); IDEServices services = new BasicIDEServices(term.writer(), monitor, () -> term.puts(Capability.clear_screen)); + GlobalEnvironment heap = new GlobalEnvironment(); ModuleEnvironment root = heap.addModule(new ModuleEnvironment(ModuleEnvironment.SHELL_MODULE, heap)); IValueFactory vf = ValueFactoryFactory.getValueFactory(); @@ -64,101 +65,5 @@ public static void main(String[] args) throws IOException { return evaluator; }), term); repl.run(); - /* - - - //IRascalMonitor monitor = IRascalMonitor.buildConsoleMonitor(System.in, System.out, true); - var monitor = new TerminalProgressBarMonitor(term); - - // var monitor = new NullRascalMonitor() { - // @Override - // public void warning(String message, ISourceLocation src) { - // reader.printAbove("[WARN] " + message); - // } - // }; - - IDEServices services = new BasicIDEServices(term.writer(), monitor); - - - GlobalEnvironment heap = new GlobalEnvironment(); - ModuleEnvironment root = heap.addModule(new ModuleEnvironment(ModuleEnvironment.SHELL_MODULE, heap)); - IValueFactory vf = ValueFactoryFactory.getValueFactory(); - Evaluator evaluator = new Evaluator(vf, term.reader(), new PrintWriter(System.err, true), term.writer(), root, heap, monitor); - evaluator.addRascalSearchPathContributor(StandardLibraryContributor.getInstance()); - - URIResolverRegistry reg = URIResolverRegistry.getInstance(); - - var indentedPrettyPrinter = new ReplTextWriter(true); - - while (true) { - String line = reader.readLine(Ansi.ansi().reset().bold().toString() + "rascal> " + Ansi.ansi().boldOff().toString()); - try { - - Result result; - - synchronized(evaluator) { - result = evaluator.eval(monitor, line, URIUtil.rootLocation("prompt")); - evaluator.endAllJobs(); - } - - if (result.isVoid()) { - monitor.println("ok"); - } - else { - IValue value = result.getValue(); - Type type = result.getStaticType(); - - if (type.isAbstractData() && type.isStrictSubtypeOf(RascalValueFactory.Tree) && !type.isBottom()) { - monitor.write("(" + type.toString() +") `"); - TreeAdapter.yield((IConstructor)value, true, monitor); - monitor.write("`"); - } - else { - indentedPrettyPrinter.write(value, monitor); - } - monitor.println(); - } - } - catch (InterruptException ie) { - reader.printAbove("Interrupted"); - try { - ie.getRascalStackTrace().prettyPrintedString(evaluator.getStdErr(), indentedPrettyPrinter); - } - catch (IOException e) { - } - } - catch (ParseError pe) { - parseErrorMessage(evaluator.getStdErr(), line, "prompt", pe, indentedPrettyPrinter); - } - catch (StaticError e) { - staticErrorMessage(evaluator.getStdErr(),e, indentedPrettyPrinter); - } - catch (Throw e) { - throwMessage(evaluator.getStdErr(),e, indentedPrettyPrinter); - } - catch (QuitException q) { - reader.printAbove("Quiting REPL"); - break; - } - catch (Throwable e) { - throwableMessage(evaluator.getStdErr(), e, evaluator.getStackTrace(), indentedPrettyPrinter); - } - } - System.exit(0); - } - catch (Throwable e) { - System.err.println("\n\nunexpected error: " + e.getMessage()); - e.printStackTrace(System.err); - System.exit(1); - } - finally { - System.out.flush(); - System.err.flush(); - } - */ } - - - - } From 8c0483266f12b338f7a776d446c149cc6ab55a5b Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Wed, 18 Dec 2024 19:16:41 +0100 Subject: [PATCH 082/191] squashing bugs in testing the JSON IO functions --- .../lang/json/internal/JsonValueReader.java | 2 +- .../tests/library/lang/json/JSONIOTests.rsc | 25 ++++++++++++++++--- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java index 872dafc0402..051a4827985 100644 --- a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java +++ b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java @@ -384,7 +384,7 @@ public IValue visitMap(Type type) throws IOException { switch (in.peek()) { case BEGIN_OBJECT: in.beginObject(); - if (!type.getKeyType().isString()) { + if (!type.getKeyType().isString() && in.peek() != JsonToken.END_OBJECT) { throw parseErrorHere("Can not read JSon object as a map if the key type of the map (" + type + ") is not a string at " + in.getPath()); } diff --git a/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc b/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc index 573104f3ca3..d05277067dc 100644 --- a/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc +++ b/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc @@ -6,10 +6,11 @@ import util::UUID; import util::Maybe; import IO; import util::Math; +import Type; loc targetFile = |memory://test-tmp/test-<"">.json|; -bool writeRead(type[&T] returnType, &T dt) { +bool writeRead(type[&T] returnType, &T dt, value (value x) normalizer = value(value x) { return x; }) { dt = visit (dt) { // reals must fit in double case real r => fitDouble(r) @@ -18,7 +19,16 @@ bool writeRead(type[&T] returnType, &T dt) { } json = asJSON(dt); - return parseJSON(returnType, json) == dt; + readBack = parseJSON(returnType, json); + if (readBack !:= normalizer(dt) /* ignores additional src fields */) { + println("What is read back, a :"); + iprintln(readBack); + println("Is different from the original, a :"); + iprintln(normalizer(dt)); + return false; + } + + return true; } // only single constructors supported for now @@ -45,7 +55,12 @@ test bool jsonWithNode1(node dt) = writeRead(#node, dt); test bool jsonWithDATA11(DATA1 dt) = writeRead(#DATA1, dt); test bool jsonWithDATA21(DATA2 dt) = writeRead(#DATA2, dt); -test bool jsonRandom1(value dt) = writeRead(#value, dt); +@synopsis{all values can be written and read again} +@description{ +However sets are always read back in as lists if we don't have +a specific abstract data-type that can enforce sets. +} +test bool jsonRandom1(value dt) = writeRead(#value, dt, normalizer=allContainersToLists); test bool json1() = writeRead(#DATA1, data1(123)); test bool json2() = writeRead(#DATA2, data2("123")); @@ -67,6 +82,10 @@ test bool originTracking() { return true; } +@synopsis{Normalizer used to create lists out of other containers} +value allContainersToLists(set[value] x) = [*x]; +default value allContainersToLists(value x) = x; + test bool accurateParseErrors() { ex = readFile(|std:///lang/rascal/tests/library/lang/json/glossary.json|); broken = ex[..size(ex)/2] + ex[size(ex)/2+10..]; From 91fcd88915e0cf09ec6ddbcaaec429c7d099ef4d Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Wed, 18 Dec 2024 19:47:11 +0100 Subject: [PATCH 083/191] fixed the datetime NYIs and bugs --- src/org/rascalmpl/library/Prelude.java | 4 ++-- src/org/rascalmpl/library/lang/json/IO.rsc | 8 ++++---- .../lang/json/internal/JsonValueWriter.java | 15 ++++++++++++--- 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/src/org/rascalmpl/library/Prelude.java b/src/org/rascalmpl/library/Prelude.java index d873d1e01f3..75f95c58cd6 100644 --- a/src/org/rascalmpl/library/Prelude.java +++ b/src/org/rascalmpl/library/Prelude.java @@ -263,7 +263,7 @@ public IValue incrementDays(IDateTime dt, IInteger n) return incrementDate(dt, Calendar.DAY_OF_MONTH, "days", n); } - private String getTZString(int hourOffset, int minuteOffset) { + public static String getTZString(int hourOffset, int minuteOffset) { String tzString = "GMT" + ((hourOffset < 0 || (0 == hourOffset && minuteOffset < 0)) ? "-" : "+") + String.format("%02d",hourOffset >= 0 ? hourOffset : hourOffset * -1) + @@ -629,7 +629,7 @@ private Calendar getCalendarForTime(IDateTime inputTime) { } } - private Calendar getCalendarForDateTime(IDateTime inputDateTime) { + public static Calendar getCalendarForDateTime(IDateTime inputDateTime) { if (inputDateTime.isDateTime()) { Calendar cal = Calendar.getInstance(TimeZone.getTimeZone(getTZString(inputDateTime.getTimezoneOffsetHours(),inputDateTime.getTimezoneOffsetMinutes())),Locale.getDefault()); cal.setLenient(false); diff --git a/src/org/rascalmpl/library/lang/json/IO.rsc b/src/org/rascalmpl/library/lang/json/IO.rsc index 427c84aee0a..21a6dc55319 100644 --- a/src/org/rascalmpl/library/lang/json/IO.rsc +++ b/src/org/rascalmpl/library/lang/json/IO.rsc @@ -45,7 +45,7 @@ First the expected type is used as a literal lookup, and then each value is test java &T readJSON( type[&T] expected, loc src, - str dateTimeFormat = "yyyy-MM-dd\'T\'HH:mm:ssZZZZZ", + str dateTimeFormat = "yyyy-MM-dd\'T\'HH:mm:ssZ", bool lenient=false, bool trackOrigins=false, JSONParser[value] parser = (type[value] _, str _) { throw ""; }, @@ -74,7 +74,7 @@ In general the translation behaves as the same as for ((readJSON)).} java &T parseJSON( type[&T] expected, str src, - str dateTimeFormat = "yyyy-MM-dd\'T\'HH:mm:ssZZZZZ", + str dateTimeFormat = "yyyy-MM-dd\'T\'HH:mm:ssZ", bool lenient=false, bool trackOrigins=false, JSONParser[value] parser = (type[value] _, str _) { throw ""; }, @@ -106,7 +106,7 @@ For `real` numbers that are larger than JVM's double you get "negative infinity" } java void writeJSON(loc target, value val, bool unpackedLocations=false, - str dateTimeFormat="yyyy-MM-dd\'T\'HH:mm:ssZZZZZ", + str dateTimeFormat="yyyy-MM-dd\'T\'HH:mm:ssZ", bool dateTimeAsInt=false, int indent=0, bool dropOrigins=true, @@ -121,7 +121,7 @@ java void writeJSON(loc target, value val, @description{ This function uses `writeJSON` and stores the result in a string. } -java str asJSON(value val, bool unpackedLocations=false, str dateTimeFormat="yyyy-MM-dd\'T\'HH:mm:ssZZZZZ", bool dateTimeAsInt=false, int indent = 0, bool dropOrigins=true, JSONFormatter[value] formatter = str (value _) { fail; }, bool explicitConstructorNames=false, bool explicitDataTypes=false); +java str asJSON(value val, bool unpackedLocations=false, str dateTimeFormat="yyyy-MM-dd\'T\'HH:mm:ssZ", bool dateTimeAsInt=false, int indent = 0, bool dropOrigins=true, JSONFormatter[value] formatter = str (value _) { fail; }, bool explicitConstructorNames=false, bool explicitDataTypes=false); @synopsis{((writeJSON)) and ((asJSON)) uses `Formatter` functions to flatten structured data to strings, on-demand} @description{ diff --git a/src/org/rascalmpl/library/lang/json/internal/JsonValueWriter.java b/src/org/rascalmpl/library/lang/json/internal/JsonValueWriter.java index df68a130cc3..c60811295b5 100644 --- a/src/org/rascalmpl/library/lang/json/internal/JsonValueWriter.java +++ b/src/org/rascalmpl/library/lang/json/internal/JsonValueWriter.java @@ -13,15 +13,17 @@ package org.rascalmpl.library.lang.json.internal; import java.io.IOException; -import java.text.SimpleDateFormat; import java.util.Map; import java.util.Map.Entry; +import org.rascalmpl.exceptions.RuntimeExceptionFactory; import org.rascalmpl.exceptions.Throw; +import org.rascalmpl.library.Prelude; import org.rascalmpl.values.functions.IFunction; import org.rascalmpl.values.maybe.UtilMaybe; import com.google.gson.stream.JsonWriter; +import com.ibm.icu.text.SimpleDateFormat; import io.usethesource.vallang.IBool; import io.usethesource.vallang.IConstructor; @@ -375,11 +377,18 @@ public Void visitExternal(IExternalValue externalValue) throws IOException { public Void visitDateTime(IDateTime o) throws IOException { if (datesAsInts) { out.value(o.getInstant()); - return null; } else { - throw new IOException("Dates as strings not yet implemented: " + format.get().toPattern()); + try { + com.ibm.icu.text.SimpleDateFormat sd = format.get(); + com.ibm.icu.util.Calendar cal = Prelude.getCalendarForDateTime(o); + sd.setCalendar(cal); + out.value(sd.format(cal.getTime())); + } catch (IllegalArgumentException iae) { + throw RuntimeExceptionFactory.dateTimePrintingError("Cannot print datetime " + o + " using format string: " + format.get()); + } } + return null; } }); } From e5d3b2aa618ba4f2823563596a5e7a4d7272db30 Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Wed, 18 Dec 2024 20:03:10 +0100 Subject: [PATCH 084/191] fixed bugs with tuples and nodes --- .../library/lang/json/internal/JsonValueReader.java | 10 +++++++++- .../library/lang/json/internal/JsonValueWriter.java | 3 +++ .../rascal/tests/library/lang/json/JSONIOTests.rsc | 5 +++++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java index 051a4827985..29d69e808b7 100644 --- a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java +++ b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java @@ -42,6 +42,7 @@ import io.usethesource.vallang.IMapWriter; import io.usethesource.vallang.ISetWriter; import io.usethesource.vallang.ISourceLocation; +import io.usethesource.vallang.IString; import io.usethesource.vallang.IValue; import io.usethesource.vallang.IValueFactory; import io.usethesource.vallang.io.StandardTextReader; @@ -726,9 +727,16 @@ public IValue visitNode(Type type) throws IOException { Map kws = new HashMap<>(); Map args = new HashMap<>(); + String name = "object"; while (in.hasNext()) { String kwName = nextName(); + + if (kwName.equals("_name")) { + name = ((IString) read(in, TF.stringType())).getValue(); + continue; + } + boolean positioned = kwName.startsWith("arg"); if (!isNull()) { // lookahead for null to give default parameters the preference. @@ -761,7 +769,7 @@ public IValue visitNode(Type type) throws IOException { .map(e -> e.getValue()) .toArray(IValue[]::new); - return vf.node("object", argArray, kws); + return vf.node(name, argArray, kws); } @Override diff --git a/src/org/rascalmpl/library/lang/json/internal/JsonValueWriter.java b/src/org/rascalmpl/library/lang/json/internal/JsonValueWriter.java index c60811295b5..49df691818e 100644 --- a/src/org/rascalmpl/library/lang/json/internal/JsonValueWriter.java +++ b/src/org/rascalmpl/library/lang/json/internal/JsonValueWriter.java @@ -226,6 +226,9 @@ public Void visitTuple(ITuple o) throws IOException { @Override public Void visitNode(INode o) throws IOException { out.beginObject(); + out.name("_name"); + out.value(o.getName()); + int i = 0; for (IValue arg : o) { out.name("arg" + i++); diff --git a/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc b/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc index d05277067dc..fdd25198a74 100644 --- a/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc +++ b/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc @@ -84,6 +84,11 @@ test bool originTracking() { @synopsis{Normalizer used to create lists out of other containers} value allContainersToLists(set[value] x) = [*x]; +value allContainersToLists(value tup) = [] when \tuple(_) := typeOf(tup), "" == "\<\>"; +value allContainersToList() = [x]; +value allContainersToList() = [x,y]; +value allContainersToList() = [x,y,z]; + default value allContainersToLists(value x) = x; test bool accurateParseErrors() { From 0f2e79959739c7b9ad129ff97cd94fbb489f59ef Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Thu, 19 Dec 2024 11:23:56 +0100 Subject: [PATCH 085/191] improving tests and fixing bugs --- src/org/rascalmpl/library/lang/json/IO.rsc | 10 ++++---- .../lang/json/internal/JsonValueReader.java | 23 ++++++++++++++++++- .../tests/library/lang/json/JSONIOTests.rsc | 8 +++---- 3 files changed, 32 insertions(+), 9 deletions(-) diff --git a/src/org/rascalmpl/library/lang/json/IO.rsc b/src/org/rascalmpl/library/lang/json/IO.rsc index 21a6dc55319..02ab284e0bf 100644 --- a/src/org/rascalmpl/library/lang/json/IO.rsc +++ b/src/org/rascalmpl/library/lang/json/IO.rsc @@ -25,6 +25,8 @@ import Exception; } data RuntimeException(str cause="", str path=""); +private str DEFAULT_DATETIME_FORMAT = "yyyy-MM-dd\'T\'HH:mm:ssZ"; + @javaClass{org.rascalmpl.library.lang.json.IO} @synopsis{reads JSON values from a stream} @description{ @@ -45,7 +47,7 @@ First the expected type is used as a literal lookup, and then each value is test java &T readJSON( type[&T] expected, loc src, - str dateTimeFormat = "yyyy-MM-dd\'T\'HH:mm:ssZ", + str dateTimeFormat = DEFAULT_DATETIME_FORMAT, bool lenient=false, bool trackOrigins=false, JSONParser[value] parser = (type[value] _, str _) { throw ""; }, @@ -74,7 +76,7 @@ In general the translation behaves as the same as for ((readJSON)).} java &T parseJSON( type[&T] expected, str src, - str dateTimeFormat = "yyyy-MM-dd\'T\'HH:mm:ssZ", + str dateTimeFormat = DEFAULT_DATETIME_FORMAT, bool lenient=false, bool trackOrigins=false, JSONParser[value] parser = (type[value] _, str _) { throw ""; }, @@ -106,7 +108,7 @@ For `real` numbers that are larger than JVM's double you get "negative infinity" } java void writeJSON(loc target, value val, bool unpackedLocations=false, - str dateTimeFormat="yyyy-MM-dd\'T\'HH:mm:ssZ", + str dateTimeFormat=DEFAULT_DATETIME_FORMAT, bool dateTimeAsInt=false, int indent=0, bool dropOrigins=true, @@ -121,7 +123,7 @@ java void writeJSON(loc target, value val, @description{ This function uses `writeJSON` and stores the result in a string. } -java str asJSON(value val, bool unpackedLocations=false, str dateTimeFormat="yyyy-MM-dd\'T\'HH:mm:ssZ", bool dateTimeAsInt=false, int indent = 0, bool dropOrigins=true, JSONFormatter[value] formatter = str (value _) { fail; }, bool explicitConstructorNames=false, bool explicitDataTypes=false); +java str asJSON(value val, bool unpackedLocations=false, str dateTimeFormat=DEFAULT_DATETIME_FORMAT, bool dateTimeAsInt=false, int indent = 0, bool dropOrigins=true, JSONFormatter[value] formatter = str (value _) { fail; }, bool explicitConstructorNames=false, bool explicitDataTypes=false); @synopsis{((writeJSON)) and ((asJSON)) uses `Formatter` functions to flatten structured data to strings, on-demand} @description{ diff --git a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java index 29d69e808b7..eb2ed0f9e28 100644 --- a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java +++ b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java @@ -17,6 +17,7 @@ import java.io.StringReader; import java.lang.invoke.MethodHandles; import java.lang.invoke.VarHandle; +import java.math.RoundingMode; import java.net.URISyntaxException; import java.text.ParseException; import java.text.SimpleDateFormat; @@ -51,6 +52,7 @@ import io.usethesource.vallang.type.TypeFactory; import io.usethesource.vallang.type.TypeStore; +import com.google.common.math.DoubleMath; import com.google.gson.JsonParseException; import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonToken; @@ -774,7 +776,26 @@ public IValue visitNode(Type type) throws IOException { @Override public IValue visitNumber(Type type) throws IOException { - return visitInteger(type); + if (in.peek() == JsonToken.NUMBER) { + double d = in.nextDouble(); + + if (DoubleMath.isMathematicalInteger(d)) { + return vf.integer(DoubleMath.roundToLong(d, RoundingMode.FLOOR)); + } + else { + return vf.real(d); + } + } + else if (in.peek() == JsonToken.STRING) { + var num = in.nextString(); + + if (num.contains("r")) { + var parts = num.split("r"); + return vf.rational(vf.integer(parts[0]),vf.integer(parts[1])); + } + } + + throw parseErrorHere("unexpected kind of number"); } @Override diff --git a/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc b/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc index fdd25198a74..85571ea4b05 100644 --- a/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc +++ b/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc @@ -50,7 +50,7 @@ test bool jsonWithDatetime1(datetime dt) = writeRead(#datetime, dt); test bool jsonWithList1(list[int] dt) = writeRead(#list[int], dt); test bool jsonWithSet1(set[int] dt) = writeRead(#set[int], dt); test bool jsonWithMap1(map[int, int] dt) = writeRead(#map[int,int], dt); -test bool jsonWithNode1(node dt) = writeRead(#node, dt); +test bool jsonWithNode1(node dt) = writeRead(#node, dt, normalizer = allContainersToLists); test bool jsonWithDATA11(DATA1 dt) = writeRead(#DATA1, dt); test bool jsonWithDATA21(DATA2 dt) = writeRead(#DATA2, dt); @@ -85,9 +85,9 @@ test bool originTracking() { @synopsis{Normalizer used to create lists out of other containers} value allContainersToLists(set[value] x) = [*x]; value allContainersToLists(value tup) = [] when \tuple(_) := typeOf(tup), "" == "\<\>"; -value allContainersToList() = [x]; -value allContainersToList() = [x,y]; -value allContainersToList() = [x,y,z]; +value allContainersToLists() = [x]; +value allContainersToLists() = [x,y]; +value allContainersToLists() = [x,y,z]; default value allContainersToLists(value x) = x; From d793d685a4de70427449eb28bd93cd036a5655ac Mon Sep 17 00:00:00 2001 From: Davy Landman Date: Thu, 19 Dec 2024 12:37:07 +0100 Subject: [PATCH 086/191] Working on support for the parametric repl and compiler --- .../rascalmpl/ideservices/IDEServices.java | 11 +- src/org/rascalmpl/repl/BaseREPL2.java | 2 - .../rascalmpl/repl/RascalReplServices.java | 477 ------------------ .../repl/output/impl/StringOutputPrinter.java | 14 +- .../{ => parametric}/ILanguageProtocol.java | 0 .../repl/rascal/IRascalLanguageProtocol.java | 101 ++++ .../repl/rascal/RascalInterpreterREPL.java | 179 +++++++ .../repl/rascal/RascalReplServices.java | 148 ++++++ .../repl/rascal/RascalValuePrinter.java | 297 +++++++++++ .../semantics/dynamic/ShellCommand.java | 11 +- src/org/rascalmpl/shell/RascalShell2.java | 6 +- 11 files changed, 753 insertions(+), 493 deletions(-) delete mode 100644 src/org/rascalmpl/repl/RascalReplServices.java rename src/org/rascalmpl/repl/{ => parametric}/ILanguageProtocol.java (100%) mode change 100755 => 100644 create mode 100644 src/org/rascalmpl/repl/rascal/IRascalLanguageProtocol.java create mode 100644 src/org/rascalmpl/repl/rascal/RascalInterpreterREPL.java create mode 100644 src/org/rascalmpl/repl/rascal/RascalReplServices.java create mode 100644 src/org/rascalmpl/repl/rascal/RascalValuePrinter.java diff --git a/src/org/rascalmpl/ideservices/IDEServices.java b/src/org/rascalmpl/ideservices/IDEServices.java index 10ed5c843fb..e85d06c4deb 100644 --- a/src/org/rascalmpl/ideservices/IDEServices.java +++ b/src/org/rascalmpl/ideservices/IDEServices.java @@ -15,6 +15,7 @@ import java.io.PrintWriter; import java.net.URI; +import org.jline.terminal.Terminal; import org.rascalmpl.debug.IRascalMonitor; import org.rascalmpl.uri.LogicalMapResolver; import org.rascalmpl.uri.URIResolverRegistry; @@ -73,8 +74,14 @@ default void unregisterLanguage(IConstructor language) { throw new UnsupportedOperationException("registerLanguage is not implemented in this environment."); } - default void clearRepl() { - throw new UnsupportedOperationException("Clear REPL is not supported in this IDE Service"); + /** + * Get access to the current terminal.
+ * used for features such as clearing the terminal, and starting a nested REPL.
+ * Can return null if there is no active terminal. + * @return a terminal if there is one, null otherwise. + */ + default Terminal activeTerminal() { + return null; } /** diff --git a/src/org/rascalmpl/repl/BaseREPL2.java b/src/org/rascalmpl/repl/BaseREPL2.java index 40601313998..1975fe8bbe4 100644 --- a/src/org/rascalmpl/repl/BaseREPL2.java +++ b/src/org/rascalmpl/repl/BaseREPL2.java @@ -3,7 +3,6 @@ import java.io.IOException; import java.io.PrintWriter; import java.util.Arrays; -import java.util.HashMap; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicReference; @@ -23,7 +22,6 @@ import org.rascalmpl.repl.output.ICommandOutput; import org.rascalmpl.repl.output.IErrorCommandOutput; import org.rascalmpl.repl.output.IOutputPrinter; -import org.rascalmpl.repl.output.impl.StringOutputPrinter; public class BaseREPL2 { diff --git a/src/org/rascalmpl/repl/RascalReplServices.java b/src/org/rascalmpl/repl/RascalReplServices.java deleted file mode 100644 index a2d036d0d60..00000000000 --- a/src/org/rascalmpl/repl/RascalReplServices.java +++ /dev/null @@ -1,477 +0,0 @@ -package org.rascalmpl.repl; - -import static org.rascalmpl.interpreter.utils.ReadEvalPrintDialogMessages.parseErrorMessage; -import static org.rascalmpl.interpreter.utils.ReadEvalPrintDialogMessages.staticErrorMessage; -import static org.rascalmpl.interpreter.utils.ReadEvalPrintDialogMessages.throwMessage; -import static org.rascalmpl.interpreter.utils.ReadEvalPrintDialogMessages.throwableMessage; - -import java.io.IOException; -import java.io.PrintWriter; -import java.io.Writer; -import java.net.URI; -import java.net.URISyntaxException; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.NavigableMap; -import java.util.Objects; -import java.util.TreeMap; -import java.util.function.Function; - -import org.jline.jansi.Ansi; -import org.jline.reader.Completer; -import org.jline.reader.EndOfFileException; -import org.jline.reader.Parser; -import org.jline.terminal.Terminal; -import org.jline.utils.InfoCmp.Capability; -import org.rascalmpl.exceptions.Throw; -import org.rascalmpl.interpreter.Configuration; -import org.rascalmpl.interpreter.Evaluator; -import org.rascalmpl.interpreter.NullRascalMonitor; -import org.rascalmpl.interpreter.control_exceptions.InterruptException; -import org.rascalmpl.interpreter.control_exceptions.QuitException; -import org.rascalmpl.interpreter.result.IRascalResult; -import org.rascalmpl.interpreter.result.Result; -import org.rascalmpl.interpreter.staticErrors.StaticError; -import org.rascalmpl.parser.gtd.exception.ParseError; -import org.rascalmpl.repl.completers.RascalCommandCompletion; -import org.rascalmpl.repl.completers.RascalIdentifierCompletion; -import org.rascalmpl.repl.completers.RascalKeywordCompletion; -import org.rascalmpl.repl.completers.RascalLocationCompletion; -import org.rascalmpl.repl.completers.RascalModuleCompletion; -import org.rascalmpl.repl.http.REPLContentServer; -import org.rascalmpl.repl.http.REPLContentServerManager; -import org.rascalmpl.repl.jline3.RascalLineParser; -import org.rascalmpl.repl.output.IAnsiCommandOutput; -import org.rascalmpl.repl.output.ICommandOutput; -import org.rascalmpl.repl.output.IErrorCommandOutput; -import org.rascalmpl.repl.output.IHtmlCommandOutput; -import org.rascalmpl.repl.output.IOutputPrinter; -import org.rascalmpl.repl.output.IWebContentOutput; -import org.rascalmpl.repl.output.MimeTypes; -import org.rascalmpl.repl.output.impl.StringOutputPrinter; -import org.rascalmpl.repl.streams.ItalicErrorWriter; -import org.rascalmpl.repl.streams.LimitedLineWriter; -import org.rascalmpl.repl.streams.LimitedWriter; -import org.rascalmpl.repl.streams.RedErrorWriter; -import org.rascalmpl.repl.streams.ReplTextWriter; -import org.rascalmpl.uri.URIUtil; -import org.rascalmpl.values.RascalValueFactory; -import org.rascalmpl.values.functions.IFunction; -import org.rascalmpl.values.parsetrees.TreeAdapter; - -import io.usethesource.vallang.IConstructor; -import io.usethesource.vallang.IInteger; -import io.usethesource.vallang.ISourceLocation; -import io.usethesource.vallang.IString; -import io.usethesource.vallang.IValue; -import io.usethesource.vallang.IWithKeywordParameters; -import io.usethesource.vallang.io.StandardTextWriter; -import io.usethesource.vallang.type.Type; - -public class RascalReplServices implements IREPLService { - private final Function buildEvaluator; - private Evaluator eval; - private final REPLContentServerManager contentManager = new REPLContentServerManager(); - private static final StandardTextWriter ansiIndentedPrinter = new ReplTextWriter(true); - private static final StandardTextWriter plainIndentedPrinter = new StandardTextWriter(true); - private final static int LINE_LIMIT = 200; - private final static int CHAR_LIMIT = LINE_LIMIT * 20; - private String newline = System.lineSeparator(); - - - - public RascalReplServices(Function buildEvaluator) { - super(); - this.buildEvaluator = buildEvaluator; - } - - @Override - public void connect(Terminal term) { - if (eval != null) { - throw new IllegalStateException("REPL is already initialized"); - } - newline = term.getStringCapability(Capability.newline); - if (newline == null) { - newline = System.lineSeparator(); - } - this.eval = buildEvaluator.apply(term); - } - - public static PrintWriter generateErrorStream(Terminal tm, Writer out) { - // previously we would alway write errors to System.err, but that tends to mess up terminals - // and also our own error print - // so now we try to not write to System.err - if (supportsColors(tm)) { - return new PrintWriter(new RedErrorWriter(out), true); - } - if (supportsItalic(tm)) { - return new PrintWriter(new ItalicErrorWriter(out), true); - } - return new PrintWriter(System.err, true); - - } - - private static boolean supportsColors(Terminal tm) { - Integer cols = tm.getNumericCapability(Capability.max_colors); - return cols != null && cols >= 8; - } - - private static boolean supportsItalic(Terminal tm) { - String ital = tm.getStringCapability(Capability.enter_italics_mode); - return ital != null && !ital.equals(""); - } - - - private static final ISourceLocation PROMPT_LOCATION = URIUtil.rootLocation("prompt"); - - @Override - public Parser inputParser() { - return new RascalLineParser(prompt -> { - synchronized(eval) { - return eval.parseCommand(new NullRascalMonitor(), prompt, PROMPT_LOCATION); - } - }); - } - - @Override - public ICommandOutput handleInput(String input) throws InterruptedException { - synchronized(eval) { - Objects.requireNonNull(eval, "Not initialized yet"); - try { - Result value = eval.eval(eval.getMonitor(), input, URIUtil.rootLocation("prompt")); - return outputResult(value); - } - catch (InterruptException ex) { - return reportError((w, sw) -> { - w.println("Interrupted"); - ex.getRascalStackTrace().prettyPrintedString(w, sw); - }); - } - catch (ParseError pe) { - return reportError((w, sw) -> { - parseErrorMessage(w, input, "prompt", pe, sw); - }); - } - catch (StaticError e) { - return reportError((w, sw) -> { - staticErrorMessage(w, e, sw); - }); - } - catch (Throw e) { - return reportError((w, sw) -> { - throwMessage(w,e, sw); - }); - } - catch (QuitException q) { - throw new EndOfFileException("Quiting REPL"); - /* - return reportError((w, sw) -> { - w.println("Quiting REPL"); - }); - */ - } - catch (Throwable e) { - return reportError((w, sw) -> { - throwableMessage(w, e, eval.getStackTrace(), sw); - }); - } - } - } - - private ICommandOutput outputResult(IRascalResult result) { - if (result == null || result.getValue() == null) { - return () -> new StringOutputPrinter("ok", newline, MimeTypes.PLAIN_TEXT); - } - IValue value = result.getValue(); - Type type = result.getStaticType(); - - if (type.isSubtypeOf(RascalValueFactory.Content) && !type.isBottom()) { - return serveContent((IConstructor)value); - } - - ThrowingWriter resultWriter; - if (type.isAbstractData() && type.isStrictSubtypeOf(RascalValueFactory.Tree) && !type.isBottom()) { - resultWriter = (w, sw) -> { - w.write("(" + type.toString() +") `"); - TreeAdapter.yield((IConstructor)value, sw == ansiIndentedPrinter, w); - w.write("`"); - }; - } - else if (type.isString()) { - resultWriter = (w, sw) -> { - // TODO: do something special for the reader version of IString, when that is released - // for now, we only support write - - try (Writer wrt = new LimitedWriter(new LimitedLineWriter(w, LINE_LIMIT), CHAR_LIMIT)) { - sw.write(value, wrt); - } - catch (/*IOLimitReachedException*/ RuntimeException e) { - // ignore since this is what we wanted - // if we catch IOLimitReachedException we get an IllegalArgument exception instead - // "Self-suppression not permitted" - } - w.println(); - w.println("---"); - try (Writer wrt = new LimitedWriter(new LimitedLineWriter(w, LINE_LIMIT), CHAR_LIMIT)) { - ((IString) value).write(wrt); - } - catch (/*IOLimitReachedException*/ RuntimeException e) { - // ignore since this is what we wanted - // if we catch IOLimitReachedException we get an IllegalArgument exception instead - // "Self-suppression not permitted" - } - w.println(); - w.print("---"); - }; - } - else { - resultWriter = (w, sw) -> { - try (Writer wrt = new LimitedWriter(new LimitedLineWriter(w, LINE_LIMIT), CHAR_LIMIT)) { - sw.write(value, wrt); - } - catch (/*IOLimitReachedException*/ RuntimeException e) { - // ignore since this is what we wanted - // if we catch IOLimitReachedException we get an IllegalArgument exception instead - // "Self-suppression not permitted" - } - }; - } - - ThrowingWriter typePrefixed = (w, sw) -> { - w.write(type.toString()); - w.write(": "); - resultWriter.write(w, sw); - w.println(); - }; - - return new DoubleOutput(typePrefixed); - } - - private static class DoubleOutput implements IAnsiCommandOutput { - private ThrowingWriter writer; - - DoubleOutput(ThrowingWriter writer) { - this.writer = writer; - } - - @Override - public IOutputPrinter asAnsi() { - return new ParameterizedPrinterOutput(writer, ansiIndentedPrinter, MimeTypes.ANSI); - } - - @Override - public IOutputPrinter asPlain() { - return new ParameterizedPrinterOutput(writer, plainIndentedPrinter, MimeTypes.PLAIN_TEXT); - } - } - - private Function addEvalLock(IFunction func) { - return a -> { - synchronized(eval) { - return func.call(a); - } - }; - } - - private ICommandOutput serveContent(IConstructor provider) { - String id; - Function target; - - if (provider.has("id")) { - id = ((IString) provider.get("id")).getValue(); - target = addEvalLock(((IFunction) provider.get("callback"))); - } - else { - id = "*static content*"; - target = (r) -> provider.get("response"); - } - - try { - // this installs the provider such that subsequent requests are handled. - REPLContentServer server = contentManager.addServer(id, target); - - // now we need some HTML to show - - IWithKeywordParameters kp = provider.asWithKeywordParameters(); - String title = kp.hasParameter("title") ? ((IString) kp.getParameter("title")).getValue() : id; - int viewColumn = kp.hasParameter("viewColumn") ? ((IInteger)kp.getParameter("viewColumn")).intValue() : 1; - URI serverUri = new URI("http", null, "localhost", server.getListeningPort(), "/", null, null); - - return new HostedWebContentOutput(id, serverUri, title, viewColumn); - - } - catch (IOException e) { - return reportError((w, sw) -> { - w.println("Could not start webserver to render html content: "); - w.println(e.getMessage()); - }); - } - catch (URISyntaxException e) { - return reportError((w, sw) -> { - w.println("Could not start build the uri: "); - w.println(e.getMessage()); - }); - } - } - - private class HostedWebContentOutput implements IWebContentOutput, IHtmlCommandOutput { - private final String id; - private final URI uri; - private final String title; - private final int viewColumn; - - HostedWebContentOutput(String id, URI uri, String title, int viewColumn) { - this.id = id; - this.uri = uri; - this.title = title; - this.viewColumn = viewColumn; - } - - @Override - public IOutputPrinter asPlain() { - return new StringOutputPrinter("Serving \'" + id + "\' at |" + uri + "|", newline, MimeTypes.PLAIN_TEXT); - } - - @Override - public IOutputPrinter asHtml() { - return new StringOutputPrinter( - "", - newline, MimeTypes.HTML - ); - } - - @Override - public URI webUri() { - return uri; - } - - @Override - public String webTitle() { - return title; - } - - @Override - public int webviewColumn() { - return viewColumn; - } - } - - private static IErrorCommandOutput reportError(ThrowingWriter writer) { - return new IErrorCommandOutput() { - @Override - public ICommandOutput getError() { - return new DoubleOutput(writer); - } - - @Override - public IOutputPrinter asPlain() { - return new ParameterizedPrinterOutput(writer, plainIndentedPrinter, MimeTypes.PLAIN_TEXT); - } - }; - } - - @FunctionalInterface - private static interface ThrowingWriter { - void write(PrintWriter writer, StandardTextWriter prettyPrinter) throws IOException; - } - - private static class ParameterizedPrinterOutput implements IOutputPrinter { - private final ThrowingWriter internalWriter; - private final StandardTextWriter prettyPrinter; - private final String mimeType; - - public ParameterizedPrinterOutput(ThrowingWriter internalWriter, StandardTextWriter prettyPrinter, String mimeType) { - this.internalWriter = internalWriter; - this.prettyPrinter = prettyPrinter; - this.mimeType = mimeType; - } - - @Override - public String mimeType() { - return mimeType; - } - - @Override - public void write(PrintWriter target) { - try { - internalWriter.write(target, prettyPrinter); - } - catch (IOException e) { - target.println("Internal failure: printing exception failed with:"); - target.println(e.toString()); - e.printStackTrace(target); - } - } - } - - @Override - public void handleInterrupt() throws InterruptedException { - eval.interrupt(); - } - - @Override - public String prompt(boolean ansiColorsSupported, boolean unicodeSupported) { - if (ansiColorsSupported) { - return Ansi.ansi().reset().bold() + "rascal>" + Ansi.ansi().reset(); - } - return "rascal>"; - } - - @Override - public String parseErrorPrompt(boolean ansiColorsSupported, boolean unicodeSupported) { - String errorPrompt = (unicodeSupported ? "│" : "|") + "%N %P>"; - if (ansiColorsSupported) { - return Ansi.ansi().reset().bold() + errorPrompt + Ansi.ansi().reset(); - } - return errorPrompt; - } - - - @Override - public PrintWriter errorWriter() { - return eval.getStdErr(); - } - - @Override - public PrintWriter outputWriter() { - return eval.getStdOut(); - } - - @Override - public void flush() { - eval.getStdErr().flush(); - eval.getStdOut().flush(); - } - - private static final NavigableMap commandLineOptions = new TreeMap<>(); - static { - commandLineOptions.put(Configuration.GENERATOR_PROFILING_PROPERTY.substring("rascal.".length()), "enable sampling profiler for generator"); - commandLineOptions.put(Configuration.PROFILING_PROPERTY.substring("rascal.".length()), "enable sampling profiler" ); - commandLineOptions.put(Configuration.ERRORS_PROPERTY.substring("rascal.".length()), "print raw java errors"); - commandLineOptions.put(Configuration.TRACING_PROPERTY.substring("rascal.".length()), "trace all function calls (warning: a lot of output will be generated)"); - } - - @Override - public boolean supportsCompletion() { - return true; - } - - @Override - public List completers() { - var result = new ArrayList(); - var moduleCompleter = new RascalModuleCompletion(m -> eval.getRascalResolver().listModuleEntries(m)); - var idCompleter = new RascalIdentifierCompletion((q, i) -> eval.completePartialIdentifier(q, i)); - result.add(new RascalCommandCompletion( - commandLineOptions, - idCompleter::completePartialIdentifier, - (s, c) -> moduleCompleter.completeModuleNames(s, c, false) - )); - result.add(moduleCompleter); - result.add(idCompleter); - result.add(new RascalKeywordCompletion()); - result.add(new RascalLocationCompletion()); - return result; - } - -} diff --git a/src/org/rascalmpl/repl/output/impl/StringOutputPrinter.java b/src/org/rascalmpl/repl/output/impl/StringOutputPrinter.java index d3da7b064b9..5d856462d8d 100644 --- a/src/org/rascalmpl/repl/output/impl/StringOutputPrinter.java +++ b/src/org/rascalmpl/repl/output/impl/StringOutputPrinter.java @@ -9,14 +9,13 @@ public class StringOutputPrinter implements IOutputPrinter { private final String body; - private final String newline; + - public StringOutputPrinter(String body, String newline) { - this(body, newline, MimeTypes.PLAIN_TEXT); + public StringOutputPrinter(String body) { + this(body, MimeTypes.PLAIN_TEXT); } - public StringOutputPrinter(String body, String newline, String mimeType) { + public StringOutputPrinter(String body, String mimeType) { this.body = body; - this.newline = newline; } @Override @@ -26,12 +25,11 @@ public String mimeType() { @Override public void write(PrintWriter target) { - target.print(body); - target.print(newline); + target.println(body); } @Override public Reader asReader() { - return new StringReader(body + newline); + return new StringReader(body + System.lineSeparator()); } } diff --git a/src/org/rascalmpl/repl/ILanguageProtocol.java b/src/org/rascalmpl/repl/parametric/ILanguageProtocol.java old mode 100755 new mode 100644 similarity index 100% rename from src/org/rascalmpl/repl/ILanguageProtocol.java rename to src/org/rascalmpl/repl/parametric/ILanguageProtocol.java diff --git a/src/org/rascalmpl/repl/rascal/IRascalLanguageProtocol.java b/src/org/rascalmpl/repl/rascal/IRascalLanguageProtocol.java new file mode 100644 index 00000000000..fc8c1609bef --- /dev/null +++ b/src/org/rascalmpl/repl/rascal/IRascalLanguageProtocol.java @@ -0,0 +1,101 @@ +/** + * Copyright (c) 2017, Jurgen J. Vinju, Mauricio Verano, Centrum Wiskunde & Informatica (CWI) All + * rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are permitted + * provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions + * and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other materials provided with + * the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY + * WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package org.rascalmpl.repl.rascal; + +import java.io.PrintWriter; +import java.io.Reader; +import java.util.List; +import java.util.Map; + +import org.rascalmpl.debug.IRascalMonitor; +import org.rascalmpl.ideservices.IDEServices; +import org.rascalmpl.repl.output.ICommandOutput; +import org.rascalmpl.values.parsetrees.ITree; + + +public interface IRascalLanguageProtocol { + + + IDEServices buildIDEService(PrintWriter err, IRascalMonitor monitor); + + /** + * During the constructor call initialize is called after the REPL is setup enough to have a stdout and std err to write to. + * @param stdout the output stream to write normal output to. + * @param stderr the error stream to write error messages on, depending on the environment and options passed, will print in red. + */ + void initialize(Reader input, PrintWriter stdout, PrintWriter stderr, IDEServices services); + + + /** + * Try and parse a command, it's used for the REPL to decide if the command is complete + * @param command + * @return + */ + ITree parseCommand(String command); + + /** + * After a command has succesfully parsed, this function is called to execute the command + * @param command command entered. + * @throws InterruptedException throw this exception to stop the REPL (instead of calling .stop()) + */ + ICommandOutput handleInput(String command) throws InterruptedException; + + /** + * This method gets called from another thread, and indicates the user pressed CTLR-C during a call to handleInput. + * + * Interrupt the handleInput code as soon as possible, but leave stuff in a valid state. + */ + void cancelRunningCommandRequested(); + + /** + * This method gets called from another thread, indicates a user pressed CTRL+\ during a call to handleInput. + * + * If possible, print the current stack trace. + */ + void stackTraceRequested(); + + + void flush(); + + /** + * Lookup modules that have a certain path prefix (for example util) + * @param modulePrefix a module prefix, can be empty, or contain a full subdirectory path like util + * @return A list of direct siblings of the prefix, either a single module, or a sub directory. It should not be fully qualified, so for the util request it should return Reflective not util::Reflective and directories should be returned as: sub:: + */ + List lookupModules(String modulePrefix); + + /** + * complete identifiers + * @param qualifier optionally empty qualitifer (for example IO::) + * @param partial part to be completed (for example pri) + * @return map from identifiers to their category (used for grouping in the REPL) + */ + Map completePartialIdentifier(String qualifier, String partial); + + /** + * which :set options are available on the repl + * @return map from command line option to description of it + */ + Map availableCommandLineOptions(); +} diff --git a/src/org/rascalmpl/repl/rascal/RascalInterpreterREPL.java b/src/org/rascalmpl/repl/rascal/RascalInterpreterREPL.java new file mode 100644 index 00000000000..89db5caeac7 --- /dev/null +++ b/src/org/rascalmpl/repl/rascal/RascalInterpreterREPL.java @@ -0,0 +1,179 @@ +package org.rascalmpl.repl.rascal; + + +import static org.rascalmpl.interpreter.utils.ReadEvalPrintDialogMessages.parseErrorMessage; +import static org.rascalmpl.interpreter.utils.ReadEvalPrintDialogMessages.staticErrorMessage; +import static org.rascalmpl.interpreter.utils.ReadEvalPrintDialogMessages.throwMessage; +import static org.rascalmpl.interpreter.utils.ReadEvalPrintDialogMessages.throwableMessage; + +import java.io.PrintWriter; +import java.io.Reader; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.function.Function; +import java.util.HashMap; + +import org.jline.reader.EndOfFileException; +import org.rascalmpl.debug.IRascalMonitor; +import org.rascalmpl.exceptions.Throw; +import org.rascalmpl.ideservices.BasicIDEServices; +import org.rascalmpl.ideservices.IDEServices; +import org.rascalmpl.interpreter.Configuration; +import org.rascalmpl.interpreter.Evaluator; +import org.rascalmpl.interpreter.NullRascalMonitor; +import org.rascalmpl.interpreter.control_exceptions.InterruptException; +import org.rascalmpl.interpreter.control_exceptions.QuitException; +import org.rascalmpl.interpreter.env.GlobalEnvironment; +import org.rascalmpl.interpreter.env.ModuleEnvironment; +import org.rascalmpl.interpreter.load.StandardLibraryContributor; +import org.rascalmpl.interpreter.result.Result; +import org.rascalmpl.interpreter.staticErrors.StaticError; +import org.rascalmpl.parser.gtd.exception.ParseError; +import org.rascalmpl.repl.output.ICommandOutput; +import org.rascalmpl.uri.URIUtil; +import org.rascalmpl.values.ValueFactoryFactory; +import org.rascalmpl.values.functions.IFunction; +import org.rascalmpl.values.parsetrees.ITree; + +import io.usethesource.vallang.ISourceLocation; +import io.usethesource.vallang.IValue; +import io.usethesource.vallang.IValueFactory; + +public abstract class RascalInterpreterREPL implements IRascalLanguageProtocol { + private Evaluator eval; + + private final RascalValuePrinter printer; + + private static final ISourceLocation PROMPT_LOCATION = URIUtil.rootLocation("prompt"); + + @Override + public ITree parseCommand(String command) { + Objects.requireNonNull(eval, "Not initialized yet"); + synchronized(eval) { + return eval.parseCommand(new NullRascalMonitor(), command, PROMPT_LOCATION); + } + } + + public RascalInterpreterREPL() { + this.printer = new RascalValuePrinter() { + @Override + protected Function liftProviderFunction(IFunction func) { + return v -> { + Objects.requireNonNull(eval, "Not initialized yet"); + synchronized(eval) { + return func.call(v); + } + }; + } + }; + } + + @Override + public IDEServices buildIDEService(PrintWriter err, IRascalMonitor monitor) { + return new BasicIDEServices(err, monitor); + } + + /** + * You might want to override this function for different cases of where we're building a REPL + * @param input + * @param stdout + * @param stderr + * @param monitor + * @param services + * @return + */ + protected Evaluator buildEvaluator(Reader input, PrintWriter stdout, PrintWriter stderr, IDEServices services) { + GlobalEnvironment heap = new GlobalEnvironment(); + ModuleEnvironment root = heap.addModule(new ModuleEnvironment(ModuleEnvironment.SHELL_MODULE, heap)); + IValueFactory vf = ValueFactoryFactory.getValueFactory(); + Evaluator evaluator = new Evaluator(vf, input, stderr, stdout, root, heap, services); + evaluator.addRascalSearchPathContributor(StandardLibraryContributor.getInstance()); + return evaluator; + } + + @Override + public void initialize(Reader input, PrintWriter stdout, PrintWriter stderr, IDEServices services) { + if (eval != null) { + throw new IllegalStateException("Already initialized"); + } + eval = buildEvaluator(input, stdout, stderr, services); + } + + + @Override + public ICommandOutput handleInput(String command) throws InterruptedException { + Objects.requireNonNull(eval, "Not initialized yet"); + synchronized(eval) { + try { + Result value = eval.eval(eval.getMonitor(), command, PROMPT_LOCATION); + return printer.outputResult(value); + } + catch (InterruptException ex) { + return printer.outputError((w, sw) -> { + w.println("Interrupted"); + ex.getRascalStackTrace().prettyPrintedString(w, sw); + }); + } + catch (ParseError pe) { + return printer.outputError((w, sw) -> { + parseErrorMessage(w, command, "prompt", pe, sw); + }); + } + catch (StaticError e) { + return printer.outputError((w, sw) -> { + staticErrorMessage(w, e, sw); + }); + } + catch (Throw e) { + return printer.outputError((w, sw) -> { + throwMessage(w,e, sw); + }); + } + catch (QuitException q) { + throw new EndOfFileException("Quiting REPL"); + } + catch (Throwable e) { + return printer.outputError((w, sw) -> { + throwableMessage(w, e, eval.getStackTrace(), sw); + }); + } + } + } + + @Override + public void cancelRunningCommandRequested() { + Objects.requireNonNull(eval, "Not initialized yet"); + eval.interrupt(); + eval.endAllJobs(); + } + + @Override + public void stackTraceRequested() { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'stackTraceRequested'"); + } + + @Override + public List lookupModules(String modulePrefix) { + Objects.requireNonNull(eval, "Not initialized yet"); + return eval.getRascalResolver().listModuleEntries(modulePrefix); + } + + @Override + public Map completePartialIdentifier(String qualifier, String partial) { + Objects.requireNonNull(eval, "Not initialized yet"); + return eval.completePartialIdentifier(qualifier, partial); + } + + @Override + public Map availableCommandLineOptions() { + var commandLineOptions = new HashMap(); + commandLineOptions.put(Configuration.GENERATOR_PROFILING_PROPERTY.substring("rascal.".length()), "enable sampling profiler for generator"); + commandLineOptions.put(Configuration.PROFILING_PROPERTY.substring("rascal.".length()), "enable sampling profiler" ); + commandLineOptions.put(Configuration.ERRORS_PROPERTY.substring("rascal.".length()), "print raw java errors"); + commandLineOptions.put(Configuration.TRACING_PROPERTY.substring("rascal.".length()), "trace all function calls (warning: a lot of output will be generated)"); + return commandLineOptions; + } + +} diff --git a/src/org/rascalmpl/repl/rascal/RascalReplServices.java b/src/org/rascalmpl/repl/rascal/RascalReplServices.java new file mode 100644 index 00000000000..b3299a393e1 --- /dev/null +++ b/src/org/rascalmpl/repl/rascal/RascalReplServices.java @@ -0,0 +1,148 @@ +package org.rascalmpl.repl.rascal; + +import java.io.PrintWriter; +import java.io.Writer; +import java.util.ArrayList; +import java.util.List; +import java.util.TreeMap; + +import org.jline.jansi.Ansi; +import org.jline.reader.Completer; +import org.jline.reader.Parser; +import org.jline.terminal.Terminal; +import org.jline.utils.InfoCmp.Capability; +import org.rascalmpl.repl.IREPLService; +import org.rascalmpl.repl.TerminalProgressBarMonitor; +import org.rascalmpl.repl.completers.RascalCommandCompletion; +import org.rascalmpl.repl.completers.RascalIdentifierCompletion; +import org.rascalmpl.repl.completers.RascalKeywordCompletion; +import org.rascalmpl.repl.completers.RascalLocationCompletion; +import org.rascalmpl.repl.completers.RascalModuleCompletion; +import org.rascalmpl.repl.jline3.RascalLineParser; +import org.rascalmpl.repl.output.ICommandOutput; +import org.rascalmpl.repl.streams.ItalicErrorWriter; +import org.rascalmpl.repl.streams.RedErrorWriter; + +public class RascalReplServices implements IREPLService { + private final IRascalLanguageProtocol lang; + + private PrintWriter out; + private PrintWriter err; + + public RascalReplServices(IRascalLanguageProtocol lang) { + this.lang= lang; + } + + @Override + public void connect(Terminal term) { + if (out != null) { + throw new IllegalStateException("Repl Service is already initialized"); + } + var monitor = new TerminalProgressBarMonitor(term); + out = monitor; + err = generateErrorStream(term, monitor); + var service = lang.buildIDEService(err, monitor); + + lang.initialize(term.reader(), out, err, service); + } + + + + private static PrintWriter generateErrorStream(Terminal tm, Writer out) { + // previously we would alway write errors to System.err, but that tends to mess up terminals + // and also our own error print + // so now we try to not write to System.err + if (supportsColors(tm)) { + return new PrintWriter(new RedErrorWriter(out), true); + } + if (supportsItalic(tm)) { + return new PrintWriter(new ItalicErrorWriter(out), true); + } + return new PrintWriter(System.err, true); + + } + + private static boolean supportsColors(Terminal tm) { + Integer cols = tm.getNumericCapability(Capability.max_colors); + return cols != null && cols >= 8; + } + + private static boolean supportsItalic(Terminal tm) { + String ital = tm.getStringCapability(Capability.enter_italics_mode); + return ital != null && !ital.equals(""); + } + + @Override + public Parser inputParser() { + return new RascalLineParser(lang::parseCommand); + } + + @Override + public ICommandOutput handleInput(String input) throws InterruptedException { + return lang.handleInput(input); + } + + + @Override + public void handleInterrupt() throws InterruptedException { + lang.cancelRunningCommandRequested(); + } + + @Override + public String prompt(boolean ansiColorsSupported, boolean unicodeSupported) { + if (ansiColorsSupported) { + return Ansi.ansi().reset().bold() + "rascal>" + Ansi.ansi().reset(); + } + return "rascal>"; + } + + @Override + public String parseErrorPrompt(boolean ansiColorsSupported, boolean unicodeSupported) { + String errorPrompt = (unicodeSupported ? "│" : "|") + "%N %P>"; + if (ansiColorsSupported) { + return Ansi.ansi().reset().bold() + errorPrompt + Ansi.ansi().reset(); + } + return errorPrompt; + } + + @Override + public PrintWriter errorWriter() { + return err; + } + + @Override + public PrintWriter outputWriter() { + return out; + } + + @Override + public void flush() { + lang.flush(); + err.flush(); + out.flush(); + } + + + @Override + public boolean supportsCompletion() { + return true; + } + + @Override + public List completers() { + var result = new ArrayList(); + var moduleCompleter = new RascalModuleCompletion(lang::lookupModules); + var idCompleter = new RascalIdentifierCompletion(lang::completePartialIdentifier); + result.add(new RascalCommandCompletion( + new TreeMap<>(lang.availableCommandLineOptions()), + idCompleter::completePartialIdentifier, + (s, c) -> moduleCompleter.completeModuleNames(s, c, false) + )); + result.add(moduleCompleter); + result.add(idCompleter); + result.add(new RascalKeywordCompletion()); + result.add(new RascalLocationCompletion()); + return result; + } + +} diff --git a/src/org/rascalmpl/repl/rascal/RascalValuePrinter.java b/src/org/rascalmpl/repl/rascal/RascalValuePrinter.java new file mode 100644 index 00000000000..426413f4250 --- /dev/null +++ b/src/org/rascalmpl/repl/rascal/RascalValuePrinter.java @@ -0,0 +1,297 @@ +package org.rascalmpl.repl.rascal; + + +import java.io.IOException; +import java.io.PrintWriter; +import java.io.Writer; +import java.net.URI; +import java.net.URISyntaxException; +import java.util.function.Function; + +import org.rascalmpl.interpreter.result.IRascalResult; +import org.rascalmpl.repl.http.REPLContentServer; +import org.rascalmpl.repl.http.REPLContentServerManager; +import org.rascalmpl.repl.output.IAnsiCommandOutput; +import org.rascalmpl.repl.output.ICommandOutput; +import org.rascalmpl.repl.output.IErrorCommandOutput; +import org.rascalmpl.repl.output.IHtmlCommandOutput; +import org.rascalmpl.repl.output.IOutputPrinter; +import org.rascalmpl.repl.output.IWebContentOutput; +import org.rascalmpl.repl.output.MimeTypes; +import org.rascalmpl.repl.output.impl.StringOutputPrinter; +import org.rascalmpl.repl.streams.LimitedLineWriter; +import org.rascalmpl.repl.streams.LimitedWriter; +import org.rascalmpl.repl.streams.ReplTextWriter; +import org.rascalmpl.values.RascalValueFactory; +import org.rascalmpl.values.functions.IFunction; +import org.rascalmpl.values.parsetrees.TreeAdapter; + +import io.usethesource.vallang.IConstructor; +import io.usethesource.vallang.IInteger; +import io.usethesource.vallang.IString; +import io.usethesource.vallang.IValue; +import io.usethesource.vallang.IWithKeywordParameters; +import io.usethesource.vallang.io.StandardTextWriter; +import io.usethesource.vallang.type.Type; + +/** + * Printing Rascal values to different outputs. + */ +public abstract class RascalValuePrinter { + + private final static int LINE_LIMIT = 200; + private final static int CHAR_LIMIT = LINE_LIMIT * 20; + + private final REPLContentServerManager contentManager = new REPLContentServerManager(); + private static final StandardTextWriter ansiIndentedPrinter = new ReplTextWriter(true); + private static final StandardTextWriter plainIndentedPrinter = new StandardTextWriter(true); + + /** + * Make a generic closure out of a rascal IFunction (might need to wrap the call with a lock on the evaluator) + */ + protected abstract Function liftProviderFunction(IFunction func); + + @FunctionalInterface + public static interface ThrowingWriter { + void write(PrintWriter writer, StandardTextWriter prettyPrinter) throws IOException; + } + + public IErrorCommandOutput outputError(ThrowingWriter writer) { + return new IErrorCommandOutput() { + @Override + public ICommandOutput getError() { + return new DoubleOutput(writer); + } + + @Override + public IOutputPrinter asPlain() { + return new ParameterizedPrinterOutput(writer, plainIndentedPrinter, MimeTypes.PLAIN_TEXT); + } + }; + } + + public ICommandOutput outputResult(IRascalResult result) { + if (result == null || result.getValue() == null) { + return () -> new StringOutputPrinter("ok", MimeTypes.PLAIN_TEXT); + } + IValue value = result.getValue(); + Type type = result.getStaticType(); + + if (type.isSubtypeOf(RascalValueFactory.Content) && !type.isBottom()) { + return serveContent((IConstructor)value); + } + + ThrowingWriter resultWriter; + if (type.isAbstractData() && type.isStrictSubtypeOf(RascalValueFactory.Tree) && !type.isBottom()) { + resultWriter = (w, sw) -> { + w.write("(" + type.toString() +") `"); + TreeAdapter.yield((IConstructor)value, sw == ansiIndentedPrinter, w); + w.write("`"); + }; + } + else if (type.isString()) { + resultWriter = (w, sw) -> { + // TODO: do something special for the reader version of IString, when that is released + // for now, we only support write + + try (Writer wrt = new LimitedWriter(new LimitedLineWriter(w, LINE_LIMIT), CHAR_LIMIT)) { + sw.write(value, wrt); + } + catch (/*IOLimitReachedException*/ RuntimeException e) { + // ignore since this is what we wanted + // if we catch IOLimitReachedException we get an IllegalArgument exception instead + // "Self-suppression not permitted" + } + w.println(); + w.println("---"); + try (Writer wrt = new LimitedWriter(new LimitedLineWriter(w, LINE_LIMIT), CHAR_LIMIT)) { + ((IString) value).write(wrt); + } + catch (/*IOLimitReachedException*/ RuntimeException e) { + // ignore since this is what we wanted + // if we catch IOLimitReachedException we get an IllegalArgument exception instead + // "Self-suppression not permitted" + } + w.println(); + w.print("---"); + }; + } + else { + resultWriter = (w, sw) -> { + try (Writer wrt = new LimitedWriter(new LimitedLineWriter(w, LINE_LIMIT), CHAR_LIMIT)) { + sw.write(value, wrt); + } + catch (/*IOLimitReachedException*/ RuntimeException e) { + // ignore since this is what we wanted + // if we catch IOLimitReachedException we get an IllegalArgument exception instead + // "Self-suppression not permitted" + } + }; + } + + ThrowingWriter typePrefixed = (w, sw) -> { + w.write(type.toString()); + w.write(": "); + resultWriter.write(w, sw); + w.println(); + }; + + return new DoubleOutput(typePrefixed); + } + + private static class DoubleOutput implements IAnsiCommandOutput { + private ThrowingWriter writer; + + DoubleOutput(ThrowingWriter writer) { + this.writer = writer; + } + + @Override + public IOutputPrinter asAnsi() { + return new ParameterizedPrinterOutput(writer, ansiIndentedPrinter, MimeTypes.ANSI); + } + + @Override + public IOutputPrinter asPlain() { + return new ParameterizedPrinterOutput(writer, plainIndentedPrinter, MimeTypes.PLAIN_TEXT); + } + } + + private ICommandOutput serveContent(IConstructor provider) { + String id; + Function target; + + if (provider.has("id")) { + id = ((IString) provider.get("id")).getValue(); + target = liftProviderFunction(((IFunction) provider.get("callback"))); + } + else { + id = "*static content*"; + target = (r) -> provider.get("response"); + } + + try { + // this installs the provider such that subsequent requests are handled. + REPLContentServer server = contentManager.addServer(id, target); + + // now we need some HTML to show + + IWithKeywordParameters kp = provider.asWithKeywordParameters(); + String title = kp.hasParameter("title") ? ((IString) kp.getParameter("title")).getValue() : id; + int viewColumn = kp.hasParameter("viewColumn") ? ((IInteger)kp.getParameter("viewColumn")).intValue() : 1; + URI serverUri = new URI("http", null, "localhost", server.getListeningPort(), "/", null, null); + + return new HostedWebContentOutput(id, serverUri, title, viewColumn); + + } + catch (IOException e) { + return outputError((w, sw) -> { + w.println("Could not start webserver to render html content: "); + w.println(e.getMessage()); + }); + } + catch (URISyntaxException e) { + return outputError((w, sw) -> { + w.println("Could not start build the uri: "); + w.println(e.getMessage()); + }); + } + } + + private static class HostedWebContentOutput implements IWebContentOutput, IHtmlCommandOutput { + private final String id; + private final URI uri; + private final String title; + private final int viewColumn; + + HostedWebContentOutput(String id, URI uri, String title, int viewColumn) { + this.id = id; + this.uri = uri; + this.title = title; + this.viewColumn = viewColumn; + } + + @Override + public IOutputPrinter asPlain() { + return new IOutputPrinter() { + @Override + public void write(PrintWriter target) { + target.print("Serving \'"); + target.print(id); + target.print("\' at |"); + target.print(uri.toASCIIString()); + target.println("|"); + } + @Override + public String mimeType() { + return MimeTypes.PLAIN_TEXT; + } + }; + } + + @Override + public IOutputPrinter asHtml() { + return new IOutputPrinter() { + @Override + public void write(PrintWriter target) { + target.print(""); + } + + @Override + public String mimeType() { + return MimeTypes.HTML; + } + }; + } + + @Override + public URI webUri() { + return uri; + } + + @Override + public String webTitle() { + return title; + } + + @Override + public int webviewColumn() { + return viewColumn; + } + } + + + private static class ParameterizedPrinterOutput implements IOutputPrinter { + private final ThrowingWriter internalWriter; + private final StandardTextWriter prettyPrinter; + private final String mimeType; + + public ParameterizedPrinterOutput(ThrowingWriter internalWriter, StandardTextWriter prettyPrinter, String mimeType) { + this.internalWriter = internalWriter; + this.prettyPrinter = prettyPrinter; + this.mimeType = mimeType; + } + + @Override + public String mimeType() { + return mimeType; + } + + @Override + public void write(PrintWriter target) { + try { + internalWriter.write(target, prettyPrinter); + } + catch (IOException e) { + target.println("Internal failure: printing exception failed with:"); + target.println(e.toString()); + e.printStackTrace(target); + } + } + } + +} diff --git a/src/org/rascalmpl/semantics/dynamic/ShellCommand.java b/src/org/rascalmpl/semantics/dynamic/ShellCommand.java index c9d316c8f1e..e526446702e 100644 --- a/src/org/rascalmpl/semantics/dynamic/ShellCommand.java +++ b/src/org/rascalmpl/semantics/dynamic/ShellCommand.java @@ -13,6 +13,7 @@ *******************************************************************************/ package org.rascalmpl.semantics.dynamic; +import org.jline.utils.InfoCmp.Capability; import org.rascalmpl.ast.Expression; import org.rascalmpl.ast.QualifiedName; import org.rascalmpl.debug.IRascalMonitor; @@ -69,8 +70,14 @@ public Result interpret(IEvaluator> __eval) { IRascalMonitor monitor = __eval.getMonitor(); if (monitor instanceof IDEServices) { - IDEServices services = (IDEServices) monitor; - services.clearRepl(); + var services = (IDEServices) monitor; + var term = services.activeTerminal(); + if (term != null) { + term.puts(Capability.clear_screen); + } + else { + __eval.getStdErr().println("There is not terminal available to clear"); + } } else { __eval.getStdErr().println("The current Rascal execution environment does not know how to clear the REPL."); diff --git a/src/org/rascalmpl/shell/RascalShell2.java b/src/org/rascalmpl/shell/RascalShell2.java index 9ad4236e5ca..781e3f8c699 100644 --- a/src/org/rascalmpl/shell/RascalShell2.java +++ b/src/org/rascalmpl/shell/RascalShell2.java @@ -55,12 +55,14 @@ public static void main(String[] args) throws IOException { var repl = new BaseREPL2(new RascalReplServices((t) -> { var monitor = new TerminalProgressBarMonitor(term); - IDEServices services = new BasicIDEServices(term.writer(), monitor, () -> term.puts(Capability.clear_screen)); + var err = RascalReplServices.generateErrorStream(t, monitor); + + IDEServices services = new BasicIDEServices(err, monitor, () -> term.puts(Capability.clear_screen)); GlobalEnvironment heap = new GlobalEnvironment(); ModuleEnvironment root = heap.addModule(new ModuleEnvironment(ModuleEnvironment.SHELL_MODULE, heap)); IValueFactory vf = ValueFactoryFactory.getValueFactory(); - Evaluator evaluator = new Evaluator(vf, term.reader(), RascalReplServices.generateErrorStream(t, monitor), monitor, root, heap, services); + Evaluator evaluator = new Evaluator(vf, term.reader(), err, monitor, root, heap, services); evaluator.addRascalSearchPathContributor(StandardLibraryContributor.getInstance()); return evaluator; }), term); From 67329e27c07897a366855a26d323f19036494280 Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Thu, 19 Dec 2024 14:42:00 +0100 Subject: [PATCH 087/191] added empty tuple to syntax without adding a type syntax for the empty tuple yet. Towards fixing #2106 --- src/org/rascalmpl/ast/Expression.java | 86 +- src/org/rascalmpl/ast/Field.java | 4 +- src/org/rascalmpl/ast/Formals.java | 2 +- src/org/rascalmpl/ast/FunctionBody.java | 2 +- .../rascalmpl/ast/FunctionDeclaration.java | 8 +- src/org/rascalmpl/ast/FunctionModifier.java | 6 +- src/org/rascalmpl/ast/FunctionModifiers.java | 2 +- src/org/rascalmpl/ast/FunctionType.java | 2 +- src/org/rascalmpl/ast/Header.java | 4 +- src/org/rascalmpl/ast/IASTVisitor.java | 2 + src/org/rascalmpl/ast/Import.java | 8 +- src/org/rascalmpl/ast/ImportedModule.java | 8 +- src/org/rascalmpl/ast/IntegerLiteral.java | 6 +- .../ast/KeywordArgument_Expression.java | 2 +- .../ast/KeywordArguments_Expression.java | 4 +- src/org/rascalmpl/ast/KeywordFormal.java | 2 +- src/org/rascalmpl/ast/KeywordFormals.java | 4 +- src/org/rascalmpl/ast/Kind.java | 18 +- src/org/rascalmpl/ast/Label.java | 4 +- src/org/rascalmpl/ast/Literal.java | 16 +- .../ast/LocalVariableDeclaration.java | 4 +- src/org/rascalmpl/ast/LocationLiteral.java | 2 +- src/org/rascalmpl/ast/Mapping_Expression.java | 2 +- src/org/rascalmpl/ast/Module.java | 2 +- src/org/rascalmpl/ast/ModuleActuals.java | 2 +- src/org/rascalmpl/ast/ModuleParameters.java | 2 +- src/org/rascalmpl/ast/NullASTVisitor.java | 4 + src/org/rascalmpl/ast/OptionalExpression.java | 4 +- src/org/rascalmpl/ast/Parameters.java | 4 +- src/org/rascalmpl/ast/PathPart.java | 4 +- src/org/rascalmpl/ast/PathTail.java | 4 +- src/org/rascalmpl/ast/PatternWithAction.java | 4 +- src/org/rascalmpl/ast/Prod.java | 12 +- src/org/rascalmpl/ast/ProdModifier.java | 6 +- src/org/rascalmpl/ast/ProtocolPart.java | 4 +- src/org/rascalmpl/ast/ProtocolTail.java | 4 +- src/org/rascalmpl/ast/QualifiedName.java | 2 +- src/org/rascalmpl/ast/Range.java | 4 +- src/org/rascalmpl/ast/Renaming.java | 2 +- src/org/rascalmpl/ast/Renamings.java | 2 +- src/org/rascalmpl/ast/Replacement.java | 4 +- src/org/rascalmpl/ast/ShellCommand.java | 22 +- src/org/rascalmpl/ast/Signature.java | 4 +- src/org/rascalmpl/ast/Start.java | 4 +- src/org/rascalmpl/ast/Statement.java | 54 +- src/org/rascalmpl/ast/Strategy.java | 12 +- src/org/rascalmpl/ast/StringLiteral.java | 6 +- src/org/rascalmpl/ast/StringMiddle.java | 6 +- src/org/rascalmpl/ast/StringTail.java | 6 +- src/org/rascalmpl/ast/StringTemplate.java | 10 +- src/org/rascalmpl/ast/StructuredType.java | 2 +- src/org/rascalmpl/ast/Sym.java | 50 +- src/org/rascalmpl/ast/SyntaxDefinition.java | 8 +- src/org/rascalmpl/ast/Tag.java | 6 +- src/org/rascalmpl/ast/Tags.java | 2 +- src/org/rascalmpl/ast/Target.java | 4 +- src/org/rascalmpl/ast/Toplevel.java | 2 +- src/org/rascalmpl/ast/Type.java | 16 +- src/org/rascalmpl/ast/TypeArg.java | 4 +- src/org/rascalmpl/ast/TypeVar.java | 4 +- src/org/rascalmpl/ast/UserType.java | 4 +- src/org/rascalmpl/ast/Variable.java | 4 +- src/org/rascalmpl/ast/Variant.java | 2 +- src/org/rascalmpl/ast/Visibility.java | 4 +- src/org/rascalmpl/ast/Visit.java | 4 +- .../library/lang/rascal/syntax/Rascal.rsc | 2 +- .../lang/rascal/syntax/RascalParser.java | 1066 ++++++++--------- 67 files changed, 829 insertions(+), 747 deletions(-) diff --git a/src/org/rascalmpl/ast/Expression.java b/src/org/rascalmpl/ast/Expression.java index 9d066321bfa..bd10196a596 100644 --- a/src/org/rascalmpl/ast/Expression.java +++ b/src/org/rascalmpl/ast/Expression.java @@ -6465,6 +6465,82 @@ public Object clone() { return newInstance(getClass(), src, (IConstructor) null , clone(elements)); } + } + public boolean isTuple() { + return false; + } + + static public class Tuple extends Expression { + // Production: sig("Tuple",[arg("java.util.List\","elements0")],breakable=false) + + + private final java.util.List elements0; + + public Tuple(ISourceLocation src, IConstructor node , java.util.List elements0) { + super(src, node); + + this.elements0 = elements0; + } + + @Override + public boolean isTuple() { + return true; + } + + @Override + public T accept(IASTVisitor visitor) { + return visitor.visitExpressionTuple(this); + } + + @Override + protected void addForLineNumber(int $line, java.util.List $result) { + if (getLocation().getBeginLine() == $line) { + $result.add(this); + } + ISourceLocation $l; + + for (AbstractAST $elem : elements0) { + $l = $elem.getLocation(); + if ($l.hasLineColumn() && $l.getBeginLine() <= $line && $l.getEndLine() >= $line) { + $elem.addForLineNumber($line, $result); + } + if ($l.getBeginLine() > $line) { + return; + } + + } + } + + @Override + public boolean equals(Object o) { + if (!(o instanceof Tuple)) { + return false; + } + Tuple tmp = (Tuple) o; + return true && tmp.elements0.equals(this.elements0) ; + } + + @Override + public int hashCode() { + return 331 + 347 * elements0.hashCode() ; + } + + + @Override + public java.util.List getElements0() { + return this.elements0; + } + + @Override + public boolean hasElements0() { + return true; + } + + @Override + public Object clone() { + return newInstance(getClass(), src, (IConstructor) null , clone(elements0)); + } + } public boolean isTypedVariable() { return false; @@ -6530,7 +6606,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 331 + 347 * type.hashCode() + 487 * name.hashCode() ; + return 487 + 53 * type.hashCode() + 983 * name.hashCode() ; } @@ -6633,7 +6709,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 53 + 983 * type.hashCode() + 653 * name.hashCode() + 29 * pattern.hashCode() ; + return 653 + 29 * type.hashCode() + 487 * name.hashCode() + 653 * pattern.hashCode() ; } @@ -6735,7 +6811,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 487 + 653 * name.hashCode() + 373 * pattern.hashCode() ; + return 373 + 449 * name.hashCode() + 251 * pattern.hashCode() ; } @@ -6828,7 +6904,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 449 + 251 * label.hashCode() + 109 * visit.hashCode() ; + return 109 + 967 * label.hashCode() + 269 * visit.hashCode() ; } @@ -6923,7 +6999,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 967 + 269 * parameters.hashCode() + 97 * statements0.hashCode() ; + return 97 + 101 * parameters.hashCode() + 467 * statements0.hashCode() ; } diff --git a/src/org/rascalmpl/ast/Field.java b/src/org/rascalmpl/ast/Field.java index 18cf8c303c3..3717dbd7b6c 100644 --- a/src/org/rascalmpl/ast/Field.java +++ b/src/org/rascalmpl/ast/Field.java @@ -98,7 +98,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 101 + 467 * fieldIndex.hashCode() ; + return 89 + 727 * fieldIndex.hashCode() ; } @@ -172,7 +172,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 89 + 727 * fieldName.hashCode() ; + return 673 + 743 * fieldName.hashCode() ; } diff --git a/src/org/rascalmpl/ast/Formals.java b/src/org/rascalmpl/ast/Formals.java index 1a9595c0311..252c3ee0e28 100644 --- a/src/org/rascalmpl/ast/Formals.java +++ b/src/org/rascalmpl/ast/Formals.java @@ -93,7 +93,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 673 + 743 * formals.hashCode() ; + return 29 + 571 * formals.hashCode() ; } diff --git a/src/org/rascalmpl/ast/FunctionBody.java b/src/org/rascalmpl/ast/FunctionBody.java index 60c54218830..8c8ef98ac3e 100644 --- a/src/org/rascalmpl/ast/FunctionBody.java +++ b/src/org/rascalmpl/ast/FunctionBody.java @@ -93,7 +93,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 29 + 571 * statements.hashCode() ; + return 211 + 727 * statements.hashCode() ; } diff --git a/src/org/rascalmpl/ast/FunctionDeclaration.java b/src/org/rascalmpl/ast/FunctionDeclaration.java index 8fd452a5527..bbbb1460d10 100644 --- a/src/org/rascalmpl/ast/FunctionDeclaration.java +++ b/src/org/rascalmpl/ast/FunctionDeclaration.java @@ -146,7 +146,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 211 + 727 * tags.hashCode() + 251 * visibility.hashCode() + 131 * signature.hashCode() ; + return 251 + 131 * tags.hashCode() + 811 * visibility.hashCode() + 199 * signature.hashCode() ; } @@ -280,7 +280,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 811 + 199 * tags.hashCode() + 5 * visibility.hashCode() + 157 * signature.hashCode() + 389 * expression.hashCode() + 163 * conditions.hashCode() ; + return 5 + 157 * tags.hashCode() + 389 * visibility.hashCode() + 163 * signature.hashCode() + 163 * expression.hashCode() + 71 * conditions.hashCode() ; } @@ -420,7 +420,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 163 + 71 * tags.hashCode() + 503 * visibility.hashCode() + 31 * signature.hashCode() + 181 * body.hashCode() ; + return 503 + 31 * tags.hashCode() + 181 * visibility.hashCode() + 313 * signature.hashCode() + 463 * body.hashCode() ; } @@ -551,7 +551,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 313 + 463 * tags.hashCode() + 257 * visibility.hashCode() + 211 * signature.hashCode() + 179 * expression.hashCode() ; + return 257 + 211 * tags.hashCode() + 179 * visibility.hashCode() + 457 * signature.hashCode() + 839 * expression.hashCode() ; } diff --git a/src/org/rascalmpl/ast/FunctionModifier.java b/src/org/rascalmpl/ast/FunctionModifier.java index 165fe167584..b1258eb8509 100644 --- a/src/org/rascalmpl/ast/FunctionModifier.java +++ b/src/org/rascalmpl/ast/FunctionModifier.java @@ -74,7 +74,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 457 ; + return 2 ; } @@ -129,7 +129,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 839 ; + return 461 ; } @@ -184,7 +184,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 2 ; + return 877 ; } diff --git a/src/org/rascalmpl/ast/FunctionModifiers.java b/src/org/rascalmpl/ast/FunctionModifiers.java index 70a886497e2..f8d5870ff79 100644 --- a/src/org/rascalmpl/ast/FunctionModifiers.java +++ b/src/org/rascalmpl/ast/FunctionModifiers.java @@ -93,7 +93,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 461 + 877 * modifiers.hashCode() ; + return 599 + 281 * modifiers.hashCode() ; } diff --git a/src/org/rascalmpl/ast/FunctionType.java b/src/org/rascalmpl/ast/FunctionType.java index defc97638e1..26d07d33b8f 100644 --- a/src/org/rascalmpl/ast/FunctionType.java +++ b/src/org/rascalmpl/ast/FunctionType.java @@ -110,7 +110,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 599 + 281 * type.hashCode() + 43 * arguments.hashCode() ; + return 43 + 103 * type.hashCode() + 673 * arguments.hashCode() ; } diff --git a/src/org/rascalmpl/ast/Header.java b/src/org/rascalmpl/ast/Header.java index 64bce1b112e..2230da82048 100644 --- a/src/org/rascalmpl/ast/Header.java +++ b/src/org/rascalmpl/ast/Header.java @@ -134,7 +134,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 103 + 673 * tags.hashCode() + 509 * name.hashCode() + 61 * imports.hashCode() ; + return 509 + 61 * tags.hashCode() + 173 * name.hashCode() + 761 * imports.hashCode() ; } @@ -258,7 +258,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 173 + 761 * tags.hashCode() + 409 * name.hashCode() + 997 * params.hashCode() + 367 * imports.hashCode() ; + return 409 + 997 * tags.hashCode() + 367 * name.hashCode() + 401 * params.hashCode() + 139 * imports.hashCode() ; } diff --git a/src/org/rascalmpl/ast/IASTVisitor.java b/src/org/rascalmpl/ast/IASTVisitor.java index 97b5fe91102..e29eb85925a 100644 --- a/src/org/rascalmpl/ast/IASTVisitor.java +++ b/src/org/rascalmpl/ast/IASTVisitor.java @@ -323,6 +323,8 @@ public interface IASTVisitor { public T visitExpressionTuple(Expression.Tuple x); + public T visitExpressionTuple(Expression.Tuple x); + public T visitExpressionTypedVariable(Expression.TypedVariable x); public T visitExpressionTypedVariableBecomes(Expression.TypedVariableBecomes x); diff --git a/src/org/rascalmpl/ast/Import.java b/src/org/rascalmpl/ast/Import.java index 1853df9e1d2..9da3ec16e80 100644 --- a/src/org/rascalmpl/ast/Import.java +++ b/src/org/rascalmpl/ast/Import.java @@ -112,7 +112,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 401 + 139 * module.hashCode() ; + return 937 + 521 * module.hashCode() ; } @@ -186,7 +186,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 937 + 521 * module.hashCode() ; + return 719 + 773 * module.hashCode() ; } @@ -270,7 +270,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 719 + 773 * name.hashCode() + 277 * at.hashCode() ; + return 277 + 239 * name.hashCode() + 151 * at.hashCode() ; } @@ -353,7 +353,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 239 + 151 * syntax.hashCode() ; + return 397 + 137 * syntax.hashCode() ; } diff --git a/src/org/rascalmpl/ast/ImportedModule.java b/src/org/rascalmpl/ast/ImportedModule.java index 82a122881da..ad54aff866e 100644 --- a/src/org/rascalmpl/ast/ImportedModule.java +++ b/src/org/rascalmpl/ast/ImportedModule.java @@ -115,7 +115,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 397 + 137 * name.hashCode() + 811 * actuals.hashCode() ; + return 811 + 709 * name.hashCode() + 167 * actuals.hashCode() ; } @@ -218,7 +218,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 709 + 167 * name.hashCode() + 53 * actuals.hashCode() + 463 * renamings.hashCode() ; + return 53 + 463 * name.hashCode() + 127 * actuals.hashCode() + 67 * renamings.hashCode() ; } @@ -310,7 +310,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 127 + 67 * name.hashCode() ; + return 643 + 229 * name.hashCode() ; } @@ -394,7 +394,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 643 + 229 * name.hashCode() + 271 * renamings.hashCode() ; + return 271 + 331 * name.hashCode() + 17 * renamings.hashCode() ; } diff --git a/src/org/rascalmpl/ast/IntegerLiteral.java b/src/org/rascalmpl/ast/IntegerLiteral.java index b36a0229034..cd0b67c7944 100644 --- a/src/org/rascalmpl/ast/IntegerLiteral.java +++ b/src/org/rascalmpl/ast/IntegerLiteral.java @@ -105,7 +105,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 331 + 17 * decimal.hashCode() ; + return 401 + 313 * decimal.hashCode() ; } @@ -179,7 +179,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 401 + 313 * hex.hashCode() ; + return 449 + 463 * hex.hashCode() ; } @@ -253,7 +253,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 449 + 463 * octal.hashCode() ; + return 971 + 179 * octal.hashCode() ; } diff --git a/src/org/rascalmpl/ast/KeywordArgument_Expression.java b/src/org/rascalmpl/ast/KeywordArgument_Expression.java index 0c70e0f32c0..4ee5627240a 100644 --- a/src/org/rascalmpl/ast/KeywordArgument_Expression.java +++ b/src/org/rascalmpl/ast/KeywordArgument_Expression.java @@ -108,7 +108,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 971 + 179 * name.hashCode() + 229 * expression.hashCode() ; + return 229 + 823 * name.hashCode() + 43 * expression.hashCode() ; } diff --git a/src/org/rascalmpl/ast/KeywordArguments_Expression.java b/src/org/rascalmpl/ast/KeywordArguments_Expression.java index 8fd2d746939..84d2d262b72 100644 --- a/src/org/rascalmpl/ast/KeywordArguments_Expression.java +++ b/src/org/rascalmpl/ast/KeywordArguments_Expression.java @@ -110,7 +110,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 823 + 43 * optionalComma.hashCode() + 733 * keywordArgumentList.hashCode() ; + return 733 + 239 * optionalComma.hashCode() + 941 * keywordArgumentList.hashCode() ; } @@ -183,7 +183,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 239 ; + return 941 ; } diff --git a/src/org/rascalmpl/ast/KeywordFormal.java b/src/org/rascalmpl/ast/KeywordFormal.java index f8f8aecdf6e..353eb6199ca 100644 --- a/src/org/rascalmpl/ast/KeywordFormal.java +++ b/src/org/rascalmpl/ast/KeywordFormal.java @@ -125,7 +125,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 941 + 941 * type.hashCode() + 2 * name.hashCode() + 421 * expression.hashCode() ; + return 2 + 421 * type.hashCode() + 941 * name.hashCode() + 307 * expression.hashCode() ; } diff --git a/src/org/rascalmpl/ast/KeywordFormals.java b/src/org/rascalmpl/ast/KeywordFormals.java index 2f39c228054..436642881ae 100644 --- a/src/org/rascalmpl/ast/KeywordFormals.java +++ b/src/org/rascalmpl/ast/KeywordFormals.java @@ -110,7 +110,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 941 + 307 * optionalComma.hashCode() + 941 * keywordFormalList.hashCode() ; + return 941 + 631 * optionalComma.hashCode() + 269 * keywordFormalList.hashCode() ; } @@ -183,7 +183,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 631 ; + return 293 ; } diff --git a/src/org/rascalmpl/ast/Kind.java b/src/org/rascalmpl/ast/Kind.java index 07e5f1f9550..7a7dcacf87f 100644 --- a/src/org/rascalmpl/ast/Kind.java +++ b/src/org/rascalmpl/ast/Kind.java @@ -74,7 +74,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 269 ; + return 757 ; } @@ -129,7 +129,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 293 ; + return 829 ; } @@ -184,7 +184,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 757 ; + return 47 ; } @@ -239,7 +239,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 829 ; + return 257 ; } @@ -294,7 +294,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 47 ; + return 367 ; } @@ -349,7 +349,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 257 ; + return 421 ; } @@ -404,7 +404,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 367 ; + return 577 ; } @@ -459,7 +459,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 421 ; + return 653 ; } @@ -514,7 +514,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 577 ; + return 701 ; } diff --git a/src/org/rascalmpl/ast/Label.java b/src/org/rascalmpl/ast/Label.java index b2b0a7ed8c0..546f0120444 100644 --- a/src/org/rascalmpl/ast/Label.java +++ b/src/org/rascalmpl/ast/Label.java @@ -91,7 +91,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 653 + 701 * name.hashCode() ; + return 233 + 577 * name.hashCode() ; } @@ -155,7 +155,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 233 ; + return 643 ; } diff --git a/src/org/rascalmpl/ast/Literal.java b/src/org/rascalmpl/ast/Literal.java index 945fa6fc57d..8609f0b0e68 100644 --- a/src/org/rascalmpl/ast/Literal.java +++ b/src/org/rascalmpl/ast/Literal.java @@ -140,7 +140,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 577 + 643 * booleanLiteral.hashCode() ; + return 631 + 173 * booleanLiteral.hashCode() ; } @@ -214,7 +214,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 631 + 173 * dateTimeLiteral.hashCode() ; + return 103 + 257 * dateTimeLiteral.hashCode() ; } @@ -288,7 +288,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 103 + 257 * integerLiteral.hashCode() ; + return 283 + 521 * integerLiteral.hashCode() ; } @@ -362,7 +362,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 283 + 521 * locationLiteral.hashCode() ; + return 127 + 89 * locationLiteral.hashCode() ; } @@ -436,7 +436,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 127 + 89 * rationalLiteral.hashCode() ; + return 739 + 547 * rationalLiteral.hashCode() ; } @@ -510,7 +510,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 739 + 547 * realLiteral.hashCode() ; + return 3 + 373 * realLiteral.hashCode() ; } @@ -584,7 +584,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 3 + 373 * regExpLiteral.hashCode() ; + return 31 + 283 * regExpLiteral.hashCode() ; } @@ -658,7 +658,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 31 + 283 * stringLiteral.hashCode() ; + return 461 + 7 * stringLiteral.hashCode() ; } diff --git a/src/org/rascalmpl/ast/LocalVariableDeclaration.java b/src/org/rascalmpl/ast/LocalVariableDeclaration.java index ffc7efd7b1e..d1609d507c6 100644 --- a/src/org/rascalmpl/ast/LocalVariableDeclaration.java +++ b/src/org/rascalmpl/ast/LocalVariableDeclaration.java @@ -91,7 +91,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 461 + 7 * declarator.hashCode() ; + return 463 + 691 * declarator.hashCode() ; } @@ -165,7 +165,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 463 + 691 * declarator.hashCode() ; + return 479 + 89 * declarator.hashCode() ; } diff --git a/src/org/rascalmpl/ast/LocationLiteral.java b/src/org/rascalmpl/ast/LocationLiteral.java index 041da56636d..70dc451d6d0 100644 --- a/src/org/rascalmpl/ast/LocationLiteral.java +++ b/src/org/rascalmpl/ast/LocationLiteral.java @@ -108,7 +108,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 479 + 89 * protocolPart.hashCode() + 937 * pathPart.hashCode() ; + return 937 + 631 * protocolPart.hashCode() + 797 * pathPart.hashCode() ; } diff --git a/src/org/rascalmpl/ast/Mapping_Expression.java b/src/org/rascalmpl/ast/Mapping_Expression.java index dccc2dcf9df..5ea6504ffb9 100644 --- a/src/org/rascalmpl/ast/Mapping_Expression.java +++ b/src/org/rascalmpl/ast/Mapping_Expression.java @@ -108,7 +108,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 631 + 797 * from.hashCode() + 239 * to.hashCode() ; + return 239 + 137 * from.hashCode() + 277 * to.hashCode() ; } diff --git a/src/org/rascalmpl/ast/Module.java b/src/org/rascalmpl/ast/Module.java index b3b8333ac7d..76f6fe2bd2b 100644 --- a/src/org/rascalmpl/ast/Module.java +++ b/src/org/rascalmpl/ast/Module.java @@ -108,7 +108,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 137 + 277 * header.hashCode() + 281 * body.hashCode() ; + return 281 + 229 * header.hashCode() + 211 * body.hashCode() ; } diff --git a/src/org/rascalmpl/ast/ModuleActuals.java b/src/org/rascalmpl/ast/ModuleActuals.java index 8011982b649..15613d8567d 100644 --- a/src/org/rascalmpl/ast/ModuleActuals.java +++ b/src/org/rascalmpl/ast/ModuleActuals.java @@ -93,7 +93,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 229 + 211 * types.hashCode() ; + return 83 + 673 * types.hashCode() ; } diff --git a/src/org/rascalmpl/ast/ModuleParameters.java b/src/org/rascalmpl/ast/ModuleParameters.java index 1e5649d5506..b63ac141f10 100644 --- a/src/org/rascalmpl/ast/ModuleParameters.java +++ b/src/org/rascalmpl/ast/ModuleParameters.java @@ -93,7 +93,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 83 + 673 * parameters.hashCode() ; + return 557 + 601 * parameters.hashCode() ; } diff --git a/src/org/rascalmpl/ast/NullASTVisitor.java b/src/org/rascalmpl/ast/NullASTVisitor.java index 62ec109ee14..bccc74f091c 100644 --- a/src/org/rascalmpl/ast/NullASTVisitor.java +++ b/src/org/rascalmpl/ast/NullASTVisitor.java @@ -629,6 +629,10 @@ public T visitExpressionTuple(Expression.Tuple x) { return null; } + public T visitExpressionTuple(Expression.Tuple x) { + return null; + } + public T visitExpressionTypedVariable(Expression.TypedVariable x) { return null; } diff --git a/src/org/rascalmpl/ast/OptionalExpression.java b/src/org/rascalmpl/ast/OptionalExpression.java index a951b5abbbc..ef3dbdd1f6d 100644 --- a/src/org/rascalmpl/ast/OptionalExpression.java +++ b/src/org/rascalmpl/ast/OptionalExpression.java @@ -91,7 +91,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 557 + 601 * expression.hashCode() ; + return 19 + 829 * expression.hashCode() ; } @@ -155,7 +155,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 19 ; + return 809 ; } diff --git a/src/org/rascalmpl/ast/Parameters.java b/src/org/rascalmpl/ast/Parameters.java index 8a0e49b8982..3e12d9e4c07 100644 --- a/src/org/rascalmpl/ast/Parameters.java +++ b/src/org/rascalmpl/ast/Parameters.java @@ -108,7 +108,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 829 + 809 * formals.hashCode() + 157 * keywordFormals.hashCode() ; + return 157 + 31 * formals.hashCode() + 13 * keywordFormals.hashCode() ; } @@ -201,7 +201,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 31 + 13 * formals.hashCode() + 857 * keywordFormals.hashCode() ; + return 857 + 383 * formals.hashCode() + 853 * keywordFormals.hashCode() ; } diff --git a/src/org/rascalmpl/ast/PathPart.java b/src/org/rascalmpl/ast/PathPart.java index 6df0cc5dc2c..e59d5a5653e 100644 --- a/src/org/rascalmpl/ast/PathPart.java +++ b/src/org/rascalmpl/ast/PathPart.java @@ -132,7 +132,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 383 + 853 * pre.hashCode() + 743 * expression.hashCode() + 331 * tail.hashCode() ; + return 743 + 331 * pre.hashCode() + 967 * expression.hashCode() + 257 * tail.hashCode() ; } @@ -224,7 +224,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 967 + 257 * pathChars.hashCode() ; + return 2 + 709 * pathChars.hashCode() ; } diff --git a/src/org/rascalmpl/ast/PathTail.java b/src/org/rascalmpl/ast/PathTail.java index f17eb658c16..cb5b8cfd6cd 100644 --- a/src/org/rascalmpl/ast/PathTail.java +++ b/src/org/rascalmpl/ast/PathTail.java @@ -132,7 +132,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 2 + 709 * mid.hashCode() + 499 * expression.hashCode() + 991 * tail.hashCode() ; + return 499 + 991 * mid.hashCode() + 653 * expression.hashCode() + 557 * tail.hashCode() ; } @@ -224,7 +224,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 653 + 557 * post.hashCode() ; + return 257 + 941 * post.hashCode() ; } diff --git a/src/org/rascalmpl/ast/PatternWithAction.java b/src/org/rascalmpl/ast/PatternWithAction.java index 32148f04e9f..56a834a09ff 100644 --- a/src/org/rascalmpl/ast/PatternWithAction.java +++ b/src/org/rascalmpl/ast/PatternWithAction.java @@ -115,7 +115,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 257 + 941 * pattern.hashCode() + 601 * statement.hashCode() ; + return 601 + 239 * pattern.hashCode() + 241 * statement.hashCode() ; } @@ -208,7 +208,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 239 + 241 * pattern.hashCode() + 673 * replacement.hashCode() ; + return 673 + 757 * pattern.hashCode() + 449 * replacement.hashCode() ; } diff --git a/src/org/rascalmpl/ast/Prod.java b/src/org/rascalmpl/ast/Prod.java index 1aa1429bcfc..44ba13d816d 100644 --- a/src/org/rascalmpl/ast/Prod.java +++ b/src/org/rascalmpl/ast/Prod.java @@ -150,7 +150,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 757 + 449 * lhs.hashCode() + 167 * rhs.hashCode() ; + return 167 + 191 * lhs.hashCode() + 191 * rhs.hashCode() ; } @@ -243,7 +243,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 191 + 191 * associativity.hashCode() + 409 * group.hashCode() ; + return 409 + 487 * associativity.hashCode() + 29 * group.hashCode() ; } @@ -336,7 +336,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 487 + 29 * lhs.hashCode() + 23 * rhs.hashCode() ; + return 23 + 23 * lhs.hashCode() + 491 * rhs.hashCode() ; } @@ -443,7 +443,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 23 + 491 * modifiers.hashCode() + 617 * name.hashCode() + 761 * syms.hashCode() ; + return 617 + 761 * modifiers.hashCode() + 197 * name.hashCode() + 5 * syms.hashCode() ; } @@ -535,7 +535,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 197 + 5 * referenced.hashCode() ; + return 19 + 19 * referenced.hashCode() ; } @@ -623,7 +623,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 19 + 19 * modifiers.hashCode() + 19 * syms.hashCode() ; + return 19 + 157 * modifiers.hashCode() + 139 * syms.hashCode() ; } diff --git a/src/org/rascalmpl/ast/ProdModifier.java b/src/org/rascalmpl/ast/ProdModifier.java index 0d4b3612650..4acd3e17373 100644 --- a/src/org/rascalmpl/ast/ProdModifier.java +++ b/src/org/rascalmpl/ast/ProdModifier.java @@ -98,7 +98,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 157 + 139 * associativity.hashCode() ; + return 193 + 859 * associativity.hashCode() ; } @@ -162,7 +162,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 193 ; + return 3 ; } @@ -227,7 +227,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 859 + 3 * tag.hashCode() ; + return 701 + 283 * tag.hashCode() ; } diff --git a/src/org/rascalmpl/ast/ProtocolPart.java b/src/org/rascalmpl/ast/ProtocolPart.java index cd3c2e2f57b..5a628203f10 100644 --- a/src/org/rascalmpl/ast/ProtocolPart.java +++ b/src/org/rascalmpl/ast/ProtocolPart.java @@ -132,7 +132,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 701 + 283 * pre.hashCode() + 349 * expression.hashCode() + 139 * tail.hashCode() ; + return 349 + 139 * pre.hashCode() + 73 * expression.hashCode() + 439 * tail.hashCode() ; } @@ -224,7 +224,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 73 + 439 * protocolChars.hashCode() ; + return 191 + 89 * protocolChars.hashCode() ; } diff --git a/src/org/rascalmpl/ast/ProtocolTail.java b/src/org/rascalmpl/ast/ProtocolTail.java index 998d84b41d6..22ccd0f0f5a 100644 --- a/src/org/rascalmpl/ast/ProtocolTail.java +++ b/src/org/rascalmpl/ast/ProtocolTail.java @@ -132,7 +132,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 191 + 89 * mid.hashCode() + 787 * expression.hashCode() + 73 * tail.hashCode() ; + return 787 + 73 * mid.hashCode() + 673 * expression.hashCode() + 233 * tail.hashCode() ; } @@ -224,7 +224,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 673 + 233 * post.hashCode() ; + return 331 + 223 * post.hashCode() ; } diff --git a/src/org/rascalmpl/ast/QualifiedName.java b/src/org/rascalmpl/ast/QualifiedName.java index 81a3a4e4483..b98905dee25 100644 --- a/src/org/rascalmpl/ast/QualifiedName.java +++ b/src/org/rascalmpl/ast/QualifiedName.java @@ -93,7 +93,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 331 + 223 * names.hashCode() ; + return 499 + 919 * names.hashCode() ; } diff --git a/src/org/rascalmpl/ast/Range.java b/src/org/rascalmpl/ast/Range.java index 9d4c51e7096..505a83845cc 100644 --- a/src/org/rascalmpl/ast/Range.java +++ b/src/org/rascalmpl/ast/Range.java @@ -105,7 +105,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 499 + 919 * character.hashCode() ; + return 233 + 709 * character.hashCode() ; } @@ -189,7 +189,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 233 + 709 * start.hashCode() + 503 * end.hashCode() ; + return 503 + 233 * start.hashCode() + 419 * end.hashCode() ; } diff --git a/src/org/rascalmpl/ast/Renaming.java b/src/org/rascalmpl/ast/Renaming.java index cc8eaefc2e3..dec3326a8f1 100644 --- a/src/org/rascalmpl/ast/Renaming.java +++ b/src/org/rascalmpl/ast/Renaming.java @@ -108,7 +108,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 233 + 419 * from.hashCode() + 599 * to.hashCode() ; + return 599 + 881 * from.hashCode() + 739 * to.hashCode() ; } diff --git a/src/org/rascalmpl/ast/Renamings.java b/src/org/rascalmpl/ast/Renamings.java index 39d63478ecc..3d87e56d406 100644 --- a/src/org/rascalmpl/ast/Renamings.java +++ b/src/org/rascalmpl/ast/Renamings.java @@ -93,7 +93,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 881 + 739 * renamings.hashCode() ; + return 881 + 3 * renamings.hashCode() ; } diff --git a/src/org/rascalmpl/ast/Replacement.java b/src/org/rascalmpl/ast/Replacement.java index 61219bd2cc7..33d02bd867f 100644 --- a/src/org/rascalmpl/ast/Replacement.java +++ b/src/org/rascalmpl/ast/Replacement.java @@ -110,7 +110,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 881 + 3 * replacementExpression.hashCode() + 293 * conditions.hashCode() ; + return 293 + 281 * replacementExpression.hashCode() + 433 * conditions.hashCode() ; } @@ -193,7 +193,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 281 + 433 * replacementExpression.hashCode() ; + return 283 + 727 * replacementExpression.hashCode() ; } diff --git a/src/org/rascalmpl/ast/ShellCommand.java b/src/org/rascalmpl/ast/ShellCommand.java index e2b7b69f1da..7ac2b9913cb 100644 --- a/src/org/rascalmpl/ast/ShellCommand.java +++ b/src/org/rascalmpl/ast/ShellCommand.java @@ -88,7 +88,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 283 ; + return 449 ; } @@ -153,7 +153,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 727 + 449 * name.hashCode() ; + return 983 + 523 * name.hashCode() ; } @@ -217,7 +217,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 983 ; + return 271 ; } @@ -272,7 +272,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 523 ; + return 907 ; } @@ -327,7 +327,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 271 ; + return 479 ; } @@ -382,7 +382,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 907 ; + return 383 ; } @@ -437,7 +437,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 479 ; + return 397 ; } @@ -512,7 +512,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 383 + 397 * name.hashCode() + 929 * expression.hashCode() ; + return 929 + 997 * name.hashCode() + 857 * expression.hashCode() ; } @@ -585,7 +585,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 997 ; + return 127 ; } @@ -650,7 +650,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 857 + 127 * name.hashCode() ; + return 607 + 631 * name.hashCode() ; } @@ -724,7 +724,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 607 + 631 * name.hashCode() ; + return 449 + 113 * name.hashCode() ; } diff --git a/src/org/rascalmpl/ast/Signature.java b/src/org/rascalmpl/ast/Signature.java index 67c16d9a3b0..5945718aae4 100644 --- a/src/org/rascalmpl/ast/Signature.java +++ b/src/org/rascalmpl/ast/Signature.java @@ -149,7 +149,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 449 + 113 * modifiers.hashCode() + 659 * type.hashCode() + 113 * name.hashCode() + 163 * parameters.hashCode() ; + return 659 + 113 * modifiers.hashCode() + 163 * type.hashCode() + 491 * name.hashCode() + 887 * parameters.hashCode() ; } @@ -292,7 +292,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 491 + 887 * modifiers.hashCode() + 547 * type.hashCode() + 293 * name.hashCode() + 997 * parameters.hashCode() + 881 * exceptions.hashCode() ; + return 547 + 293 * modifiers.hashCode() + 997 * type.hashCode() + 881 * name.hashCode() + 313 * parameters.hashCode() + 127 * exceptions.hashCode() ; } diff --git a/src/org/rascalmpl/ast/Start.java b/src/org/rascalmpl/ast/Start.java index c328663f5c5..cfe5ab5b2ab 100644 --- a/src/org/rascalmpl/ast/Start.java +++ b/src/org/rascalmpl/ast/Start.java @@ -74,7 +74,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 313 ; + return 823 ; } @@ -129,7 +129,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 127 ; + return 757 ; } diff --git a/src/org/rascalmpl/ast/Statement.java b/src/org/rascalmpl/ast/Statement.java index 0db876ccb83..7ccd64e63f5 100644 --- a/src/org/rascalmpl/ast/Statement.java +++ b/src/org/rascalmpl/ast/Statement.java @@ -269,7 +269,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 823 + 757 * dataTarget.hashCode() + 89 * statement.hashCode() ; + return 89 + 619 * dataTarget.hashCode() + 401 * statement.hashCode() ; } @@ -355,7 +355,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 619 + 401 * expression.hashCode() ; + return 463 + 317 * expression.hashCode() ; } @@ -442,7 +442,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 463 + 317 * expression.hashCode() + 857 * message.hashCode() ; + return 857 + 353 * expression.hashCode() + 53 * message.hashCode() ; } @@ -548,7 +548,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 353 + 53 * assignable.hashCode() + 149 * operator.hashCode() + 127 * statement.hashCode() ; + return 149 + 127 * assignable.hashCode() + 827 * operator.hashCode() + 431 * statement.hashCode() ; } @@ -643,7 +643,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 827 + 431 * target.hashCode() ; + return 131 + 827 * target.hashCode() ; } @@ -720,7 +720,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 131 + 827 * target.hashCode() ; + return 2 + 449 * target.hashCode() ; } @@ -817,7 +817,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 2 + 449 * label.hashCode() + 89 * body.hashCode() + 233 * condition.hashCode() ; + return 89 + 233 * label.hashCode() + 617 * body.hashCode() + 151 * condition.hashCode() ; } @@ -902,7 +902,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 617 ; + return 19 ; } @@ -967,7 +967,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 151 + 19 * expression.hashCode() ; + return 787 + 457 * expression.hashCode() ; } @@ -1044,7 +1044,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 787 + 457 * target.hashCode() ; + return 283 + 739 * target.hashCode() ; } @@ -1111,7 +1111,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 283 ; + return 547 ; } @@ -1201,7 +1201,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 739 + 547 * label.hashCode() + 97 * generators.hashCode() + 607 * body.hashCode() ; + return 97 + 607 * label.hashCode() + 73 * generators.hashCode() + 677 * body.hashCode() ; } @@ -1296,7 +1296,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 73 + 677 * functionDeclaration.hashCode() ; + return 89 + 599 * functionDeclaration.hashCode() ; } @@ -1385,7 +1385,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 89 + 599 * type.hashCode() + 3 * names.hashCode() ; + return 3 + 757 * type.hashCode() + 193 * names.hashCode() ; } @@ -1493,7 +1493,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 757 + 193 * label.hashCode() + 881 * conditions.hashCode() + 823 * thenStatement.hashCode() ; + return 881 + 823 * label.hashCode() + 859 * conditions.hashCode() + 181 * thenStatement.hashCode() ; } @@ -1620,7 +1620,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 859 + 181 * label.hashCode() + 677 * conditions.hashCode() + 433 * thenStatement.hashCode() + 67 * elseStatement.hashCode() ; + return 677 + 433 * label.hashCode() + 67 * conditions.hashCode() + 757 * thenStatement.hashCode() + 479 * elseStatement.hashCode() ; } @@ -1734,7 +1734,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 757 + 479 * dataTarget.hashCode() + 691 * statement.hashCode() ; + return 691 + 193 * dataTarget.hashCode() + 113 * statement.hashCode() ; } @@ -1832,7 +1832,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 193 + 113 * label.hashCode() + 607 * statements.hashCode() ; + return 607 + 151 * label.hashCode() + 409 * statements.hashCode() ; } @@ -1915,7 +1915,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 151 + 409 * statement.hashCode() ; + return 691 + 691 * statement.hashCode() ; } @@ -2014,7 +2014,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 691 + 691 * variables.hashCode() + 73 * bound.hashCode() + 457 * body.hashCode() ; + return 73 + 457 * variables.hashCode() + 719 * bound.hashCode() + 461 * body.hashCode() ; } @@ -2131,7 +2131,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 719 + 461 * label.hashCode() + 929 * expression.hashCode() + 199 * cases.hashCode() ; + return 929 + 199 * label.hashCode() + 569 * expression.hashCode() + 149 * cases.hashCode() ; } @@ -2226,7 +2226,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 569 + 149 * statement.hashCode() ; + return 569 + 617 * statement.hashCode() ; } @@ -2315,7 +2315,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 569 + 617 * body.hashCode() + 389 * handlers.hashCode() ; + return 389 + 757 * body.hashCode() + 757 * handlers.hashCode() ; } @@ -2423,7 +2423,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 757 + 757 * body.hashCode() + 439 * handlers.hashCode() + 239 * finallyBody.hashCode() ; + return 439 + 239 * body.hashCode() + 641 * handlers.hashCode() + 227 * finallyBody.hashCode() ; } @@ -2518,7 +2518,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 641 + 227 * declaration.hashCode() ; + return 269 + 389 * declaration.hashCode() ; } @@ -2605,7 +2605,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 269 + 389 * label.hashCode() + 367 * visit.hashCode() ; + return 367 + 643 * label.hashCode() + 619 * visit.hashCode() ; } @@ -2713,7 +2713,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 643 + 619 * label.hashCode() + 631 * conditions.hashCode() + 151 * body.hashCode() ; + return 631 + 151 * label.hashCode() + 593 * conditions.hashCode() + 109 * body.hashCode() ; } diff --git a/src/org/rascalmpl/ast/Strategy.java b/src/org/rascalmpl/ast/Strategy.java index cd0e5d292bc..5249a3fc7e6 100644 --- a/src/org/rascalmpl/ast/Strategy.java +++ b/src/org/rascalmpl/ast/Strategy.java @@ -74,7 +74,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 593 ; + return 53 ; } @@ -129,7 +129,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 109 ; + return 839 ; } @@ -184,7 +184,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 53 ; + return 389 ; } @@ -239,7 +239,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 839 ; + return 229 ; } @@ -294,7 +294,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 389 ; + return 157 ; } @@ -349,7 +349,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 229 ; + return 283 ; } diff --git a/src/org/rascalmpl/ast/StringLiteral.java b/src/org/rascalmpl/ast/StringLiteral.java index fad93712024..0563ce82386 100644 --- a/src/org/rascalmpl/ast/StringLiteral.java +++ b/src/org/rascalmpl/ast/StringLiteral.java @@ -139,7 +139,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 157 + 283 * pre.hashCode() + 947 * expression.hashCode() + 541 * tail.hashCode() ; + return 947 + 541 * pre.hashCode() + 103 * expression.hashCode() + 619 * tail.hashCode() ; } @@ -231,7 +231,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 103 + 619 * constant.hashCode() ; + return 421 + 541 * constant.hashCode() ; } @@ -325,7 +325,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 421 + 541 * pre.hashCode() + 509 * template.hashCode() + 941 * tail.hashCode() ; + return 509 + 941 * pre.hashCode() + 653 * template.hashCode() + 13 * tail.hashCode() ; } diff --git a/src/org/rascalmpl/ast/StringMiddle.java b/src/org/rascalmpl/ast/StringMiddle.java index 1eb963084cd..fe53df8c6ae 100644 --- a/src/org/rascalmpl/ast/StringMiddle.java +++ b/src/org/rascalmpl/ast/StringMiddle.java @@ -132,7 +132,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 653 + 13 * mid.hashCode() + 787 * expression.hashCode() + 37 * tail.hashCode() ; + return 787 + 37 * mid.hashCode() + 131 * expression.hashCode() + 331 * tail.hashCode() ; } @@ -224,7 +224,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 131 + 331 * mid.hashCode() ; + return 521 + 839 * mid.hashCode() ; } @@ -318,7 +318,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 521 + 839 * mid.hashCode() + 191 * template.hashCode() + 599 * tail.hashCode() ; + return 191 + 599 * mid.hashCode() + 109 * template.hashCode() + 977 * tail.hashCode() ; } diff --git a/src/org/rascalmpl/ast/StringTail.java b/src/org/rascalmpl/ast/StringTail.java index 5020467cbf9..41a7288b62d 100644 --- a/src/org/rascalmpl/ast/StringTail.java +++ b/src/org/rascalmpl/ast/StringTail.java @@ -139,7 +139,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 109 + 977 * mid.hashCode() + 2 * expression.hashCode() + 947 * tail.hashCode() ; + return 2 + 947 * mid.hashCode() + 281 * expression.hashCode() + 409 * tail.hashCode() ; } @@ -251,7 +251,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 281 + 409 * mid.hashCode() + 97 * template.hashCode() + 607 * tail.hashCode() ; + return 97 + 607 * mid.hashCode() + 547 * template.hashCode() + 283 * tail.hashCode() ; } @@ -343,7 +343,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 547 + 283 * post.hashCode() ; + return 757 + 347 * post.hashCode() ; } diff --git a/src/org/rascalmpl/ast/StringTemplate.java b/src/org/rascalmpl/ast/StringTemplate.java index 5dc7be9140a..48e3018dad7 100644 --- a/src/org/rascalmpl/ast/StringTemplate.java +++ b/src/org/rascalmpl/ast/StringTemplate.java @@ -202,7 +202,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 757 + 347 * preStats.hashCode() + 73 * body.hashCode() + 181 * postStats.hashCode() + 499 * condition.hashCode() ; + return 73 + 181 * preStats.hashCode() + 499 * body.hashCode() + 227 * postStats.hashCode() + 389 * condition.hashCode() ; } @@ -339,7 +339,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 227 + 389 * generators.hashCode() + 479 * preStats.hashCode() + 103 * body.hashCode() + 859 * postStats.hashCode() ; + return 479 + 103 * generators.hashCode() + 859 * preStats.hashCode() + 163 * body.hashCode() + 739 * postStats.hashCode() ; } @@ -476,7 +476,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 163 + 739 * conditions.hashCode() + 821 * preStats.hashCode() + 977 * body.hashCode() + 677 * postStats.hashCode() ; + return 821 + 977 * conditions.hashCode() + 677 * preStats.hashCode() + 11 * body.hashCode() + 691 * postStats.hashCode() ; } @@ -647,7 +647,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 11 + 691 * conditions.hashCode() + 71 * preStatsThen.hashCode() + 181 * thenString.hashCode() + 199 * postStatsThen.hashCode() + 787 * preStatsElse.hashCode() + 193 * elseString.hashCode() + 199 * postStatsElse.hashCode() ; + return 71 + 181 * conditions.hashCode() + 199 * preStatsThen.hashCode() + 787 * thenString.hashCode() + 193 * postStatsThen.hashCode() + 199 * preStatsElse.hashCode() + 389 * elseString.hashCode() + 281 * postStatsElse.hashCode() ; } @@ -809,7 +809,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 389 + 281 * condition.hashCode() + 389 * preStats.hashCode() + 683 * body.hashCode() + 577 * postStats.hashCode() ; + return 389 + 683 * condition.hashCode() + 577 * preStats.hashCode() + 653 * body.hashCode() + 73 * postStats.hashCode() ; } diff --git a/src/org/rascalmpl/ast/StructuredType.java b/src/org/rascalmpl/ast/StructuredType.java index 16cf2840974..521002c3eac 100644 --- a/src/org/rascalmpl/ast/StructuredType.java +++ b/src/org/rascalmpl/ast/StructuredType.java @@ -110,7 +110,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 653 + 73 * basicType.hashCode() + 991 * arguments.hashCode() ; + return 991 + 911 * basicType.hashCode() + 379 * arguments.hashCode() ; } diff --git a/src/org/rascalmpl/ast/Sym.java b/src/org/rascalmpl/ast/Sym.java index ae33e8d9f24..706f9e0fbf7 100644 --- a/src/org/rascalmpl/ast/Sym.java +++ b/src/org/rascalmpl/ast/Sym.java @@ -187,7 +187,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 911 + 379 * first.hashCode() + 811 * alternatives.hashCode() ; + return 811 + 373 * first.hashCode() + 83 * alternatives.hashCode() ; } @@ -270,7 +270,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 373 + 83 * cistring.hashCode() ; + return 71 + 683 * cistring.hashCode() ; } @@ -344,7 +344,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 71 + 683 * charClass.hashCode() ; + return 839 + 577 * charClass.hashCode() ; } @@ -428,7 +428,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 839 + 577 * symbol.hashCode() + 41 * column.hashCode() ; + return 41 + 809 * symbol.hashCode() + 821 * column.hashCode() ; } @@ -501,7 +501,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 809 ; + return 821 ; } @@ -566,7 +566,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 821 + 821 * symbol.hashCode() ; + return 59 + 139 * symbol.hashCode() ; } @@ -650,7 +650,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 59 + 139 * symbol.hashCode() + 233 * label.hashCode() ; + return 233 + 331 * symbol.hashCode() + 359 * label.hashCode() ; } @@ -743,7 +743,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 331 + 359 * symbol.hashCode() + 151 * match.hashCode() ; + return 151 + 311 * symbol.hashCode() + 73 * match.hashCode() ; } @@ -826,7 +826,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 311 + 73 * symbol.hashCode() ; + return 619 + 5 * symbol.hashCode() ; } @@ -910,7 +910,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 619 + 5 * symbol.hashCode() + 191 * sep.hashCode() ; + return 191 + 467 * symbol.hashCode() + 149 * sep.hashCode() ; } @@ -993,7 +993,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 467 + 149 * symbol.hashCode() ; + return 19 + 761 * symbol.hashCode() ; } @@ -1077,7 +1077,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 19 + 761 * symbol.hashCode() + 89 * sep.hashCode() ; + return 89 + 587 * symbol.hashCode() + 67 * sep.hashCode() ; } @@ -1170,7 +1170,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 587 + 67 * symbol.hashCode() + 191 * label.hashCode() ; + return 191 + 577 * symbol.hashCode() + 263 * label.hashCode() ; } @@ -1253,7 +1253,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 577 + 263 * string.hashCode() ; + return 647 + 991 * string.hashCode() ; } @@ -1327,7 +1327,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 647 + 991 * nonterminal.hashCode() ; + return 409 + 907 * nonterminal.hashCode() ; } @@ -1411,7 +1411,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 409 + 907 * symbol.hashCode() + 89 * match.hashCode() ; + return 89 + 347 * symbol.hashCode() + 509 * match.hashCode() ; } @@ -1504,7 +1504,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 347 + 509 * match.hashCode() + 151 * symbol.hashCode() ; + return 151 + 599 * match.hashCode() + 29 * symbol.hashCode() ; } @@ -1587,7 +1587,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 599 + 29 * symbol.hashCode() ; + return 941 + 103 * symbol.hashCode() ; } @@ -1661,7 +1661,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 941 + 103 * nonterminal.hashCode() ; + return 67 + 769 * nonterminal.hashCode() ; } @@ -1747,7 +1747,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 67 + 769 * nonterminal.hashCode() + 149 * parameters.hashCode() ; + return 149 + 541 * nonterminal.hashCode() + 353 * parameters.hashCode() ; } @@ -1840,7 +1840,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 541 + 353 * match.hashCode() + 23 * symbol.hashCode() ; + return 23 + 787 * match.hashCode() + 863 * symbol.hashCode() ; } @@ -1935,7 +1935,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 787 + 863 * first.hashCode() + 557 * sequence.hashCode() ; + return 557 + 61 * first.hashCode() + 281 * sequence.hashCode() ; } @@ -2018,7 +2018,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 61 + 281 * nonterminal.hashCode() ; + return 263 + 19 * nonterminal.hashCode() ; } @@ -2092,7 +2092,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 263 + 19 * symbol.hashCode() ; + return 61 + 241 * symbol.hashCode() ; } @@ -2176,7 +2176,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 61 + 241 * symbol.hashCode() + 409 * match.hashCode() ; + return 409 + 443 * symbol.hashCode() + 11 * match.hashCode() ; } diff --git a/src/org/rascalmpl/ast/SyntaxDefinition.java b/src/org/rascalmpl/ast/SyntaxDefinition.java index 55f99a56e2b..56a534b5bc6 100644 --- a/src/org/rascalmpl/ast/SyntaxDefinition.java +++ b/src/org/rascalmpl/ast/SyntaxDefinition.java @@ -122,7 +122,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 443 + 11 * defined.hashCode() + 389 * production.hashCode() ; + return 389 + 229 * defined.hashCode() + 193 * production.hashCode() ; } @@ -225,7 +225,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 229 + 193 * start.hashCode() + 617 * defined.hashCode() + 521 * production.hashCode() ; + return 617 + 521 * start.hashCode() + 269 * defined.hashCode() + 839 * production.hashCode() ; } @@ -337,7 +337,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 269 + 839 * vis.hashCode() + 743 * defined.hashCode() + 751 * production.hashCode() ; + return 743 + 751 * vis.hashCode() + 241 * defined.hashCode() + 911 * production.hashCode() ; } @@ -439,7 +439,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 241 + 911 * defined.hashCode() + 827 * production.hashCode() ; + return 827 + 29 * defined.hashCode() + 947 * production.hashCode() ; } diff --git a/src/org/rascalmpl/ast/Tag.java b/src/org/rascalmpl/ast/Tag.java index e2615d2a30f..7e03763917c 100644 --- a/src/org/rascalmpl/ast/Tag.java +++ b/src/org/rascalmpl/ast/Tag.java @@ -115,7 +115,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 29 + 947 * name.hashCode() + 883 * contents.hashCode() ; + return 883 + 743 * name.hashCode() + 313 * contents.hashCode() ; } @@ -198,7 +198,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 743 + 313 * name.hashCode() ; + return 607 + 727 * name.hashCode() ; } @@ -282,7 +282,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 607 + 727 * name.hashCode() + 883 * expression.hashCode() ; + return 883 + 617 * name.hashCode() + 233 * expression.hashCode() ; } diff --git a/src/org/rascalmpl/ast/Tags.java b/src/org/rascalmpl/ast/Tags.java index f4cf57584a6..e239513bad2 100644 --- a/src/org/rascalmpl/ast/Tags.java +++ b/src/org/rascalmpl/ast/Tags.java @@ -93,7 +93,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 617 + 233 * tags.hashCode() ; + return 263 + 163 * tags.hashCode() ; } diff --git a/src/org/rascalmpl/ast/Target.java b/src/org/rascalmpl/ast/Target.java index dadd78fdb14..f0149eddb21 100644 --- a/src/org/rascalmpl/ast/Target.java +++ b/src/org/rascalmpl/ast/Target.java @@ -81,7 +81,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 263 ; + return 683 ; } @@ -146,7 +146,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 163 + 683 * name.hashCode() ; + return 661 + 499 * name.hashCode() ; } diff --git a/src/org/rascalmpl/ast/Toplevel.java b/src/org/rascalmpl/ast/Toplevel.java index 199e99f8689..739b782b1fc 100644 --- a/src/org/rascalmpl/ast/Toplevel.java +++ b/src/org/rascalmpl/ast/Toplevel.java @@ -91,7 +91,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 661 + 499 * declaration.hashCode() ; + return 769 + 163 * declaration.hashCode() ; } diff --git a/src/org/rascalmpl/ast/Type.java b/src/org/rascalmpl/ast/Type.java index abdf2c89d3d..2763bb1a49a 100644 --- a/src/org/rascalmpl/ast/Type.java +++ b/src/org/rascalmpl/ast/Type.java @@ -140,7 +140,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 769 + 163 * basic.hashCode() ; + return 641 + 313 * basic.hashCode() ; } @@ -214,7 +214,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 641 + 313 * type.hashCode() ; + return 509 + 563 * type.hashCode() ; } @@ -288,7 +288,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 509 + 563 * function.hashCode() ; + return 149 + 431 * function.hashCode() ; } @@ -362,7 +362,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 149 + 431 * selector.hashCode() ; + return 67 + 19 * selector.hashCode() ; } @@ -436,7 +436,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 67 + 19 * structured.hashCode() ; + return 181 + 599 * structured.hashCode() ; } @@ -510,7 +510,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 181 + 599 * symbol.hashCode() ; + return 101 + 421 * symbol.hashCode() ; } @@ -584,7 +584,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 101 + 421 * user.hashCode() ; + return 277 + 487 * user.hashCode() ; } @@ -658,7 +658,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 277 + 487 * typeVar.hashCode() ; + return 797 + 787 * typeVar.hashCode() ; } diff --git a/src/org/rascalmpl/ast/TypeArg.java b/src/org/rascalmpl/ast/TypeArg.java index d340caba1a6..82dd668f9d7 100644 --- a/src/org/rascalmpl/ast/TypeArg.java +++ b/src/org/rascalmpl/ast/TypeArg.java @@ -98,7 +98,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 797 + 787 * type.hashCode() ; + return 397 + 191 * type.hashCode() ; } @@ -182,7 +182,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 397 + 191 * type.hashCode() + 977 * name.hashCode() ; + return 977 + 173 * type.hashCode() + 541 * name.hashCode() ; } diff --git a/src/org/rascalmpl/ast/TypeVar.java b/src/org/rascalmpl/ast/TypeVar.java index 34164dfd19d..1553e1baf48 100644 --- a/src/org/rascalmpl/ast/TypeVar.java +++ b/src/org/rascalmpl/ast/TypeVar.java @@ -108,7 +108,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 173 + 541 * name.hashCode() + 491 * bound.hashCode() ; + return 491 + 331 * name.hashCode() + 167 * bound.hashCode() ; } @@ -191,7 +191,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 331 + 167 * name.hashCode() ; + return 809 + 109 * name.hashCode() ; } diff --git a/src/org/rascalmpl/ast/UserType.java b/src/org/rascalmpl/ast/UserType.java index 69a206d97e2..dadb13a5c1a 100644 --- a/src/org/rascalmpl/ast/UserType.java +++ b/src/org/rascalmpl/ast/UserType.java @@ -98,7 +98,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 809 + 109 * name.hashCode() ; + return 373 + 449 * name.hashCode() ; } @@ -184,7 +184,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 373 + 449 * name.hashCode() + 571 * parameters.hashCode() ; + return 571 + 467 * name.hashCode() + 691 * parameters.hashCode() ; } diff --git a/src/org/rascalmpl/ast/Variable.java b/src/org/rascalmpl/ast/Variable.java index 6e768417d22..d1721f58da1 100644 --- a/src/org/rascalmpl/ast/Variable.java +++ b/src/org/rascalmpl/ast/Variable.java @@ -108,7 +108,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 467 + 691 * name.hashCode() + 701 * initial.hashCode() ; + return 701 + 19 * name.hashCode() + 137 * initial.hashCode() ; } @@ -191,7 +191,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 19 + 137 * name.hashCode() ; + return 907 + 41 * name.hashCode() ; } diff --git a/src/org/rascalmpl/ast/Variant.java b/src/org/rascalmpl/ast/Variant.java index 119a76ac9cc..e224303aed1 100644 --- a/src/org/rascalmpl/ast/Variant.java +++ b/src/org/rascalmpl/ast/Variant.java @@ -127,7 +127,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 907 + 41 * name.hashCode() + 59 * arguments.hashCode() + 823 * keywordArguments.hashCode() ; + return 59 + 823 * name.hashCode() + 139 * arguments.hashCode() + 293 * keywordArguments.hashCode() ; } diff --git a/src/org/rascalmpl/ast/Visibility.java b/src/org/rascalmpl/ast/Visibility.java index 5272568e81a..5e439c09aa3 100644 --- a/src/org/rascalmpl/ast/Visibility.java +++ b/src/org/rascalmpl/ast/Visibility.java @@ -74,7 +74,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 139 ; + return 773 ; } @@ -184,7 +184,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 773 ; + return 421 ; } diff --git a/src/org/rascalmpl/ast/Visit.java b/src/org/rascalmpl/ast/Visit.java index f2cedfe32ab..f91c1c3eda0 100644 --- a/src/org/rascalmpl/ast/Visit.java +++ b/src/org/rascalmpl/ast/Visit.java @@ -117,7 +117,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 293 + 421 * subject.hashCode() + 467 * cases.hashCode() ; + return 467 + 181 * subject.hashCode() + 383 * cases.hashCode() ; } @@ -222,7 +222,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 181 + 383 * strategy.hashCode() + 263 * subject.hashCode() + 463 * cases.hashCode() ; + return 263 + 463 * strategy.hashCode() + 223 * subject.hashCode() + 139 * cases.hashCode() ; } diff --git a/src/org/rascalmpl/library/lang/rascal/syntax/Rascal.rsc b/src/org/rascalmpl/library/lang/rascal/syntax/Rascal.rsc index 4392ac7ac02..ebcd1392cfb 100644 --- a/src/org/rascalmpl/library/lang/rascal/syntax/Rascal.rsc +++ b/src/org/rascalmpl/library/lang/rascal/syntax/Rascal.rsc @@ -210,7 +210,7 @@ syntax Expression | \list : "[" {Expression ","}* elements0 "]" | reifyType : "#" Type type !>> "[" !selector | range : "[" Expression first ".." Expression last "]" - | \tuple : "\<" {Expression ","}+ elements "\>" + | \tuple : "\<" {Expression ","}* elements0 "\>" | \map : "(" {Mapping[Expression] ","}* mappings ")" | \it : [A-Z a-z _] !<< "it" !>> [A-Z a-z _] | qualifiedName : QualifiedName qualifiedName diff --git a/src/org/rascalmpl/library/lang/rascal/syntax/RascalParser.java b/src/org/rascalmpl/library/lang/rascal/syntax/RascalParser.java index ea5ae63e9ae..2c68f56b04f 100644 --- a/src/org/rascalmpl/library/lang/rascal/syntax/RascalParser.java +++ b/src/org/rascalmpl/library/lang/rascal/syntax/RascalParser.java @@ -73,6 +73,76 @@ protected static IntegerKeyedHashMap _initDontNest() { + _putDontNest(result, 887, 1279); + + _putDontNest(result, 887, 1388); + + _putDontNest(result, 887, 1378); + + _putDontNest(result, 887, 1198); + + _putDontNest(result, 887, 1426); + + _putDontNest(result, 887, 1369); + + _putDontNest(result, 887, 1300); + + _putDontNest(result, 887, 1205); + + _putDontNest(result, 887, 1310); + + _putDontNest(result, 887, 1454); + + _putDontNest(result, 887, 1225); + + _putDontNest(result, 887, 1417); + + _putDontNest(result, 887, 1248); + + _putDontNest(result, 887, 1191); + + _putDontNest(result, 887, 1330); + + _putDontNest(result, 887, 1407); + + _putDontNest(result, 887, 1185); + + _putDontNest(result, 887, 1464); + + _putDontNest(result, 887, 1474); + + _putDontNest(result, 887, 1320); + + _putDontNest(result, 887, 1269); + + _putDontNest(result, 887, 1289); + + _putDontNest(result, 887, 1215); + + _putDontNest(result, 887, 1397); + + _putDontNest(result, 887, 1445); + + _putDontNest(result, 887, 1173); + + _putDontNest(result, 887, 1234); + + _putDontNest(result, 887, 1435); + + _putDontNest(result, 887, 1360); + + _putDontNest(result, 887, 1351); + + _putDontNest(result, 887, 1489); + + _putDontNest(result, 887, 1067); + + _putDontNest(result, 887, 1339); + + _putDontNest(result, 887, 1092); + + _putDontNest(result, 887, 1257); + _putDontNest(result, 1373, 1388); _putDontNest(result, 1373, 1378); @@ -327,76 +397,6 @@ protected static IntegerKeyedHashMap _initDontNest() { _putDontNest(result, 1449, 1454); - _putDontNest(result, 906, 1279); - - _putDontNest(result, 906, 1388); - - _putDontNest(result, 906, 1378); - - _putDontNest(result, 906, 1198); - - _putDontNest(result, 906, 1426); - - _putDontNest(result, 906, 1369); - - _putDontNest(result, 906, 1300); - - _putDontNest(result, 906, 1205); - - _putDontNest(result, 906, 1310); - - _putDontNest(result, 906, 1454); - - _putDontNest(result, 906, 1225); - - _putDontNest(result, 906, 1417); - - _putDontNest(result, 906, 1248); - - _putDontNest(result, 906, 1191); - - _putDontNest(result, 906, 1330); - - _putDontNest(result, 906, 1407); - - _putDontNest(result, 906, 1185); - - _putDontNest(result, 906, 1464); - - _putDontNest(result, 906, 1474); - - _putDontNest(result, 906, 1320); - - _putDontNest(result, 906, 1269); - - _putDontNest(result, 906, 1289); - - _putDontNest(result, 906, 1215); - - _putDontNest(result, 906, 1397); - - _putDontNest(result, 906, 1445); - - _putDontNest(result, 906, 1173); - - _putDontNest(result, 906, 1234); - - _putDontNest(result, 906, 1435); - - _putDontNest(result, 906, 1360); - - _putDontNest(result, 906, 1351); - - _putDontNest(result, 906, 1489); - - _putDontNest(result, 906, 1067); - - _putDontNest(result, 906, 1339); - - _putDontNest(result, 906, 1092); - - _putDontNest(result, 906, 1257); - _putDontNest(result, 1344, 1388); _putDontNest(result, 1344, 1378); @@ -427,7 +427,7 @@ protected static IntegerKeyedHashMap _initDontNest() { _putDontNest(result, 1344, 1351); - _putDontNest(result, 8467, 860); + _putDontNest(result, 8467, 841); _putDontNest(result, 1262, 1279); @@ -567,6 +567,76 @@ protected static IntegerKeyedHashMap _initDontNest() { _putDontNest(result, 1097, 1257); + _putDontNest(result, 931, 1279); + + _putDontNest(result, 931, 1388); + + _putDontNest(result, 931, 1378); + + _putDontNest(result, 931, 1198); + + _putDontNest(result, 931, 1426); + + _putDontNest(result, 931, 1369); + + _putDontNest(result, 931, 1300); + + _putDontNest(result, 931, 1205); + + _putDontNest(result, 931, 1310); + + _putDontNest(result, 931, 1454); + + _putDontNest(result, 931, 1225); + + _putDontNest(result, 931, 1417); + + _putDontNest(result, 931, 1248); + + _putDontNest(result, 931, 1191); + + _putDontNest(result, 931, 1330); + + _putDontNest(result, 931, 1407); + + _putDontNest(result, 931, 1185); + + _putDontNest(result, 931, 1464); + + _putDontNest(result, 931, 1474); + + _putDontNest(result, 931, 1320); + + _putDontNest(result, 931, 1269); + + _putDontNest(result, 931, 1289); + + _putDontNest(result, 931, 1215); + + _putDontNest(result, 931, 1397); + + _putDontNest(result, 931, 1445); + + _putDontNest(result, 931, 1173); + + _putDontNest(result, 931, 1234); + + _putDontNest(result, 931, 1435); + + _putDontNest(result, 931, 1360); + + _putDontNest(result, 931, 1351); + + _putDontNest(result, 931, 1489); + + _putDontNest(result, 931, 1067); + + _putDontNest(result, 931, 1339); + + _putDontNest(result, 931, 1092); + + _putDontNest(result, 931, 1257); + _putDontNest(result, 1459, 1474); _putDontNest(result, 1459, 1489); @@ -1671,6 +1741,76 @@ protected static IntegerKeyedHashMap _initDontNest() { _putDontNest(result, 1383, 1464); + _putDontNest(result, 982, 1279); + + _putDontNest(result, 982, 1388); + + _putDontNest(result, 982, 1378); + + _putDontNest(result, 982, 1198); + + _putDontNest(result, 982, 1426); + + _putDontNest(result, 982, 1369); + + _putDontNest(result, 982, 1300); + + _putDontNest(result, 982, 1205); + + _putDontNest(result, 982, 1310); + + _putDontNest(result, 982, 1454); + + _putDontNest(result, 982, 1225); + + _putDontNest(result, 982, 1417); + + _putDontNest(result, 982, 1248); + + _putDontNest(result, 982, 1191); + + _putDontNest(result, 982, 1330); + + _putDontNest(result, 982, 1407); + + _putDontNest(result, 982, 1185); + + _putDontNest(result, 982, 1464); + + _putDontNest(result, 982, 1474); + + _putDontNest(result, 982, 1320); + + _putDontNest(result, 982, 1269); + + _putDontNest(result, 982, 1289); + + _putDontNest(result, 982, 1215); + + _putDontNest(result, 982, 1397); + + _putDontNest(result, 982, 1445); + + _putDontNest(result, 982, 1173); + + _putDontNest(result, 982, 1234); + + _putDontNest(result, 982, 1435); + + _putDontNest(result, 982, 1360); + + _putDontNest(result, 982, 1351); + + _putDontNest(result, 982, 1489); + + _putDontNest(result, 982, 1067); + + _putDontNest(result, 982, 1339); + + _putDontNest(result, 982, 1092); + + _putDontNest(result, 982, 1257); + _putDontNest(result, 1325, 1388); _putDontNest(result, 1325, 1378); @@ -1859,6 +1999,16 @@ protected static IntegerKeyedHashMap _initDontNest() { _putDontNest(result, 14450, 14472); + _putDontNest(result, 4494, 4645); + + _putDontNest(result, 4494, 4639); + + _putDontNest(result, 4494, 4607); + + _putDontNest(result, 4494, 4618); + + _putDontNest(result, 4494, 4627); + _putDontNest(result, 1435, 1464); _putDontNest(result, 1435, 1474); @@ -1869,15 +2019,69 @@ protected static IntegerKeyedHashMap _initDontNest() { _putDontNest(result, 1435, 1454); - _putDontNest(result, 4494, 4645); + _putDontNest(result, 907, 1279); - _putDontNest(result, 4494, 4639); + _putDontNest(result, 907, 1388); - _putDontNest(result, 4494, 4607); + _putDontNest(result, 907, 1378); - _putDontNest(result, 4494, 4618); + _putDontNest(result, 907, 1198); - _putDontNest(result, 4494, 4627); + _putDontNest(result, 907, 1426); + + _putDontNest(result, 907, 1369); + + _putDontNest(result, 907, 1300); + + _putDontNest(result, 907, 1445); + + _putDontNest(result, 907, 1205); + + _putDontNest(result, 907, 1310); + + _putDontNest(result, 907, 1257); + + _putDontNest(result, 907, 1454); + + _putDontNest(result, 907, 1225); + + _putDontNest(result, 907, 1417); + + _putDontNest(result, 907, 1248); + + _putDontNest(result, 907, 1191); + + _putDontNest(result, 907, 1330); + + _putDontNest(result, 907, 1407); + + _putDontNest(result, 907, 1185); + + _putDontNest(result, 907, 1464); + + _putDontNest(result, 907, 1474); + + _putDontNest(result, 907, 1320); + + _putDontNest(result, 907, 1269); + + _putDontNest(result, 907, 1289); + + _putDontNest(result, 907, 1215); + + _putDontNest(result, 907, 1397); + + _putDontNest(result, 907, 1234); + + _putDontNest(result, 907, 1435); + + _putDontNest(result, 907, 1360); + + _putDontNest(result, 907, 1351); + + _putDontNest(result, 907, 1489); + + _putDontNest(result, 907, 1339); _putDontNest(result, 1562, 1573); @@ -1911,6 +2115,76 @@ protected static IntegerKeyedHashMap _initDontNest() { _putDontNest(result, 14366, 14472); + _putDontNest(result, 815, 1279); + + _putDontNest(result, 815, 1388); + + _putDontNest(result, 815, 1378); + + _putDontNest(result, 815, 1198); + + _putDontNest(result, 815, 1426); + + _putDontNest(result, 815, 1369); + + _putDontNest(result, 815, 1300); + + _putDontNest(result, 815, 1205); + + _putDontNest(result, 815, 1310); + + _putDontNest(result, 815, 1454); + + _putDontNest(result, 815, 1225); + + _putDontNest(result, 815, 1417); + + _putDontNest(result, 815, 1248); + + _putDontNest(result, 815, 1191); + + _putDontNest(result, 815, 1330); + + _putDontNest(result, 815, 1407); + + _putDontNest(result, 815, 1185); + + _putDontNest(result, 815, 1464); + + _putDontNest(result, 815, 1474); + + _putDontNest(result, 815, 1320); + + _putDontNest(result, 815, 1269); + + _putDontNest(result, 815, 1289); + + _putDontNest(result, 815, 1215); + + _putDontNest(result, 815, 1397); + + _putDontNest(result, 815, 1445); + + _putDontNest(result, 815, 1173); + + _putDontNest(result, 815, 1234); + + _putDontNest(result, 815, 1435); + + _putDontNest(result, 815, 1360); + + _putDontNest(result, 815, 1351); + + _putDontNest(result, 815, 1489); + + _putDontNest(result, 815, 1067); + + _putDontNest(result, 815, 1339); + + _putDontNest(result, 815, 1092); + + _putDontNest(result, 815, 1257); + _putDontNest(result, 1360, 1388); _putDontNest(result, 1360, 1378); @@ -1999,76 +2273,6 @@ protected static IntegerKeyedHashMap _initDontNest() { _putDontNest(result, 1339, 1339); - _putDontNest(result, 834, 1279); - - _putDontNest(result, 834, 1388); - - _putDontNest(result, 834, 1378); - - _putDontNest(result, 834, 1198); - - _putDontNest(result, 834, 1426); - - _putDontNest(result, 834, 1369); - - _putDontNest(result, 834, 1300); - - _putDontNest(result, 834, 1205); - - _putDontNest(result, 834, 1310); - - _putDontNest(result, 834, 1454); - - _putDontNest(result, 834, 1225); - - _putDontNest(result, 834, 1417); - - _putDontNest(result, 834, 1248); - - _putDontNest(result, 834, 1191); - - _putDontNest(result, 834, 1330); - - _putDontNest(result, 834, 1407); - - _putDontNest(result, 834, 1185); - - _putDontNest(result, 834, 1464); - - _putDontNest(result, 834, 1474); - - _putDontNest(result, 834, 1320); - - _putDontNest(result, 834, 1269); - - _putDontNest(result, 834, 1289); - - _putDontNest(result, 834, 1215); - - _putDontNest(result, 834, 1397); - - _putDontNest(result, 834, 1445); - - _putDontNest(result, 834, 1173); - - _putDontNest(result, 834, 1234); - - _putDontNest(result, 834, 1435); - - _putDontNest(result, 834, 1360); - - _putDontNest(result, 834, 1351); - - _putDontNest(result, 834, 1489); - - _putDontNest(result, 834, 1067); - - _putDontNest(result, 834, 1339); - - _putDontNest(result, 834, 1092); - - _putDontNest(result, 834, 1257); - _putDontNest(result, 1205, 1279); _putDontNest(result, 1205, 1388); @@ -2207,9 +2411,9 @@ protected static IntegerKeyedHashMap _initDontNest() { _putDontNest(result, 1310, 1339); - _putDontNest(result, 10686, 860); + _putDontNest(result, 10686, 841); - _putDontNest(result, 10686, 791); + _putDontNest(result, 10686, 999); _putDontNest(result, 1015, 1279); @@ -2425,76 +2629,6 @@ protected static IntegerKeyedHashMap _initDontNest() { _putDontNest(result, 10745, 10544); - _putDontNest(result, 1001, 1279); - - _putDontNest(result, 1001, 1388); - - _putDontNest(result, 1001, 1378); - - _putDontNest(result, 1001, 1198); - - _putDontNest(result, 1001, 1426); - - _putDontNest(result, 1001, 1369); - - _putDontNest(result, 1001, 1300); - - _putDontNest(result, 1001, 1205); - - _putDontNest(result, 1001, 1310); - - _putDontNest(result, 1001, 1454); - - _putDontNest(result, 1001, 1225); - - _putDontNest(result, 1001, 1417); - - _putDontNest(result, 1001, 1248); - - _putDontNest(result, 1001, 1191); - - _putDontNest(result, 1001, 1330); - - _putDontNest(result, 1001, 1407); - - _putDontNest(result, 1001, 1185); - - _putDontNest(result, 1001, 1464); - - _putDontNest(result, 1001, 1474); - - _putDontNest(result, 1001, 1320); - - _putDontNest(result, 1001, 1269); - - _putDontNest(result, 1001, 1289); - - _putDontNest(result, 1001, 1215); - - _putDontNest(result, 1001, 1397); - - _putDontNest(result, 1001, 1445); - - _putDontNest(result, 1001, 1173); - - _putDontNest(result, 1001, 1234); - - _putDontNest(result, 1001, 1435); - - _putDontNest(result, 1001, 1360); - - _putDontNest(result, 1001, 1351); - - _putDontNest(result, 1001, 1489); - - _putDontNest(result, 1001, 1067); - - _putDontNest(result, 1001, 1339); - - _putDontNest(result, 1001, 1092); - - _putDontNest(result, 1001, 1257); - _putDontNest(result, 1257, 1279); _putDontNest(result, 1257, 1388); @@ -2565,70 +2699,6 @@ protected static IntegerKeyedHashMap _initDontNest() { _putDontNest(result, 14490, 14472); - _putDontNest(result, 926, 1279); - - _putDontNest(result, 926, 1388); - - _putDontNest(result, 926, 1378); - - _putDontNest(result, 926, 1198); - - _putDontNest(result, 926, 1426); - - _putDontNest(result, 926, 1369); - - _putDontNest(result, 926, 1300); - - _putDontNest(result, 926, 1445); - - _putDontNest(result, 926, 1205); - - _putDontNest(result, 926, 1310); - - _putDontNest(result, 926, 1257); - - _putDontNest(result, 926, 1454); - - _putDontNest(result, 926, 1225); - - _putDontNest(result, 926, 1417); - - _putDontNest(result, 926, 1248); - - _putDontNest(result, 926, 1191); - - _putDontNest(result, 926, 1330); - - _putDontNest(result, 926, 1407); - - _putDontNest(result, 926, 1185); - - _putDontNest(result, 926, 1464); - - _putDontNest(result, 926, 1474); - - _putDontNest(result, 926, 1320); - - _putDontNest(result, 926, 1269); - - _putDontNest(result, 926, 1289); - - _putDontNest(result, 926, 1215); - - _putDontNest(result, 926, 1397); - - _putDontNest(result, 926, 1234); - - _putDontNest(result, 926, 1435); - - _putDontNest(result, 926, 1360); - - _putDontNest(result, 926, 1351); - - _putDontNest(result, 926, 1489); - - _putDontNest(result, 926, 1339); - _putDontNest(result, 14472, 14463); _putDontNest(result, 14472, 14481); @@ -2703,76 +2773,6 @@ protected static IntegerKeyedHashMap _initDontNest() { _putDontNest(result, 1225, 1339); - _putDontNest(result, 950, 1279); - - _putDontNest(result, 950, 1388); - - _putDontNest(result, 950, 1378); - - _putDontNest(result, 950, 1198); - - _putDontNest(result, 950, 1426); - - _putDontNest(result, 950, 1369); - - _putDontNest(result, 950, 1300); - - _putDontNest(result, 950, 1205); - - _putDontNest(result, 950, 1310); - - _putDontNest(result, 950, 1454); - - _putDontNest(result, 950, 1225); - - _putDontNest(result, 950, 1417); - - _putDontNest(result, 950, 1248); - - _putDontNest(result, 950, 1191); - - _putDontNest(result, 950, 1330); - - _putDontNest(result, 950, 1407); - - _putDontNest(result, 950, 1185); - - _putDontNest(result, 950, 1464); - - _putDontNest(result, 950, 1474); - - _putDontNest(result, 950, 1320); - - _putDontNest(result, 950, 1269); - - _putDontNest(result, 950, 1289); - - _putDontNest(result, 950, 1215); - - _putDontNest(result, 950, 1397); - - _putDontNest(result, 950, 1445); - - _putDontNest(result, 950, 1173); - - _putDontNest(result, 950, 1234); - - _putDontNest(result, 950, 1435); - - _putDontNest(result, 950, 1360); - - _putDontNest(result, 950, 1351); - - _putDontNest(result, 950, 1489); - - _putDontNest(result, 950, 1067); - - _putDontNest(result, 950, 1339); - - _putDontNest(result, 950, 1092); - - _putDontNest(result, 950, 1257); - _putDontNest(result, 14467, 14500); _putDontNest(result, 1274, 1388); @@ -2933,6 +2933,12 @@ protected static IntegerMap _initDontNestGroups() { result.putUnsafe(1205, resultStoreId); ++resultStoreId; + result.putUnsafe(8467, resultStoreId); + ++resultStoreId; + + result.putUnsafe(14138, resultStoreId); + ++resultStoreId; + result.putUnsafe(1388, resultStoreId); result.putUnsafe(1397, resultStoreId); ++resultStoreId; @@ -2944,22 +2950,11 @@ protected static IntegerMap _initDontNestGroups() { result.putUnsafe(1289, resultStoreId); ++resultStoreId; - result.putUnsafe(1024, resultStoreId); - result.putUnsafe(1045, resultStoreId); - result.putUnsafe(1053, resultStoreId); - result.putUnsafe(926, resultStoreId); - result.putUnsafe(1170, resultStoreId); - result.putUnsafe(1133, resultStoreId); - result.putUnsafe(1087, resultStoreId); - result.putUnsafe(1015, resultStoreId); - result.putUnsafe(1062, resultStoreId); - ++resultStoreId; - - result.putUnsafe(906, resultStoreId); + result.putUnsafe(887, resultStoreId); result.putUnsafe(1097, resultStoreId); - result.putUnsafe(834, resultStoreId); - result.putUnsafe(1001, resultStoreId); - result.putUnsafe(950, resultStoreId); + result.putUnsafe(931, resultStoreId); + result.putUnsafe(982, resultStoreId); + result.putUnsafe(815, resultStoreId); ++resultStoreId; result.putUnsafe(1234, resultStoreId); @@ -2998,18 +2993,15 @@ protected static IntegerMap _initDontNestGroups() { result.putUnsafe(1351, resultStoreId); ++resultStoreId; + result.putUnsafe(1269, resultStoreId); + ++resultStoreId; + result.putUnsafe(1373, resultStoreId); result.putUnsafe(1344, resultStoreId); result.putUnsafe(1355, resultStoreId); result.putUnsafe(1364, resultStoreId); ++resultStoreId; - result.putUnsafe(8467, resultStoreId); - ++resultStoreId; - - result.putUnsafe(1269, resultStoreId); - ++resultStoreId; - result.putUnsafe(1220, resultStoreId); result.putUnsafe(1252, resultStoreId); result.putUnsafe(1238, resultStoreId); @@ -3033,12 +3025,6 @@ protected static IntegerMap _initDontNestGroups() { result.putUnsafe(1274, resultStoreId); ++resultStoreId; - result.putUnsafe(14138, resultStoreId); - ++resultStoreId; - - result.putUnsafe(10686, resultStoreId); - ++resultStoreId; - result.putUnsafe(1248, resultStoreId); ++resultStoreId; @@ -3056,6 +3042,20 @@ protected static IntegerMap _initDontNestGroups() { result.putUnsafe(14472, resultStoreId); ++resultStoreId; + result.putUnsafe(1024, resultStoreId); + result.putUnsafe(1045, resultStoreId); + result.putUnsafe(1053, resultStoreId); + result.putUnsafe(907, resultStoreId); + result.putUnsafe(1170, resultStoreId); + result.putUnsafe(1133, resultStoreId); + result.putUnsafe(1087, resultStoreId); + result.putUnsafe(1015, resultStoreId); + result.putUnsafe(1062, resultStoreId); + ++resultStoreId; + + result.putUnsafe(10686, resultStoreId); + ++resultStoreId; + result.putUnsafe(1210, resultStoreId); ++resultStoreId; @@ -3293,6 +3293,7 @@ protected IntegerList getFilteredParents(int childId) { private static final IConstructor cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIlZhcmlhYmxlIiksW2xheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIiwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIildKSk00 = (IConstructor) _read("regular(\\iter-seps(sort(\"Variable\"),[layouts(\"LAYOUTLIST\"),lit(\",\"),layouts(\"LAYOUTLIST\")]))", RascalValueFactory.Production); private static final IConstructor cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJQcm90b2NvbFBhcnQiKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJzb3J0KFwiUHJvdG9jb2xQYXJ0XCIpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihzb3J0KCJQcm90b2NvbFBhcnQiKSkpfSk00 = (IConstructor) _read("prod(label(\"$MetaHole\",sort(\"ProtocolPart\")),[\\char-class([range(0,0)]),lit(\"sort(\\\"ProtocolPart\\\")\"),lit(\":\"),iter(\\char-class([range(48,57)])),\\char-class([range(0,0)])],{tag(\"holeType\"(sort(\"ProtocolPart\")))})", RascalValueFactory.Production); private static final IConstructor cHJvZChsaXQoIj0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDYxLDYxKV0pXSx7fSk00 = (IConstructor) _read("prod(lit(\"=\"),[\\char-class([range(61,61)])],{})", RascalValueFactory.Production); + private static final IConstructor cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJWYXJpYWJsZSIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoIlxcaXRlci1zZXBzKHNvcnQoXCJWYXJpYWJsZVwiKSxbbGl0KFwiLFwiKV0pIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihcaXRlci1zZXBzKHNvcnQoIlZhcmlhYmxlIiksW2xheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIiwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIildKSkpfSk00 = (IConstructor) _read("prod(label(\"$MetaHole\",sort(\"Variable\")),[\\char-class([range(0,0)]),lit(\"\\\\iter-seps(sort(\\\"Variable\\\"),[lit(\\\",\\\")])\"),lit(\":\"),iter(\\char-class([range(48,57)])),\\char-class([range(0,0)])],{tag(\"holeType\"(\\iter-seps(sort(\"Variable\"),[layouts(\"LAYOUTLIST\"),lit(\",\"),layouts(\"LAYOUTLIST\")])))})", RascalValueFactory.Production); private static final IConstructor cHJvZChsaXQoInNvcnQoXCJUaW1lUGFydE5vVFpcIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODQsODQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOSwxMDkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDgwLDgwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNzgsNzgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDg0LDg0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5MCw5MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00 = (IConstructor) _read("prod(lit(\"sort(\\\"TimePartNoTZ\\\")\"),[\\char-class([range(115,115)]),\\char-class([range(111,111)]),\\char-class([range(114,114)]),\\char-class([range(116,116)]),\\char-class([range(40,40)]),\\char-class([range(34,34)]),\\char-class([range(84,84)]),\\char-class([range(105,105)]),\\char-class([range(109,109)]),\\char-class([range(101,101)]),\\char-class([range(80,80)]),\\char-class([range(97,97)]),\\char-class([range(114,114)]),\\char-class([range(116,116)]),\\char-class([range(78,78)]),\\char-class([range(111,111)]),\\char-class([range(84,84)]),\\char-class([range(90,90)]),\\char-class([range(34,34)]),\\char-class([range(41,41)])],{})", RascalValueFactory.Production); private static final IConstructor cHJvZChsaXQoIi4uLiIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoNDYsNDYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ2LDQ2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0Niw0NildKV0se30p = (IConstructor) _read("prod(lit(\"...\"),[\\char-class([range(46,46)]),\\char-class([range(46,46)]),\\char-class([range(46,46)])],{})", RascalValueFactory.Production); private static final IConstructor cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIlR5cGVBcmciKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000 = (IConstructor) _read("regular(\\iter-seps(sort(\"TypeArg\"),[layouts(\"LAYOUTLIST\"),lit(\",\"),layouts(\"LAYOUTLIST\")]))", RascalValueFactory.Production); @@ -3312,8 +3313,6 @@ protected IntegerList getFilteredParents(int childId) { private static final IConstructor cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzZXEoW1xjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSxvcHQoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKV0pKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoIm9wdChzZXEoW1xcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSksb3B0KFxcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpXSkpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihvcHQoc2VxKFtcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSksb3B0KFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSldKSkpKX0p = (IConstructor) _read("prod(label(\"$MetaHole\",seq([\\char-class([range(48,57)]),opt(\\char-class([range(48,57)]))])),[\\char-class([range(0,0)]),lit(\"opt(seq([\\\\char-class([range(48,57)]),opt(\\\\char-class([range(48,57)]))]))\"),lit(\":\"),iter(\\char-class([range(48,57)])),\\char-class([range(0,0)])],{tag(\"holeType\"(opt(seq([\\char-class([range(48,57)]),opt(\\char-class([range(48,57)]))]))))})", RascalValueFactory.Production); private static final IConstructor cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzZXEoW2NvbmRpdGlvbmFsKFxjaGFyLWNsYXNzKFtyYW5nZSg2NSw5MCldKSx7XG5vdC1wcmVjZWRlKFxjaGFyLWNsYXNzKFtyYW5nZSg2NSw5MCldKSl9KSxjb25kaXRpb25hbChcaXRlci1zdGFyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NykscmFuZ2UoNjUsOTApLHJhbmdlKDk1LDk1KSxyYW5nZSg5NywxMjIpXSkpLHtcbm90LWZvbGxvdyhcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpLHJhbmdlKDY1LDkwKSxyYW5nZSg5NSw5NSkscmFuZ2UoOTcsMTIyKV0pKX0pXSkpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic2VxKFtcXGNoYXItY2xhc3MoW3JhbmdlKDY1LDkwKV0pLFxcaXRlci1zdGFyKFxcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpLHJhbmdlKDY1LDkwKSxyYW5nZSg5NSw5NSkscmFuZ2UoOTcsMTIyKV0pKV0pIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihzZXEoW2NvbmRpdGlvbmFsKFxjaGFyLWNsYXNzKFtyYW5nZSg2NSw5MCldKSx7XG5vdC1wcmVjZWRlKFxjaGFyLWNsYXNzKFtyYW5nZSg2NSw5MCldKSl9KSxjb25kaXRpb25hbChcaXRlci1zdGFyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NykscmFuZ2UoNjUsOTApLHJhbmdlKDk1LDk1KSxyYW5nZSg5NywxMjIpXSkpLHtcbm90LWZvbGxvdyhcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpLHJhbmdlKDY1LDkwKSxyYW5nZSg5NSw5NSkscmFuZ2UoOTcsMTIyKV0pKX0pXSkpKX0p = (IConstructor) _read("prod(label(\"$MetaHole\",seq([conditional(\\char-class([range(65,90)]),{\\not-precede(\\char-class([range(65,90)]))}),conditional(\\iter-star(\\char-class([range(48,57),range(65,90),range(95,95),range(97,122)])),{\\not-follow(\\char-class([range(48,57),range(65,90),range(95,95),range(97,122)]))})])),[\\char-class([range(0,0)]),lit(\"seq([\\\\char-class([range(65,90)]),\\\\iter-star(\\\\char-class([range(48,57),range(65,90),range(95,95),range(97,122)]))])\"),lit(\":\"),iter(\\char-class([range(48,57)])),\\char-class([range(0,0)])],{tag(\"holeType\"(seq([conditional(\\char-class([range(65,90)]),{\\not-precede(\\char-class([range(65,90)]))}),conditional(\\iter-star(\\char-class([range(48,57),range(65,90),range(95,95),range(97,122)])),{\\not-follow(\\char-class([range(48,57),range(65,90),range(95,95),range(97,122)]))})])))})", RascalValueFactory.Production); private static final IConstructor cHJvZChsZXgoIk5vbnRlcm1pbmFsTGFiZWwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDk3LDEyMildKSxjb25kaXRpb25hbChcaXRlci1zdGFyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NykscmFuZ2UoNjUsOTApLHJhbmdlKDk1LDk1KSxyYW5nZSg5NywxMjIpXSkpLHtcbm90LWZvbGxvdyhcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpLHJhbmdlKDY1LDkwKSxyYW5nZSg5NSw5NSkscmFuZ2UoOTcsMTIyKV0pKX0pXSx7fSk00 = (IConstructor) _read("prod(lex(\"NonterminalLabel\"),[\\char-class([range(97,122)]),conditional(\\iter-star(\\char-class([range(48,57),range(65,90),range(95,95),range(97,122)])),{\\not-follow(\\char-class([range(48,57),range(65,90),range(95,95),range(97,122)]))})],{})", RascalValueFactory.Production); - private static final IConstructor cHJvZChsYWJlbCgidHVwbGUiLHNvcnQoIkV4cHJlc3Npb24iKSksW2xpdCgiXDwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImVsZW1lbnRzIixcaXRlci1zZXBzKHNvcnQoIkV4cHJlc3Npb24iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJcPiIpXSx7fSk00 = (IConstructor) _read("prod(label(\"tuple\",sort(\"Expression\")),[lit(\"\\<\"),layouts(\"LAYOUTLIST\"),label(\"elements\",\\iter-seps(sort(\"Expression\"),[layouts(\"LAYOUTLIST\"),lit(\",\"),layouts(\"LAYOUTLIST\")])),layouts(\"LAYOUTLIST\"),lit(\"\\>\")],{})", RascalValueFactory.Production); - private static final IConstructor cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJWYXJpYWJsZSIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoIlxcaXRlci1zZXBzKHNvcnQoXCJWYXJpYWJsZVwiKSxbbGl0KFwiLFwiKV0pIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihcaXRlci1zZXBzKHNvcnQoIlZhcmlhYmxlIiksW2xheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIiwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIildKSkpfSk00 = (IConstructor) _read("prod(label(\"$MetaHole\",sort(\"Variable\")),[\\char-class([range(0,0)]),lit(\"\\\\iter-seps(sort(\\\"Variable\\\"),[lit(\\\",\\\")])\"),lit(\":\"),iter(\\char-class([range(48,57)])),\\char-class([range(0,0)])],{tag(\"holeType\"(\\iter-seps(sort(\"Variable\"),[layouts(\"LAYOUTLIST\"),lit(\",\"),layouts(\"LAYOUTLIST\")])))})", RascalValueFactory.Production); private static final IConstructor cHJvZChsaXQoInx8IiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMjQsMTI0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMjQsMTI0KV0pXSx7fSk00 = (IConstructor) _read("prod(lit(\"||\"),[\\char-class([range(124,124)]),\\char-class([range(124,124)])],{})", RascalValueFactory.Production); private static final IConstructor cHJvZChsYWJlbCgiY2FsbE9yVHJlZSIsc29ydCgiUGF0dGVybiIpKSxbbGFiZWwoImV4cHJlc3Npb24iLHNvcnQoIlBhdHRlcm4iKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiKCIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgiYXJndW1lbnRzIixcaXRlci1zdGFyLXNlcHMoc29ydCgiUGF0dGVybiIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpXSkpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgia2V5d29yZEFyZ3VtZW50cyIsXHBhcmFtZXRlcml6ZWQtc29ydCgiS2V5d29yZEFyZ3VtZW50cyIsW3NvcnQoIlBhdHRlcm4iKV0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIpIildLHt9KQ0000 = (IConstructor) _read("prod(label(\"callOrTree\",sort(\"Pattern\")),[label(\"expression\",sort(\"Pattern\")),layouts(\"LAYOUTLIST\"),lit(\"(\"),layouts(\"LAYOUTLIST\"),label(\"arguments\",\\iter-star-seps(sort(\"Pattern\"),[layouts(\"LAYOUTLIST\"),lit(\",\"),layouts(\"LAYOUTLIST\")])),layouts(\"LAYOUTLIST\"),label(\"keywordArguments\",\\parameterized-sort(\"KeywordArguments\",[sort(\"Pattern\")])),layouts(\"LAYOUTLIST\"),lit(\")\")],{})", RascalValueFactory.Production); private static final IConstructor cHJvZChsaXQoIlxcaXRlci1zdGFyKHNvcnQoXCJSYW5nZVwiKSkiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkyLDkyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NSw0NSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDgyLDgyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAzLDEwMyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p = (IConstructor) _read("prod(lit(\"\\\\iter-star(sort(\\\"Range\\\"))\"),[\\char-class([range(92,92)]),\\char-class([range(105,105)]),\\char-class([range(116,116)]),\\char-class([range(101,101)]),\\char-class([range(114,114)]),\\char-class([range(45,45)]),\\char-class([range(115,115)]),\\char-class([range(116,116)]),\\char-class([range(97,97)]),\\char-class([range(114,114)]),\\char-class([range(40,40)]),\\char-class([range(115,115)]),\\char-class([range(111,111)]),\\char-class([range(114,114)]),\\char-class([range(116,116)]),\\char-class([range(40,40)]),\\char-class([range(34,34)]),\\char-class([range(82,82)]),\\char-class([range(97,97)]),\\char-class([range(110,110)]),\\char-class([range(103,103)]),\\char-class([range(101,101)]),\\char-class([range(34,34)]),\\char-class([range(41,41)]),\\char-class([range(41,41)])],{})", RascalValueFactory.Production); @@ -3372,7 +3371,6 @@ protected IntegerList getFilteredParents(int childId) { private static final IConstructor cHJvZChsYWJlbCgiYWN0dWFscyIsc29ydCgiSW1wb3J0ZWRNb2R1bGUiKSksW2xhYmVsKCJuYW1lIixzb3J0KCJRdWFsaWZpZWROYW1lIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgiYWN0dWFscyIsc29ydCgiTW9kdWxlQWN0dWFscyIpKV0se30p = (IConstructor) _read("prod(label(\"actuals\",sort(\"ImportedModule\")),[label(\"name\",sort(\"QualifiedName\")),layouts(\"LAYOUTLIST\"),label(\"actuals\",sort(\"ModuleActuals\"))],{})", RascalValueFactory.Production); private static final IConstructor cHJvZChsaXQoInZhbHVlIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTgsMTE4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE3LDExNyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKV0se30p = (IConstructor) _read("prod(lit(\"value\"),[\\char-class([range(118,118)]),\\char-class([range(97,97)]),\\char-class([range(108,108)]),\\char-class([range(117,117)]),\\char-class([range(101,101)])],{})", RascalValueFactory.Production); private static final IConstructor cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJJbXBvcnQiKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJcXGl0ZXItc3Rhcihzb3J0KFwiSW1wb3J0XCIpKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoXGl0ZXItc3Rhci1zZXBzKHNvcnQoIkltcG9ydCIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIildKSkpfSk00 = (IConstructor) _read("prod(label(\"$MetaHole\",sort(\"Import\")),[\\char-class([range(0,0)]),lit(\"\\\\iter-star(sort(\\\"Import\\\"))\"),lit(\":\"),iter(\\char-class([range(48,57)])),\\char-class([range(0,0)])],{tag(\"holeType\"(\\iter-star-seps(sort(\"Import\"),[layouts(\"LAYOUTLIST\")])))})", RascalValueFactory.Production); - private static final IConstructor cHJvZChsYWJlbCgiYXNzZXJ0Iixzb3J0KCJTdGF0ZW1lbnQiKSksW2xpdCgiYXNzZXJ0IiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJleHByZXNzaW9uIixzb3J0KCJFeHByZXNzaW9uIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIjsiKV0se3RhZygiYnJlYWthYmxlIigpKX0p = (IConstructor) _read("prod(label(\"assert\",sort(\"Statement\")),[lit(\"assert\"),layouts(\"LAYOUTLIST\"),label(\"expression\",sort(\"Expression\")),layouts(\"LAYOUTLIST\"),lit(\";\")],{tag(\"breakable\"())})", RascalValueFactory.Production); private static final IConstructor cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJGdW5jdGlvbk1vZGlmaWVyIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIkZ1bmN0aW9uTW9kaWZpZXJcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKHNvcnQoIkZ1bmN0aW9uTW9kaWZpZXIiKSkpfSk00 = (IConstructor) _read("prod(label(\"$MetaHole\",sort(\"FunctionModifier\")),[\\char-class([range(0,0)]),lit(\"sort(\\\"FunctionModifier\\\")\"),lit(\":\"),iter(\\char-class([range(48,57)])),\\char-class([range(0,0)])],{tag(\"holeType\"(sort(\"FunctionModifier\")))})", RascalValueFactory.Production); private static final IConstructor cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIkNvbmNyZXRlUGFydCIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoIlxcaXRlci1zdGFyKHNvcnQoXCJDb25jcmV0ZVBhcnRcIikpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihcaXRlci1zdGFyKGxleCgiQ29uY3JldGVQYXJ0IikpKSl9KQ0000 = (IConstructor) _read("prod(label(\"$MetaHole\",lex(\"ConcretePart\")),[\\char-class([range(0,0)]),lit(\"\\\\iter-star(sort(\\\"ConcretePart\\\"))\"),lit(\":\"),iter(\\char-class([range(48,57)])),\\char-class([range(0,0)])],{tag(\"holeType\"(\\iter-star(lex(\"ConcretePart\"))))})", RascalValueFactory.Production); private static final IConstructor cHJvZChsaXQoInF1aXQiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExMywxMTMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNywxMTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSldLHt9KQ0000 = (IConstructor) _read("prod(lit(\"quit\"),[\\char-class([range(113,113)]),\\char-class([range(117,117)]),\\char-class([range(105,105)]),\\char-class([range(116,116)])],{})", RascalValueFactory.Production); @@ -3387,6 +3385,8 @@ protected IntegerList getFilteredParents(int childId) { private static final IConstructor cmVndWxhcihcaXRlci1zdGFyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp = (IConstructor) _read("regular(\\iter-star(\\char-class([range(48,57)])))", RascalValueFactory.Production); private static final IConstructor cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJDbGFzcyIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJDbGFzc1wiKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoc29ydCgiQ2xhc3MiKSkpfSk00 = (IConstructor) _read("prod(label(\"$MetaHole\",sort(\"Class\")),[\\char-class([range(0,0)]),lit(\"sort(\\\"Class\\\")\"),lit(\":\"),iter(\\char-class([range(48,57)])),\\char-class([range(0,0)])],{tag(\"holeType\"(sort(\"Class\")))})", RascalValueFactory.Production); private static final IConstructor cHJvZChsYWJlbCgidmlzaXQiLHNvcnQoIkV4cHJlc3Npb24iKSksW2xhYmVsKCJsYWJlbCIsc29ydCgiTGFiZWwiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJ2aXNpdCIsc29ydCgiVmlzaXQiKSldLHt9KQ0000 = (IConstructor) _read("prod(label(\"visit\",sort(\"Expression\")),[label(\"label\",sort(\"Label\")),layouts(\"LAYOUTLIST\"),label(\"visit\",sort(\"Visit\"))],{})", RascalValueFactory.Production); + private static final IConstructor cHJvZChsYWJlbCgiYXNzZXJ0Iixzb3J0KCJTdGF0ZW1lbnQiKSksW2xpdCgiYXNzZXJ0IiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJleHByZXNzaW9uIixzb3J0KCJFeHByZXNzaW9uIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIjsiKV0se3RhZygiYnJlYWthYmxlIigpKX0p = (IConstructor) _read("prod(label(\"assert\",sort(\"Statement\")),[lit(\"assert\"),layouts(\"LAYOUTLIST\"),label(\"expression\",sort(\"Expression\")),layouts(\"LAYOUTLIST\"),lit(\";\")],{tag(\"breakable\"())})", RascalValueFactory.Production); + private static final IConstructor cHJvZChsYWJlbCgidHVwbGUiLHNvcnQoIkV4cHJlc3Npb24iKSksW2xpdCgiXDwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImVsZW1lbnRzMCIsXGl0ZXItc3Rhci1zZXBzKHNvcnQoIkV4cHJlc3Npb24iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJcPiIpXSx7fSk00 = (IConstructor) _read("prod(label(\"tuple\",sort(\"Expression\")),[lit(\"\\<\"),layouts(\"LAYOUTLIST\"),label(\"elements0\",\\iter-star-seps(sort(\"Expression\"),[layouts(\"LAYOUTLIST\"),lit(\",\"),layouts(\"LAYOUTLIST\")])),layouts(\"LAYOUTLIST\"),lit(\"\\>\")],{})", RascalValueFactory.Production); private static final IConstructor cHJvZChsYWJlbCgiYW50aSIsc29ydCgiUGF0dGVybiIpKSxbbGl0KCIhIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJwYXR0ZXJuIixzb3J0KCJQYXR0ZXJuIikpXSx7fSk00 = (IConstructor) _read("prod(label(\"anti\",sort(\"Pattern\")),[lit(\"!\"),layouts(\"LAYOUTLIST\"),label(\"pattern\",sort(\"Pattern\"))],{})", RascalValueFactory.Production); private static final IConstructor cHJvZChsYWJlbCgic3Vic2NyaXB0Iixzb3J0KCJBc3NpZ25hYmxlIikpLFtsYWJlbCgicmVjZWl2ZXIiLHNvcnQoIkFzc2lnbmFibGUiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiWyIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgic3Vic2NyaXB0Iixzb3J0KCJFeHByZXNzaW9uIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIl0iKV0se30p = (IConstructor) _read("prod(label(\"subscript\",sort(\"Assignable\")),[label(\"receiver\",sort(\"Assignable\")),layouts(\"LAYOUTLIST\"),lit(\"[\"),layouts(\"LAYOUTLIST\"),label(\"subscript\",sort(\"Expression\")),layouts(\"LAYOUTLIST\"),lit(\"]\")],{})", RascalValueFactory.Production); private static final IConstructor cHJvZChsaXQoInNvbHZlIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTgsMTE4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pXSx7fSk00 = (IConstructor) _read("prod(lit(\"solve\"),[\\char-class([range(115,115)]),\\char-class([range(111,111)]),\\char-class([range(108,108)]),\\char-class([range(118,118)]),\\char-class([range(101,101)])],{})", RascalValueFactory.Production); @@ -4828,52 +4828,62 @@ protected static final void _init_cHJvZChsYWJlbCgiaXNEZWZpbmVkIixzb3J0KCJFeHByZX tmp[0] = new NonTerminalStackNode(1170, 0, "Expression", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiaXNEZWZpbmVkIixzb3J0KCJFeHByZXNzaW9uIikpLFtsYWJlbCgiYXJndW1lbnQiLHNvcnQoIkV4cHJlc3Npb24iKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiPyIpXSx7fSk00, tmp); } + protected static final void _init_cHJvZChsYWJlbCgibGVzc1RoYW4iLHNvcnQoIkV4cHJlc3Npb24iKSksW2xhYmVsKCJsaHMiLHNvcnQoIkV4cHJlc3Npb24iKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGNvbmRpdGlvbmFsKGxpdCgiXDwiKSx7XG5vdC1mb2xsb3cobGl0KCItIikpfSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJyaHMiLHNvcnQoIkV4cHJlc3Npb24iKSldLHt9KQ0000(ExpectBuilder builder) { + AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; + + tmp[3] = new NonTerminalStackNode(1350, 3, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(1346, 1, "layouts_LAYOUTLIST", null, null); + tmp[4] = new NonTerminalStackNode(1351, 4, "Expression", null, null); + tmp[2] = new LiteralStackNode(1349, 2, cHJvZChsaXQoIlw8IiksW1xjaGFyLWNsYXNzKFtyYW5nZSg2MCw2MCldKV0se30p, new int[] {60}, null, new ICompletionFilter[] {new StringFollowRestriction(new int[] {45})}); + tmp[0] = new NonTerminalStackNode(1344, 0, "Expression", null, null); + builder.addAlternative(RascalParser.cHJvZChsYWJlbCgibGVzc1RoYW4iLHNvcnQoIkV4cHJlc3Npb24iKSksW2xhYmVsKCJsaHMiLHNvcnQoIkV4cHJlc3Npb24iKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGNvbmRpdGlvbmFsKGxpdCgiXDwiKSx7XG5vdC1mb2xsb3cobGl0KCItIikpfSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJyaHMiLHNvcnQoIkV4cHJlc3Npb24iKSldLHt9KQ0000, tmp); + } protected static final void _init_cHJvZChsYWJlbCgicmVpZmllZFR5cGUiLHNvcnQoIkV4cHJlc3Npb24iKSksW2xpdCgidHlwZSIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIigiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInN5bWJvbCIsc29ydCgiRXhwcmVzc2lvbiIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJkZWZpbml0aW9ucyIsc29ydCgiRXhwcmVzc2lvbiIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIpIildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[11]; - tmp[8] = new NonTerminalStackNode(884, 8, "Expression", null, null); - tmp[3] = new NonTerminalStackNode(878, 3, "layouts_LAYOUTLIST", null, null); - tmp[7] = new NonTerminalStackNode(883, 7, "layouts_LAYOUTLIST", null, null); - tmp[5] = new NonTerminalStackNode(881, 5, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(876, 1, "layouts_LAYOUTLIST", null, null); - tmp[10] = new LiteralStackNode(887, 10, cHJvZChsaXQoIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {41}, null, null); - tmp[0] = new LiteralStackNode(875, 0, cHJvZChsaXQoInR5cGUiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEyMSwxMjEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSldLHt9KQ0000, new int[] {116,121,112,101}, null, null); - tmp[9] = new NonTerminalStackNode(886, 9, "layouts_LAYOUTLIST", null, null); - tmp[4] = new NonTerminalStackNode(879, 4, "Expression", null, null); - tmp[2] = new LiteralStackNode(877, 2, cHJvZChsaXQoIigiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pXSx7fSk00, new int[] {40}, null, null); - tmp[6] = new LiteralStackNode(882, 6, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null); + tmp[8] = new NonTerminalStackNode(865, 8, "Expression", null, null); + tmp[3] = new NonTerminalStackNode(859, 3, "layouts_LAYOUTLIST", null, null); + tmp[7] = new NonTerminalStackNode(864, 7, "layouts_LAYOUTLIST", null, null); + tmp[5] = new NonTerminalStackNode(862, 5, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(857, 1, "layouts_LAYOUTLIST", null, null); + tmp[10] = new LiteralStackNode(868, 10, cHJvZChsaXQoIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {41}, null, null); + tmp[0] = new LiteralStackNode(856, 0, cHJvZChsaXQoInR5cGUiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEyMSwxMjEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSldLHt9KQ0000, new int[] {116,121,112,101}, null, null); + tmp[9] = new NonTerminalStackNode(867, 9, "layouts_LAYOUTLIST", null, null); + tmp[4] = new NonTerminalStackNode(860, 4, "Expression", null, null); + tmp[2] = new LiteralStackNode(858, 2, cHJvZChsaXQoIigiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pXSx7fSk00, new int[] {40}, null, null); + tmp[6] = new LiteralStackNode(863, 6, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgicmVpZmllZFR5cGUiLHNvcnQoIkV4cHJlc3Npb24iKSksW2xpdCgidHlwZSIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIigiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInN5bWJvbCIsc29ydCgiRXhwcmVzc2lvbiIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJkZWZpbml0aW9ucyIsc29ydCgiRXhwcmVzc2lvbiIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIpIildLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgiYWxsIixzb3J0KCJFeHByZXNzaW9uIikpLFtsaXQoImFsbCIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIigiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImdlbmVyYXRvcnMiLFxpdGVyLXNlcHMoc29ydCgiRXhwcmVzc2lvbiIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpXSkpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIikiKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[7]; - tmp[3] = new NonTerminalStackNode(893, 3, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(891, 1, "layouts_LAYOUTLIST", null, null); - tmp[5] = new NonTerminalStackNode(900, 5, "layouts_LAYOUTLIST", null, null); - tmp[0] = new LiteralStackNode(890, 0, cHJvZChsaXQoImFsbCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSldLHt9KQ0000, new int[] {97,108,108}, null, null); - tmp[4] = new SeparatedListStackNode(898, 4, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIkV4cHJlc3Npb24iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(894, 0, "Expression", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(895, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(896, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(897, 3, "layouts_LAYOUTLIST", null, null)}, true, null, null); - tmp[2] = new LiteralStackNode(892, 2, cHJvZChsaXQoIigiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pXSx7fSk00, new int[] {40}, null, null); - tmp[6] = new LiteralStackNode(901, 6, cHJvZChsaXQoIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {41}, null, null); + tmp[3] = new NonTerminalStackNode(874, 3, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(872, 1, "layouts_LAYOUTLIST", null, null); + tmp[5] = new NonTerminalStackNode(881, 5, "layouts_LAYOUTLIST", null, null); + tmp[0] = new LiteralStackNode(871, 0, cHJvZChsaXQoImFsbCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSldLHt9KQ0000, new int[] {97,108,108}, null, null); + tmp[4] = new SeparatedListStackNode(879, 4, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIkV4cHJlc3Npb24iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(875, 0, "Expression", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(876, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(877, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(878, 3, "layouts_LAYOUTLIST", null, null)}, true, null, null); + tmp[2] = new LiteralStackNode(873, 2, cHJvZChsaXQoIigiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pXSx7fSk00, new int[] {40}, null, null); + tmp[6] = new LiteralStackNode(882, 6, cHJvZChsaXQoIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {41}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiYWxsIixzb3J0KCJFeHByZXNzaW9uIikpLFtsaXQoImFsbCIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIigiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImdlbmVyYXRvcnMiLFxpdGVyLXNlcHMoc29ydCgiRXhwcmVzc2lvbiIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpXSkpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIikiKV0se30p, tmp); } protected static final void _init_cHJvZChsYWJlbCgic2xpY2VTdGVwIixzb3J0KCJFeHByZXNzaW9uIikpLFtjb25kaXRpb25hbChsYWJlbCgiZXhwcmVzc2lvbiIsc29ydCgiRXhwcmVzc2lvbiIpKSx7ZXhjZXB0KCJpc0RlZmluZWQiKSxleGNlcHQoInRyYW5zaXRpdmVDbG9zdXJlIiksZXhjZXB0KCJ0cmFuc2l0aXZlUmVmbGV4aXZlQ2xvc3VyZSIpfSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiWyIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgib3B0Rmlyc3QiLHNvcnQoIk9wdGlvbmFsRXhwcmVzc2lvbiIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJzZWNvbmQiLHNvcnQoIkV4cHJlc3Npb24iKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLi4iKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoIm9wdExhc3QiLHNvcnQoIk9wdGlvbmFsRXhwcmVzc2lvbiIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJdIildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[15]; - tmp[2] = new LiteralStackNode(908, 2, cHJvZChsaXQoIlsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkxLDkxKV0pXSx7fSk00, new int[] {91}, null, null); - tmp[6] = new LiteralStackNode(913, 6, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null); - tmp[4] = new NonTerminalStackNode(910, 4, "OptionalExpression", null, null); - tmp[14] = new LiteralStackNode(923, 14, cHJvZChsaXQoIl0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkzLDkzKV0pXSx7fSk00, new int[] {93}, null, null); - tmp[12] = new NonTerminalStackNode(920, 12, "OptionalExpression", null, null); - tmp[9] = new NonTerminalStackNode(917, 9, "layouts_LAYOUTLIST", null, null); - tmp[10] = new LiteralStackNode(918, 10, cHJvZChsaXQoIi4uIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg0Niw0NildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDYsNDYpXSldLHt9KQ0000, new int[] {46,46}, null, null); - tmp[0] = new NonTerminalStackNode(906, 0, "Expression", null, null); - tmp[13] = new NonTerminalStackNode(922, 13, "layouts_LAYOUTLIST", null, null); - tmp[7] = new NonTerminalStackNode(914, 7, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(907, 1, "layouts_LAYOUTLIST", null, null); - tmp[5] = new NonTerminalStackNode(912, 5, "layouts_LAYOUTLIST", null, null); - tmp[11] = new NonTerminalStackNode(919, 11, "layouts_LAYOUTLIST", null, null); - tmp[3] = new NonTerminalStackNode(909, 3, "layouts_LAYOUTLIST", null, null); - tmp[8] = new NonTerminalStackNode(915, 8, "Expression", null, null); + tmp[2] = new LiteralStackNode(889, 2, cHJvZChsaXQoIlsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkxLDkxKV0pXSx7fSk00, new int[] {91}, null, null); + tmp[6] = new LiteralStackNode(894, 6, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null); + tmp[4] = new NonTerminalStackNode(891, 4, "OptionalExpression", null, null); + tmp[14] = new LiteralStackNode(904, 14, cHJvZChsaXQoIl0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkzLDkzKV0pXSx7fSk00, new int[] {93}, null, null); + tmp[12] = new NonTerminalStackNode(901, 12, "OptionalExpression", null, null); + tmp[9] = new NonTerminalStackNode(898, 9, "layouts_LAYOUTLIST", null, null); + tmp[10] = new LiteralStackNode(899, 10, cHJvZChsaXQoIi4uIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg0Niw0NildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDYsNDYpXSldLHt9KQ0000, new int[] {46,46}, null, null); + tmp[0] = new NonTerminalStackNode(887, 0, "Expression", null, null); + tmp[13] = new NonTerminalStackNode(903, 13, "layouts_LAYOUTLIST", null, null); + tmp[7] = new NonTerminalStackNode(895, 7, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(888, 1, "layouts_LAYOUTLIST", null, null); + tmp[5] = new NonTerminalStackNode(893, 5, "layouts_LAYOUTLIST", null, null); + tmp[11] = new NonTerminalStackNode(900, 11, "layouts_LAYOUTLIST", null, null); + tmp[3] = new NonTerminalStackNode(890, 3, "layouts_LAYOUTLIST", null, null); + tmp[8] = new NonTerminalStackNode(896, 8, "Expression", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgic2xpY2VTdGVwIixzb3J0KCJFeHByZXNzaW9uIikpLFtjb25kaXRpb25hbChsYWJlbCgiZXhwcmVzc2lvbiIsc29ydCgiRXhwcmVzc2lvbiIpKSx7ZXhjZXB0KCJpc0RlZmluZWQiKSxleGNlcHQoInRyYW5zaXRpdmVDbG9zdXJlIiksZXhjZXB0KCJ0cmFuc2l0aXZlUmVmbGV4aXZlQ2xvc3VyZSIpfSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiWyIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgib3B0Rmlyc3QiLHNvcnQoIk9wdGlvbmFsRXhwcmVzc2lvbiIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJzZWNvbmQiLHNvcnQoIkV4cHJlc3Npb24iKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLi4iKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoIm9wdExhc3QiLHNvcnQoIk9wdGlvbmFsRXhwcmVzc2lvbiIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJdIildLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgibGVzc1RoYW5PckVxIixzb3J0KCJFeHByZXNzaW9uIikpLFtsYWJlbCgibGhzIixzb3J0KCJFeHByZXNzaW9uIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIlw8PSIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgicmhzIixzb3J0KCJFeHByZXNzaW9uIikpXSx7fSk00(ExpectBuilder builder) { @@ -4925,11 +4935,11 @@ protected static final void _init_cHJvZChsYWJlbCgibm9NYXRjaCIsc29ydCgiRXhwcmVzc2 protected static final void _init_cHJvZChsYWJlbCgibGlzdCIsc29ydCgiRXhwcmVzc2lvbiIpKSxbbGl0KCJbIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJlbGVtZW50czAiLFxpdGVyLXN0YXItc2Vwcyhzb3J0KCJFeHByZXNzaW9uIiksW2xheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIiwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIildKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiXSIpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[1] = new NonTerminalStackNode(966, 1, "layouts_LAYOUTLIST", null, null); - tmp[3] = new NonTerminalStackNode(973, 3, "layouts_LAYOUTLIST", null, null); - tmp[2] = new SeparatedListStackNode(971, 2, cmVndWxhcihcaXRlci1zdGFyLXNlcHMoc29ydCgiRXhwcmVzc2lvbiIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpXSkp, new NonTerminalStackNode(967, 0, "Expression", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(968, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(969, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(970, 3, "layouts_LAYOUTLIST", null, null)}, false, null, null); - tmp[4] = new LiteralStackNode(974, 4, cHJvZChsaXQoIl0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkzLDkzKV0pXSx7fSk00, new int[] {93}, null, null); - tmp[0] = new LiteralStackNode(965, 0, cHJvZChsaXQoIlsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkxLDkxKV0pXSx7fSk00, new int[] {91}, null, null); + tmp[1] = new NonTerminalStackNode(947, 1, "layouts_LAYOUTLIST", null, null); + tmp[3] = new NonTerminalStackNode(954, 3, "layouts_LAYOUTLIST", null, null); + tmp[2] = new SeparatedListStackNode(952, 2, cmVndWxhcihcaXRlci1zdGFyLXNlcHMoc29ydCgiRXhwcmVzc2lvbiIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpXSkp, new NonTerminalStackNode(948, 0, "Expression", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(949, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(950, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(951, 3, "layouts_LAYOUTLIST", null, null)}, false, null, null); + tmp[4] = new LiteralStackNode(955, 4, cHJvZChsaXQoIl0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkzLDkzKV0pXSx7fSk00, new int[] {93}, null, null); + tmp[0] = new LiteralStackNode(946, 0, cHJvZChsaXQoIlsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkxLDkxKV0pXSx7fSk00, new int[] {91}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgibGlzdCIsc29ydCgiRXhwcmVzc2lvbiIpKSxbbGl0KCJbIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJlbGVtZW50czAiLFxpdGVyLXN0YXItc2Vwcyhzb3J0KCJFeHByZXNzaW9uIiksW2xheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIiwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIildKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiXSIpXSx7fSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiaWZUaGVuRWxzZSIsc29ydCgiRXhwcmVzc2lvbiIpKSxbbGFiZWwoImNvbmRpdGlvbiIsc29ydCgiRXhwcmVzc2lvbiIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCI22IiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJ0aGVuRXhwIixzb3J0KCJFeHByZXNzaW9uIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIjoiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImVsc2VFeHAiLHNvcnQoIkV4cHJlc3Npb24iKSldLHthc3NvYyhyaWdodCgpKX0p(ExpectBuilder builder) { @@ -4949,7 +4959,7 @@ protected static final void _init_cHJvZChsYWJlbCgiaWZUaGVuRWxzZSIsc29ydCgiRXhwcm protected static final void _init_cHJvZChsYWJlbCgiY29tcHJlaGVuc2lvbiIsc29ydCgiRXhwcmVzc2lvbiIpKSxbbGFiZWwoImNvbXByZWhlbnNpb24iLHNvcnQoIkNvbXByZWhlbnNpb24iKSldLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new NonTerminalStackNode(977, 0, "Comprehension", null, null); + tmp[0] = new NonTerminalStackNode(958, 0, "Comprehension", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiY29tcHJlaGVuc2lvbiIsc29ydCgiRXhwcmVzc2lvbiIpKSxbbGFiZWwoImNvbXByZWhlbnNpb24iLHNvcnQoIkNvbXByZWhlbnNpb24iKSldLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgiaXQiLHNvcnQoIkV4cHJlc3Npb24iKSksW2NvbmRpdGlvbmFsKGxpdCgiaXQiKSx7XG5vdC1wcmVjZWRlKFxjaGFyLWNsYXNzKFtyYW5nZSg2NSw5MCkscmFuZ2UoOTUsOTUpLHJhbmdlKDk3LDEyMildKSksXG5vdC1mb2xsb3coXGNoYXItY2xhc3MoW3JhbmdlKDY1LDkwKSxyYW5nZSg5NSw5NSkscmFuZ2UoOTcsMTIyKV0pKX0pXSx7fSk00(ExpectBuilder builder) { @@ -4991,31 +5001,31 @@ protected static final void _init_cHJvZChsYWJlbCgiaW1wbGljYXRpb24iLHNvcnQoIkV4cH protected static final void _init_cHJvZChsYWJlbCgic3RlcFJhbmdlIixzb3J0KCJFeHByZXNzaW9uIikpLFtsaXQoIlsiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImZpcnN0Iixzb3J0KCJFeHByZXNzaW9uIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIiwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInNlY29uZCIsc29ydCgiRXhwcmVzc2lvbiIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIuLiIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgibGFzdCIsc29ydCgiRXhwcmVzc2lvbiIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJdIildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[13]; - tmp[7] = new NonTerminalStackNode(990, 7, "layouts_LAYOUTLIST", null, null); - tmp[5] = new NonTerminalStackNode(987, 5, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(982, 1, "layouts_LAYOUTLIST", null, null); - tmp[11] = new NonTerminalStackNode(995, 11, "layouts_LAYOUTLIST", null, null); - tmp[3] = new NonTerminalStackNode(985, 3, "layouts_LAYOUTLIST", null, null); - tmp[8] = new LiteralStackNode(991, 8, cHJvZChsaXQoIi4uIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg0Niw0NildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDYsNDYpXSldLHt9KQ0000, new int[] {46,46}, null, null); - tmp[2] = new NonTerminalStackNode(983, 2, "Expression", null, null); - tmp[6] = new NonTerminalStackNode(988, 6, "Expression", null, null); - tmp[4] = new LiteralStackNode(986, 4, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null); - tmp[12] = new LiteralStackNode(996, 12, cHJvZChsaXQoIl0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkzLDkzKV0pXSx7fSk00, new int[] {93}, null, null); - tmp[9] = new NonTerminalStackNode(992, 9, "layouts_LAYOUTLIST", null, null); - tmp[10] = new NonTerminalStackNode(993, 10, "Expression", null, null); - tmp[0] = new LiteralStackNode(981, 0, cHJvZChsaXQoIlsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkxLDkxKV0pXSx7fSk00, new int[] {91}, null, null); + tmp[7] = new NonTerminalStackNode(971, 7, "layouts_LAYOUTLIST", null, null); + tmp[5] = new NonTerminalStackNode(968, 5, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(963, 1, "layouts_LAYOUTLIST", null, null); + tmp[11] = new NonTerminalStackNode(976, 11, "layouts_LAYOUTLIST", null, null); + tmp[3] = new NonTerminalStackNode(966, 3, "layouts_LAYOUTLIST", null, null); + tmp[8] = new LiteralStackNode(972, 8, cHJvZChsaXQoIi4uIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg0Niw0NildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDYsNDYpXSldLHt9KQ0000, new int[] {46,46}, null, null); + tmp[2] = new NonTerminalStackNode(964, 2, "Expression", null, null); + tmp[6] = new NonTerminalStackNode(969, 6, "Expression", null, null); + tmp[4] = new LiteralStackNode(967, 4, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null); + tmp[12] = new LiteralStackNode(977, 12, cHJvZChsaXQoIl0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkzLDkzKV0pXSx7fSk00, new int[] {93}, null, null); + tmp[9] = new NonTerminalStackNode(973, 9, "layouts_LAYOUTLIST", null, null); + tmp[10] = new NonTerminalStackNode(974, 10, "Expression", null, null); + tmp[0] = new LiteralStackNode(962, 0, cHJvZChsaXQoIlsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkxLDkxKV0pXSx7fSk00, new int[] {91}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgic3RlcFJhbmdlIixzb3J0KCJFeHByZXNzaW9uIikpLFtsaXQoIlsiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImZpcnN0Iixzb3J0KCJFeHByZXNzaW9uIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIiwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInNlY29uZCIsc29ydCgiRXhwcmVzc2lvbiIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIuLiIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgibGFzdCIsc29ydCgiRXhwcmVzc2lvbiIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJdIildLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgiZmllbGRQcm9qZWN0Iixzb3J0KCJFeHByZXNzaW9uIikpLFtjb25kaXRpb25hbChsYWJlbCgiZXhwcmVzc2lvbiIsc29ydCgiRXhwcmVzc2lvbiIpKSx7ZXhjZXB0KCJpc0RlZmluZWQiKSxleGNlcHQoInRyYW5zaXRpdmVDbG9zdXJlIiksZXhjZXB0KCJ0cmFuc2l0aXZlUmVmbGV4aXZlQ2xvc3VyZSIpfSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiXDwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImZpZWxkcyIsXGl0ZXItc2Vwcyhzb3J0KCJGaWVsZCIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpXSkpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIlw11IildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[7]; - tmp[1] = new NonTerminalStackNode(1002, 1, "layouts_LAYOUTLIST", null, null); - tmp[5] = new NonTerminalStackNode(1011, 5, "layouts_LAYOUTLIST", null, null); - tmp[3] = new NonTerminalStackNode(1004, 3, "layouts_LAYOUTLIST", null, null); - tmp[2] = new LiteralStackNode(1003, 2, cHJvZChsaXQoIlw8IiksW1xjaGFyLWNsYXNzKFtyYW5nZSg2MCw2MCldKV0se30p, new int[] {60}, null, null); - tmp[6] = new LiteralStackNode(1012, 6, cHJvZChsaXQoIlw11IiksW1xjaGFyLWNsYXNzKFtyYW5nZSg2Miw2MildKV0se30p, new int[] {62}, null, null); - tmp[4] = new SeparatedListStackNode(1009, 4, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIkZpZWxkIiksW2xheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIiwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIildKSk00, new NonTerminalStackNode(1005, 0, "Field", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(1006, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(1007, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(1008, 3, "layouts_LAYOUTLIST", null, null)}, true, null, null); - tmp[0] = new NonTerminalStackNode(1001, 0, "Expression", null, null); + tmp[1] = new NonTerminalStackNode(983, 1, "layouts_LAYOUTLIST", null, null); + tmp[5] = new NonTerminalStackNode(992, 5, "layouts_LAYOUTLIST", null, null); + tmp[3] = new NonTerminalStackNode(985, 3, "layouts_LAYOUTLIST", null, null); + tmp[2] = new LiteralStackNode(984, 2, cHJvZChsaXQoIlw8IiksW1xjaGFyLWNsYXNzKFtyYW5nZSg2MCw2MCldKV0se30p, new int[] {60}, null, null); + tmp[6] = new LiteralStackNode(993, 6, cHJvZChsaXQoIlw11IiksW1xjaGFyLWNsYXNzKFtyYW5nZSg2Miw2MildKV0se30p, new int[] {62}, null, null); + tmp[4] = new SeparatedListStackNode(990, 4, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIkZpZWxkIiksW2xheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIiwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIildKSk00, new NonTerminalStackNode(986, 0, "Field", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(987, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(988, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(989, 3, "layouts_LAYOUTLIST", null, null)}, true, null, null); + tmp[0] = new NonTerminalStackNode(982, 0, "Expression", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiZmllbGRQcm9qZWN0Iixzb3J0KCJFeHByZXNzaW9uIikpLFtjb25kaXRpb25hbChsYWJlbCgiZXhwcmVzc2lvbiIsc29ydCgiRXhwcmVzc2lvbiIpKSx7ZXhjZXB0KCJpc0RlZmluZWQiKSxleGNlcHQoInRyYW5zaXRpdmVDbG9zdXJlIiksZXhjZXB0KCJ0cmFuc2l0aXZlUmVmbGV4aXZlQ2xvc3VyZSIpfSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiXDwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImZpZWxkcyIsXGl0ZXItc2Vwcyhzb3J0KCJGaWVsZCIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpXSkpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIlw11IildLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgiZGl2aXNpb24iLHNvcnQoIkV4cHJlc3Npb24iKSksW2xhYmVsKCJsaHMiLHNvcnQoIkV4cHJlc3Npb24iKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLyIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgicmhzIixzb3J0KCJFeHByZXNzaW9uIikpXSx7fSk00(ExpectBuilder builder) { @@ -5028,26 +5038,6 @@ protected static final void _init_cHJvZChsYWJlbCgiZGl2aXNpb24iLHNvcnQoIkV4cHJlc3 tmp[0] = new NonTerminalStackNode(1220, 0, "Expression", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiZGl2aXNpb24iLHNvcnQoIkV4cHJlc3Npb24iKSksW2xhYmVsKCJsaHMiLHNvcnQoIkV4cHJlc3Npb24iKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLyIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgicmhzIixzb3J0KCJFeHByZXNzaW9uIikpXSx7fSk00, tmp); } - protected static final void _init_cHJvZChsYWJlbCgibGVzc1RoYW4iLHNvcnQoIkV4cHJlc3Npb24iKSksW2xhYmVsKCJsaHMiLHNvcnQoIkV4cHJlc3Npb24iKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGNvbmRpdGlvbmFsKGxpdCgiXDwiKSx7XG5vdC1mb2xsb3cobGl0KCItIikpfSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJyaHMiLHNvcnQoIkV4cHJlc3Npb24iKSldLHt9KQ0000(ExpectBuilder builder) { - AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - - tmp[3] = new NonTerminalStackNode(1350, 3, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(1346, 1, "layouts_LAYOUTLIST", null, null); - tmp[4] = new NonTerminalStackNode(1351, 4, "Expression", null, null); - tmp[2] = new LiteralStackNode(1349, 2, cHJvZChsaXQoIlw8IiksW1xjaGFyLWNsYXNzKFtyYW5nZSg2MCw2MCldKV0se30p, new int[] {60}, null, new ICompletionFilter[] {new StringFollowRestriction(new int[] {45})}); - tmp[0] = new NonTerminalStackNode(1344, 0, "Expression", null, null); - builder.addAlternative(RascalParser.cHJvZChsYWJlbCgibGVzc1RoYW4iLHNvcnQoIkV4cHJlc3Npb24iKSksW2xhYmVsKCJsaHMiLHNvcnQoIkV4cHJlc3Npb24iKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGNvbmRpdGlvbmFsKGxpdCgiXDwiKSx7XG5vdC1mb2xsb3cobGl0KCItIikpfSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJyaHMiLHNvcnQoIkV4cHJlc3Npb24iKSldLHt9KQ0000, tmp); - } - protected static final void _init_cHJvZChsYWJlbCgidHVwbGUiLHNvcnQoIkV4cHJlc3Npb24iKSksW2xpdCgiXDwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImVsZW1lbnRzIixcaXRlci1zZXBzKHNvcnQoIkV4cHJlc3Npb24iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJcPiIpXSx7fSk00(ExpectBuilder builder) { - AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - - tmp[3] = new NonTerminalStackNode(780, 3, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(773, 1, "layouts_LAYOUTLIST", null, null); - tmp[4] = new LiteralStackNode(781, 4, cHJvZChsaXQoIlw11IiksW1xjaGFyLWNsYXNzKFtyYW5nZSg2Miw2MildKV0se30p, new int[] {62}, null, null); - tmp[2] = new SeparatedListStackNode(778, 2, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIkV4cHJlc3Npb24iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(774, 0, "Expression", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(775, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(776, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(777, 3, "layouts_LAYOUTLIST", null, null)}, true, null, null); - tmp[0] = new LiteralStackNode(772, 0, cHJvZChsaXQoIlw8IiksW1xjaGFyLWNsYXNzKFtyYW5nZSg2MCw2MCldKV0se30p, new int[] {60}, null, null); - builder.addAlternative(RascalParser.cHJvZChsYWJlbCgidHVwbGUiLHNvcnQoIkV4cHJlc3Npb24iKSksW2xpdCgiXDwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImVsZW1lbnRzIixcaXRlci1zZXBzKHNvcnQoIkV4cHJlc3Npb24iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJcPiIpXSx7fSk00, tmp); - } protected static final void _init_cHJvZChsYWJlbCgiYW5kIixzb3J0KCJFeHByZXNzaW9uIikpLFtsYWJlbCgibGhzIixzb3J0KCJFeHByZXNzaW9uIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIiYmIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJyaHMiLHNvcnQoIkV4cHJlc3Npb24iKSldLHthc3NvYyhsZWZ0KCkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; @@ -5071,7 +5061,7 @@ protected static final void _init_cHJvZChsYWJlbCgiam9pbiIsc29ydCgiRXhwcmVzc2lvbi protected static final void _init_cHJvZChsYWJlbCgibGl0ZXJhbCIsc29ydCgiRXhwcmVzc2lvbiIpKSxbbGFiZWwoImxpdGVyYWwiLHNvcnQoIkxpdGVyYWwiKSldLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new NonTerminalStackNode(784, 0, "Literal", null, null); + tmp[0] = new NonTerminalStackNode(772, 0, "Literal", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgibGl0ZXJhbCIsc29ydCgiRXhwcmVzc2lvbiIpKSxbbGFiZWwoImxpdGVyYWwiLHNvcnQoIkxpdGVyYWwiKSldLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgiYXNUeXBlIixzb3J0KCJFeHByZXNzaW9uIikpLFtsaXQoIlsiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInR5cGUiLHNvcnQoIlR5cGUiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiXSIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgiYXJndW1lbnQiLGNvbmRpdGlvbmFsKHNvcnQoIkV4cHJlc3Npb24iKSx7ZXhjZXB0KCJtYXRjaCIpLGV4Y2VwdCgibm9NYXRjaCIpfSkpXSx7fSk00(ExpectBuilder builder) { @@ -5089,11 +5079,21 @@ protected static final void _init_cHJvZChsYWJlbCgiYXNUeXBlIixzb3J0KCJFeHByZXNzaW protected static final void _init_cHJvZChsYWJlbCgidmlzaXQiLHNvcnQoIkV4cHJlc3Npb24iKSksW2xhYmVsKCJsYWJlbCIsc29ydCgiTGFiZWwiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJ2aXNpdCIsc29ydCgiVmlzaXQiKSldLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[3]; - tmp[1] = new NonTerminalStackNode(790, 1, "layouts_LAYOUTLIST", null, null); - tmp[2] = new NonTerminalStackNode(791, 2, "Visit", null, null); - tmp[0] = new NonTerminalStackNode(788, 0, "Label", null, null); + tmp[1] = new NonTerminalStackNode(998, 1, "layouts_LAYOUTLIST", null, null); + tmp[2] = new NonTerminalStackNode(999, 2, "Visit", null, null); + tmp[0] = new NonTerminalStackNode(996, 0, "Label", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgidmlzaXQiLHNvcnQoIkV4cHJlc3Npb24iKSksW2xhYmVsKCJsYWJlbCIsc29ydCgiTGFiZWwiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJ2aXNpdCIsc29ydCgiVmlzaXQiKSldLHt9KQ0000, tmp); } + protected static final void _init_cHJvZChsYWJlbCgidHVwbGUiLHNvcnQoIkV4cHJlc3Npb24iKSksW2xpdCgiXDwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImVsZW1lbnRzMCIsXGl0ZXItc3Rhci1zZXBzKHNvcnQoIkV4cHJlc3Npb24iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJcPiIpXSx7fSk00(ExpectBuilder builder) { + AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; + + tmp[3] = new NonTerminalStackNode(1011, 3, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(1004, 1, "layouts_LAYOUTLIST", null, null); + tmp[4] = new LiteralStackNode(1012, 4, cHJvZChsaXQoIlw11IiksW1xjaGFyLWNsYXNzKFtyYW5nZSg2Miw2MildKV0se30p, new int[] {62}, null, null); + tmp[2] = new SeparatedListStackNode(1009, 2, cmVndWxhcihcaXRlci1zdGFyLXNlcHMoc29ydCgiRXhwcmVzc2lvbiIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpXSkp, new NonTerminalStackNode(1005, 0, "Expression", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(1006, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(1007, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(1008, 3, "layouts_LAYOUTLIST", null, null)}, false, null, null); + tmp[0] = new LiteralStackNode(1003, 0, cHJvZChsaXQoIlw8IiksW1xjaGFyLWNsYXNzKFtyYW5nZSg2MCw2MCldKV0se30p, new int[] {60}, null, null); + builder.addAlternative(RascalParser.cHJvZChsYWJlbCgidHVwbGUiLHNvcnQoIkV4cHJlc3Npb24iKSksW2xpdCgiXDwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImVsZW1lbnRzMCIsXGl0ZXItc3Rhci1zZXBzKHNvcnQoIkV4cHJlc3Npb24iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJcPiIpXSx7fSk00, tmp); + } protected static final void _init_cHJvZChsYWJlbCgicHJvZHVjdCIsc29ydCgiRXhwcmVzc2lvbiIpKSxbbGFiZWwoImxocyIsc29ydCgiRXhwcmVzc2lvbiIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIqIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGNvbmRpdGlvbmFsKGVtcHR5KCkse1xub3QtZm9sbG93KGxpdCgiKiIpKX0pLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgicmhzIixjb25kaXRpb25hbChzb3J0KCJFeHByZXNzaW9uIikse2V4Y2VwdCgibWF0Y2giKSxleGNlcHQoIm5vTWF0Y2giKX0pKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[7]; @@ -5109,33 +5109,33 @@ protected static final void _init_cHJvZChsYWJlbCgicHJvZHVjdCIsc29ydCgiRXhwcmVzc2 protected static final void _init_cHJvZChsYWJlbCgiY2xvc3VyZSIsc29ydCgiRXhwcmVzc2lvbiIpKSxbbGFiZWwoInR5cGUiLHNvcnQoIlR5cGUiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJwYXJhbWV0ZXJzIixzb3J0KCJQYXJhbWV0ZXJzIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoInsiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInN0YXRlbWVudHMiLFxpdGVyLXNlcHMoc29ydCgiU3RhdGVtZW50IiksW2xheW91dHMoIkxBWU9VVExJU1QiKV0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJ9IildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[9]; - tmp[3] = new NonTerminalStackNode(800, 3, "layouts_LAYOUTLIST", null, null); - tmp[5] = new NonTerminalStackNode(802, 5, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(797, 1, "layouts_LAYOUTLIST", null, null); - tmp[7] = new NonTerminalStackNode(807, 7, "layouts_LAYOUTLIST", null, null); - tmp[8] = new LiteralStackNode(808, 8, cHJvZChsaXQoIn0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyNSwxMjUpXSldLHt9KQ0000, new int[] {125}, null, null); - tmp[4] = new LiteralStackNode(801, 4, cHJvZChsaXQoInsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyMywxMjMpXSldLHt9KQ0000, new int[] {123}, null, null); - tmp[2] = new NonTerminalStackNode(798, 2, "Parameters", null, null); - tmp[6] = new SeparatedListStackNode(805, 6, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIlN0YXRlbWVudCIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIildKSk00, new NonTerminalStackNode(803, 0, "Statement", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(804, 1, "layouts_LAYOUTLIST", null, null)}, true, null, null); - tmp[0] = new NonTerminalStackNode(795, 0, "Type", null, null); + tmp[3] = new NonTerminalStackNode(781, 3, "layouts_LAYOUTLIST", null, null); + tmp[5] = new NonTerminalStackNode(783, 5, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(778, 1, "layouts_LAYOUTLIST", null, null); + tmp[7] = new NonTerminalStackNode(788, 7, "layouts_LAYOUTLIST", null, null); + tmp[8] = new LiteralStackNode(789, 8, cHJvZChsaXQoIn0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyNSwxMjUpXSldLHt9KQ0000, new int[] {125}, null, null); + tmp[4] = new LiteralStackNode(782, 4, cHJvZChsaXQoInsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyMywxMjMpXSldLHt9KQ0000, new int[] {123}, null, null); + tmp[2] = new NonTerminalStackNode(779, 2, "Parameters", null, null); + tmp[6] = new SeparatedListStackNode(786, 6, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIlN0YXRlbWVudCIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIildKSk00, new NonTerminalStackNode(784, 0, "Statement", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(785, 1, "layouts_LAYOUTLIST", null, null)}, true, null, null); + tmp[0] = new NonTerminalStackNode(776, 0, "Type", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiY2xvc3VyZSIsc29ydCgiRXhwcmVzc2lvbiIpKSxbbGFiZWwoInR5cGUiLHNvcnQoIlR5cGUiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJwYXJhbWV0ZXJzIixzb3J0KCJQYXJhbWV0ZXJzIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoInsiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInN0YXRlbWVudHMiLFxpdGVyLXNlcHMoc29ydCgiU3RhdGVtZW50IiksW2xheW91dHMoIkxBWU9VVExJU1QiKV0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJ9IildLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgicmVkdWNlciIsc29ydCgiRXhwcmVzc2lvbiIpKSxbbGl0KCIoIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJpbml0Iixzb3J0KCJFeHByZXNzaW9uIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoInwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInJlc3VsdCIsc29ydCgiRXhwcmVzc2lvbiIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJ8IiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJnZW5lcmF0b3JzIixcaXRlci1zZXBzKHNvcnQoIkV4cHJlc3Npb24iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIpIildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[13]; - tmp[8] = new LiteralStackNode(821, 8, cHJvZChsaXQoInwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyNCwxMjQpXSldLHt9KQ0000, new int[] {124}, null, null); - tmp[7] = new NonTerminalStackNode(820, 7, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(812, 1, "layouts_LAYOUTLIST", null, null); - tmp[5] = new NonTerminalStackNode(817, 5, "layouts_LAYOUTLIST", null, null); - tmp[11] = new NonTerminalStackNode(829, 11, "layouts_LAYOUTLIST", null, null); - tmp[3] = new NonTerminalStackNode(815, 3, "layouts_LAYOUTLIST", null, null); - tmp[9] = new NonTerminalStackNode(822, 9, "layouts_LAYOUTLIST", null, null); - tmp[0] = new LiteralStackNode(811, 0, cHJvZChsaXQoIigiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pXSx7fSk00, new int[] {40}, null, null); - tmp[10] = new SeparatedListStackNode(827, 10, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIkV4cHJlc3Npb24iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(823, 0, "Expression", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(824, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(825, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(826, 3, "layouts_LAYOUTLIST", null, null)}, true, null, null); - tmp[6] = new NonTerminalStackNode(818, 6, "Expression", null, null); - tmp[2] = new NonTerminalStackNode(813, 2, "Expression", null, null); - tmp[12] = new LiteralStackNode(830, 12, cHJvZChsaXQoIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {41}, null, null); - tmp[4] = new LiteralStackNode(816, 4, cHJvZChsaXQoInwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyNCwxMjQpXSldLHt9KQ0000, new int[] {124}, null, null); + tmp[8] = new LiteralStackNode(802, 8, cHJvZChsaXQoInwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyNCwxMjQpXSldLHt9KQ0000, new int[] {124}, null, null); + tmp[7] = new NonTerminalStackNode(801, 7, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(793, 1, "layouts_LAYOUTLIST", null, null); + tmp[5] = new NonTerminalStackNode(798, 5, "layouts_LAYOUTLIST", null, null); + tmp[11] = new NonTerminalStackNode(810, 11, "layouts_LAYOUTLIST", null, null); + tmp[3] = new NonTerminalStackNode(796, 3, "layouts_LAYOUTLIST", null, null); + tmp[9] = new NonTerminalStackNode(803, 9, "layouts_LAYOUTLIST", null, null); + tmp[0] = new LiteralStackNode(792, 0, cHJvZChsaXQoIigiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pXSx7fSk00, new int[] {40}, null, null); + tmp[10] = new SeparatedListStackNode(808, 10, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIkV4cHJlc3Npb24iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(804, 0, "Expression", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(805, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(806, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(807, 3, "layouts_LAYOUTLIST", null, null)}, true, null, null); + tmp[6] = new NonTerminalStackNode(799, 6, "Expression", null, null); + tmp[2] = new NonTerminalStackNode(794, 2, "Expression", null, null); + tmp[12] = new LiteralStackNode(811, 12, cHJvZChsaXQoIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {41}, null, null); + tmp[4] = new LiteralStackNode(797, 4, cHJvZChsaXQoInwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyNCwxMjQpXSldLHt9KQ0000, new int[] {124}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgicmVkdWNlciIsc29ydCgiRXhwcmVzc2lvbiIpKSxbbGl0KCIoIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJpbml0Iixzb3J0KCJFeHByZXNzaW9uIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoInwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInJlc3VsdCIsc29ydCgiRXhwcmVzc2lvbiIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJ8IiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJnZW5lcmF0b3JzIixcaXRlci1zZXBzKHNvcnQoIkV4cHJlc3Npb24iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIpIildLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJFeHByZXNzaW9uIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIkV4cHJlc3Npb25cIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKHNvcnQoIkV4cHJlc3Npb24iKSkpfSk00(ExpectBuilder builder) { @@ -5169,15 +5169,15 @@ protected static final void _init_cHJvZChsYWJlbCgiaWZEZWZpbmVkT3RoZXJ3aXNlIixzb3 protected static final void _init_cHJvZChsYWJlbCgiY2FsbE9yVHJlZSIsc29ydCgiRXhwcmVzc2lvbiIpKSxbbGFiZWwoImV4cHJlc3Npb24iLGNvbmRpdGlvbmFsKHNvcnQoIkV4cHJlc3Npb24iKSx7ZXhjZXB0KCJpc0RlZmluZWQiKSxleGNlcHQoInRyYW5zaXRpdmVDbG9zdXJlIiksZXhjZXB0KCJ0cmFuc2l0aXZlUmVmbGV4aXZlQ2xvc3VyZSIpfSkpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIigiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImFyZ3VtZW50cyIsXGl0ZXItc3Rhci1zZXBzKHNvcnQoIkV4cHJlc3Npb24iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImtleXdvcmRBcmd1bWVudHMiLFxwYXJhbWV0ZXJpemVkLXNvcnQoIktleXdvcmRBcmd1bWVudHMiLFtzb3J0KCJFeHByZXNzaW9uIildKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiKSIpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[9]; - tmp[8] = new LiteralStackNode(850, 8, cHJvZChsaXQoIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {41}, null, null); - tmp[7] = new NonTerminalStackNode(849, 7, "layouts_LAYOUTLIST", null, null); - tmp[5] = new NonTerminalStackNode(845, 5, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(836, 1, "layouts_LAYOUTLIST", null, null); - tmp[3] = new NonTerminalStackNode(838, 3, "layouts_LAYOUTLIST", null, null); - tmp[0] = new NonTerminalStackNode(834, 0, "Expression", null, null); - tmp[2] = new LiteralStackNode(837, 2, cHJvZChsaXQoIigiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pXSx7fSk00, new int[] {40}, null, null); - tmp[6] = new NonTerminalStackNode(847, 6, "KeywordArguments_W3NvcnQoIkV4cHJlc3Npb24iKV000", null, null); - tmp[4] = new SeparatedListStackNode(843, 4, cmVndWxhcihcaXRlci1zdGFyLXNlcHMoc29ydCgiRXhwcmVzc2lvbiIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpXSkp, new NonTerminalStackNode(839, 0, "Expression", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(840, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(841, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(842, 3, "layouts_LAYOUTLIST", null, null)}, false, null, null); + tmp[8] = new LiteralStackNode(831, 8, cHJvZChsaXQoIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {41}, null, null); + tmp[7] = new NonTerminalStackNode(830, 7, "layouts_LAYOUTLIST", null, null); + tmp[5] = new NonTerminalStackNode(826, 5, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(817, 1, "layouts_LAYOUTLIST", null, null); + tmp[3] = new NonTerminalStackNode(819, 3, "layouts_LAYOUTLIST", null, null); + tmp[0] = new NonTerminalStackNode(815, 0, "Expression", null, null); + tmp[2] = new LiteralStackNode(818, 2, cHJvZChsaXQoIigiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pXSx7fSk00, new int[] {40}, null, null); + tmp[6] = new NonTerminalStackNode(828, 6, "KeywordArguments_W3NvcnQoIkV4cHJlc3Npb24iKV000", null, null); + tmp[4] = new SeparatedListStackNode(824, 4, cmVndWxhcihcaXRlci1zdGFyLXNlcHMoc29ydCgiRXhwcmVzc2lvbiIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpXSkp, new NonTerminalStackNode(820, 0, "Expression", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(821, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(822, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(823, 3, "layouts_LAYOUTLIST", null, null)}, false, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiY2FsbE9yVHJlZSIsc29ydCgiRXhwcmVzc2lvbiIpKSxbbGFiZWwoImV4cHJlc3Npb24iLGNvbmRpdGlvbmFsKHNvcnQoIkV4cHJlc3Npb24iKSx7ZXhjZXB0KCJpc0RlZmluZWQiKSxleGNlcHQoInRyYW5zaXRpdmVDbG9zdXJlIiksZXhjZXB0KCJ0cmFuc2l0aXZlUmVmbGV4aXZlQ2xvc3VyZSIpfSkpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIigiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImFyZ3VtZW50cyIsXGl0ZXItc3Rhci1zZXBzKHNvcnQoIkV4cHJlc3Npb24iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImtleXdvcmRBcmd1bWVudHMiLFxwYXJhbWV0ZXJpemVkLXNvcnQoIktleXdvcmRBcmd1bWVudHMiLFtzb3J0KCJFeHByZXNzaW9uIildKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiKSIpXSx7fSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiaW5zZXJ0QmVmb3JlIixzb3J0KCJFeHByZXNzaW9uIikpLFtsYWJlbCgibGhzIixzb3J0KCJFeHByZXNzaW9uIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIlw11XD4iKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInJocyIsc29ydCgiRXhwcmVzc2lvbiIpKV0se30p(ExpectBuilder builder) { @@ -5233,11 +5233,11 @@ protected static final void _init_cHJvZChsYWJlbCgiaW4iLHNvcnQoIkV4cHJlc3Npb24iKS protected static final void _init_cHJvZChsYWJlbCgibm9uRW1wdHlCbG9jayIsc29ydCgiRXhwcmVzc2lvbiIpKSxbbGl0KCJ7IiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJzdGF0ZW1lbnRzIixcaXRlci1zZXBzKHNvcnQoIlN0YXRlbWVudCIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIildKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgifSIpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[1] = new NonTerminalStackNode(854, 1, "layouts_LAYOUTLIST", null, null); - tmp[3] = new NonTerminalStackNode(859, 3, "layouts_LAYOUTLIST", null, null); - tmp[0] = new LiteralStackNode(853, 0, cHJvZChsaXQoInsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyMywxMjMpXSldLHt9KQ0000, new int[] {123}, null, null); - tmp[2] = new SeparatedListStackNode(857, 2, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIlN0YXRlbWVudCIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIildKSk00, new NonTerminalStackNode(855, 0, "Statement", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(856, 1, "layouts_LAYOUTLIST", null, null)}, true, null, null); - tmp[4] = new LiteralStackNode(860, 4, cHJvZChsaXQoIn0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyNSwxMjUpXSldLHt9KQ0000, new int[] {125}, null, null); + tmp[1] = new NonTerminalStackNode(835, 1, "layouts_LAYOUTLIST", null, null); + tmp[3] = new NonTerminalStackNode(840, 3, "layouts_LAYOUTLIST", null, null); + tmp[0] = new LiteralStackNode(834, 0, cHJvZChsaXQoInsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyMywxMjMpXSldLHt9KQ0000, new int[] {123}, null, null); + tmp[2] = new SeparatedListStackNode(838, 2, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIlN0YXRlbWVudCIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIildKSk00, new NonTerminalStackNode(836, 0, "Statement", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(837, 1, "layouts_LAYOUTLIST", null, null)}, true, null, null); + tmp[4] = new LiteralStackNode(841, 4, cHJvZChsaXQoIn0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyNSwxMjUpXSldLHt9KQ0000, new int[] {125}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgibm9uRW1wdHlCbG9jayIsc29ydCgiRXhwcmVzc2lvbiIpKSxbbGl0KCJ7IiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJzdGF0ZW1lbnRzIixcaXRlci1zZXBzKHNvcnQoIlN0YXRlbWVudCIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIildKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgifSIpXSx7fSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgibmVnYXRpdmUiLHNvcnQoIkV4cHJlc3Npb24iKSksW2xpdCgiLSIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgiYXJndW1lbnQiLHNvcnQoIkV4cHJlc3Npb24iKSldLHt9KQ0000(ExpectBuilder builder) { @@ -5271,11 +5271,11 @@ protected static final void _init_cHJvZChsYWJlbCgiY29tcG9zaXRpb24iLHNvcnQoIkV4cH protected static final void _init_cHJvZChsYWJlbCgic2V0Iixzb3J0KCJFeHByZXNzaW9uIikpLFtsaXQoInsiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImVsZW1lbnRzMCIsXGl0ZXItc3Rhci1zZXBzKHNvcnQoIkV4cHJlc3Npb24iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJ9IildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[3] = new NonTerminalStackNode(871, 3, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(864, 1, "layouts_LAYOUTLIST", null, null); - tmp[0] = new LiteralStackNode(863, 0, cHJvZChsaXQoInsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyMywxMjMpXSldLHt9KQ0000, new int[] {123}, null, null); - tmp[4] = new LiteralStackNode(872, 4, cHJvZChsaXQoIn0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyNSwxMjUpXSldLHt9KQ0000, new int[] {125}, null, null); - tmp[2] = new SeparatedListStackNode(869, 2, cmVndWxhcihcaXRlci1zdGFyLXNlcHMoc29ydCgiRXhwcmVzc2lvbiIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpXSkp, new NonTerminalStackNode(865, 0, "Expression", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(866, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(867, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(868, 3, "layouts_LAYOUTLIST", null, null)}, false, null, null); + tmp[3] = new NonTerminalStackNode(852, 3, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(845, 1, "layouts_LAYOUTLIST", null, null); + tmp[0] = new LiteralStackNode(844, 0, cHJvZChsaXQoInsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyMywxMjMpXSldLHt9KQ0000, new int[] {123}, null, null); + tmp[4] = new LiteralStackNode(853, 4, cHJvZChsaXQoIn0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyNSwxMjUpXSldLHt9KQ0000, new int[] {125}, null, null); + tmp[2] = new SeparatedListStackNode(850, 2, cmVndWxhcihcaXRlci1zdGFyLXNlcHMoc29ydCgiRXhwcmVzc2lvbiIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpXSkp, new NonTerminalStackNode(846, 0, "Expression", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(847, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(848, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(849, 3, "layouts_LAYOUTLIST", null, null)}, false, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgic2V0Iixzb3J0KCJFeHByZXNzaW9uIikpLFtsaXQoInsiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImVsZW1lbnRzMCIsXGl0ZXItc3Rhci1zZXBzKHNvcnQoIkV4cHJlc3Npb24iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJ9IildLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgiZmllbGRBY2Nlc3MiLHNvcnQoIkV4cHJlc3Npb24iKSksW2xhYmVsKCJleHByZXNzaW9uIixzb3J0KCJFeHByZXNzaW9uIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIi4iKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImZpZWxkIixsZXgoIk5hbWUiKSldLHt9KQ0000(ExpectBuilder builder) { @@ -5413,11 +5413,11 @@ protected static final void _init_cHJvZChsYWJlbCgiZ3JlYXRlclRoYW4iLHNvcnQoIkV4cH protected static final void _init_cHJvZChsYWJlbCgiaXMiLHNvcnQoIkV4cHJlc3Npb24iKSksW2xhYmVsKCJleHByZXNzaW9uIixzb3J0KCJFeHByZXNzaW9uIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoImlzIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJuYW1lIixsZXgoIk5hbWUiKSldLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[4] = new NonTerminalStackNode(931, 4, "Name", null, null); - tmp[2] = new LiteralStackNode(929, 2, cHJvZChsaXQoImlzIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pXSx7fSk00, new int[] {105,115}, null, null); - tmp[0] = new NonTerminalStackNode(926, 0, "Expression", null, null); - tmp[3] = new NonTerminalStackNode(930, 3, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(928, 1, "layouts_LAYOUTLIST", null, null); + tmp[4] = new NonTerminalStackNode(912, 4, "Name", null, null); + tmp[2] = new LiteralStackNode(910, 2, cHJvZChsaXQoImlzIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pXSx7fSk00, new int[] {105,115}, null, null); + tmp[0] = new NonTerminalStackNode(907, 0, "Expression", null, null); + tmp[3] = new NonTerminalStackNode(911, 3, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(909, 1, "layouts_LAYOUTLIST", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiaXMiLHNvcnQoIkV4cHJlc3Npb24iKSksW2xhYmVsKCJleHByZXNzaW9uIixzb3J0KCJFeHByZXNzaW9uIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoImlzIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJuYW1lIixsZXgoIk5hbWUiKSldLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgibmVnYXRpb24iLHNvcnQoIkV4cHJlc3Npb24iKSksW2xpdCgiISIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgiYXJndW1lbnQiLGNvbmRpdGlvbmFsKHNvcnQoIkV4cHJlc3Npb24iKSx7ZXhjZXB0KCJtYXRjaCIpLGV4Y2VwdCgibm9NYXRjaCIpfSkpXSx7fSk00(ExpectBuilder builder) { @@ -5483,13 +5483,13 @@ protected static final void _init_cHJvZChsYWJlbCgiYWRkaXRpb24iLHNvcnQoIkV4cHJlc3 protected static final void _init_cHJvZChsYWJlbCgidm9pZENsb3N1cmUiLHNvcnQoIkV4cHJlc3Npb24iKSksW2xhYmVsKCJwYXJhbWV0ZXJzIixzb3J0KCJQYXJhbWV0ZXJzIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoInsiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInN0YXRlbWVudHMwIixcaXRlci1zdGFyLXNlcHMoc29ydCgiU3RhdGVtZW50IiksW2xheW91dHMoIkxBWU9VVExJU1QiKV0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJ9IildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[7]; - tmp[0] = new NonTerminalStackNode(935, 0, "Parameters", null, null); - tmp[6] = new LiteralStackNode(945, 6, cHJvZChsaXQoIn0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyNSwxMjUpXSldLHt9KQ0000, new int[] {125}, null, null); - tmp[2] = new LiteralStackNode(938, 2, cHJvZChsaXQoInsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyMywxMjMpXSldLHt9KQ0000, new int[] {123}, null, null); - tmp[4] = new SeparatedListStackNode(942, 4, cmVndWxhcihcaXRlci1zdGFyLXNlcHMoc29ydCgiU3RhdGVtZW50IiksW2xheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(940, 0, "Statement", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(941, 1, "layouts_LAYOUTLIST", null, null)}, false, null, null); - tmp[5] = new NonTerminalStackNode(944, 5, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(937, 1, "layouts_LAYOUTLIST", null, null); - tmp[3] = new NonTerminalStackNode(939, 3, "layouts_LAYOUTLIST", null, null); + tmp[0] = new NonTerminalStackNode(916, 0, "Parameters", null, null); + tmp[6] = new LiteralStackNode(926, 6, cHJvZChsaXQoIn0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyNSwxMjUpXSldLHt9KQ0000, new int[] {125}, null, null); + tmp[2] = new LiteralStackNode(919, 2, cHJvZChsaXQoInsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyMywxMjMpXSldLHt9KQ0000, new int[] {123}, null, null); + tmp[4] = new SeparatedListStackNode(923, 4, cmVndWxhcihcaXRlci1zdGFyLXNlcHMoc29ydCgiU3RhdGVtZW50IiksW2xheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(921, 0, "Statement", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(922, 1, "layouts_LAYOUTLIST", null, null)}, false, null, null); + tmp[5] = new NonTerminalStackNode(925, 5, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(918, 1, "layouts_LAYOUTLIST", null, null); + tmp[3] = new NonTerminalStackNode(920, 3, "layouts_LAYOUTLIST", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgidm9pZENsb3N1cmUiLHNvcnQoIkV4cHJlc3Npb24iKSksW2xhYmVsKCJwYXJhbWV0ZXJzIixzb3J0KCJQYXJhbWV0ZXJzIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoInsiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInN0YXRlbWVudHMwIixcaXRlci1zdGFyLXNlcHMoc29ydCgiU3RhdGVtZW50IiksW2xheW91dHMoIkxBWU9VVExJU1QiKV0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJ9IildLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgib3IiLHNvcnQoIkV4cHJlc3Npb24iKSksW2xhYmVsKCJsaHMiLHNvcnQoIkV4cHJlc3Npb24iKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgifHwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInJocyIsc29ydCgiRXhwcmVzc2lvbiIpKV0se2Fzc29jKGxlZnQoKSl9KQ0000(ExpectBuilder builder) { @@ -5505,17 +5505,17 @@ protected static final void _init_cHJvZChsYWJlbCgib3IiLHNvcnQoIkV4cHJlc3Npb24iKS protected static final void _init_cHJvZChsYWJlbCgic2xpY2UiLHNvcnQoIkV4cHJlc3Npb24iKSksW2NvbmRpdGlvbmFsKGxhYmVsKCJleHByZXNzaW9uIixzb3J0KCJFeHByZXNzaW9uIikpLHtleGNlcHQoImlzRGVmaW5lZCIpLGV4Y2VwdCgidHJhbnNpdGl2ZUNsb3N1cmUiKSxleGNlcHQoInRyYW5zaXRpdmVSZWZsZXhpdmVDbG9zdXJlIil9KSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJbIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJvcHRGaXJzdCIsc29ydCgiT3B0aW9uYWxFeHByZXNzaW9uIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIi4uIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJvcHRMYXN0Iixzb3J0KCJPcHRpb25hbEV4cHJlc3Npb24iKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiXSIpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[11]; - tmp[10] = new LiteralStackNode(962, 10, cHJvZChsaXQoIl0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkzLDkzKV0pXSx7fSk00, new int[] {93}, null, null); - tmp[0] = new NonTerminalStackNode(950, 0, "Expression", null, null); - tmp[9] = new NonTerminalStackNode(961, 9, "layouts_LAYOUTLIST", null, null); - tmp[4] = new NonTerminalStackNode(954, 4, "OptionalExpression", null, null); - tmp[6] = new LiteralStackNode(957, 6, cHJvZChsaXQoIi4uIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg0Niw0NildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDYsNDYpXSldLHt9KQ0000, new int[] {46,46}, null, null); - tmp[2] = new LiteralStackNode(952, 2, cHJvZChsaXQoIlsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkxLDkxKV0pXSx7fSk00, new int[] {91}, null, null); - tmp[8] = new NonTerminalStackNode(959, 8, "OptionalExpression", null, null); - tmp[3] = new NonTerminalStackNode(953, 3, "layouts_LAYOUTLIST", null, null); - tmp[7] = new NonTerminalStackNode(958, 7, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(951, 1, "layouts_LAYOUTLIST", null, null); - tmp[5] = new NonTerminalStackNode(956, 5, "layouts_LAYOUTLIST", null, null); + tmp[10] = new LiteralStackNode(943, 10, cHJvZChsaXQoIl0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkzLDkzKV0pXSx7fSk00, new int[] {93}, null, null); + tmp[0] = new NonTerminalStackNode(931, 0, "Expression", null, null); + tmp[9] = new NonTerminalStackNode(942, 9, "layouts_LAYOUTLIST", null, null); + tmp[4] = new NonTerminalStackNode(935, 4, "OptionalExpression", null, null); + tmp[6] = new LiteralStackNode(938, 6, cHJvZChsaXQoIi4uIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg0Niw0NildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDYsNDYpXSldLHt9KQ0000, new int[] {46,46}, null, null); + tmp[2] = new LiteralStackNode(933, 2, cHJvZChsaXQoIlsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkxLDkxKV0pXSx7fSk00, new int[] {91}, null, null); + tmp[8] = new NonTerminalStackNode(940, 8, "OptionalExpression", null, null); + tmp[3] = new NonTerminalStackNode(934, 3, "layouts_LAYOUTLIST", null, null); + tmp[7] = new NonTerminalStackNode(939, 7, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(932, 1, "layouts_LAYOUTLIST", null, null); + tmp[5] = new NonTerminalStackNode(937, 5, "layouts_LAYOUTLIST", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgic2xpY2UiLHNvcnQoIkV4cHJlc3Npb24iKSksW2NvbmRpdGlvbmFsKGxhYmVsKCJleHByZXNzaW9uIixzb3J0KCJFeHByZXNzaW9uIikpLHtleGNlcHQoImlzRGVmaW5lZCIpLGV4Y2VwdCgidHJhbnNpdGl2ZUNsb3N1cmUiKSxleGNlcHQoInRyYW5zaXRpdmVSZWZsZXhpdmVDbG9zdXJlIil9KSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJbIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJvcHRGaXJzdCIsc29ydCgiT3B0aW9uYWxFeHByZXNzaW9uIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIi4uIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJvcHRMYXN0Iixzb3J0KCJPcHRpb25hbEV4cHJlc3Npb24iKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiXSIpXSx7fSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgibW9kdWxvIixzb3J0KCJFeHByZXNzaW9uIikpLFtsYWJlbCgibGhzIixzb3J0KCJFeHByZXNzaW9uIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIm1vZCIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgicmhzIixzb3J0KCJFeHByZXNzaW9uIikpXSx7YXNzb2MobGVmdCgpKX0p(ExpectBuilder builder) { @@ -5570,6 +5570,8 @@ public static void init(ExpectBuilder builder){ _init_cHJvZChsYWJlbCgiaXNEZWZpbmVkIixzb3J0KCJFeHByZXNzaW9uIikpLFtsYWJlbCgiYXJndW1lbnQiLHNvcnQoIkV4cHJlc3Npb24iKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiPyIpXSx7fSk00(builder); + _init_cHJvZChsYWJlbCgibGVzc1RoYW4iLHNvcnQoIkV4cHJlc3Npb24iKSksW2xhYmVsKCJsaHMiLHNvcnQoIkV4cHJlc3Npb24iKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGNvbmRpdGlvbmFsKGxpdCgiXDwiKSx7XG5vdC1mb2xsb3cobGl0KCItIikpfSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJyaHMiLHNvcnQoIkV4cHJlc3Npb24iKSldLHt9KQ0000(builder); + _init_cHJvZChsYWJlbCgicmVpZmllZFR5cGUiLHNvcnQoIkV4cHJlc3Npb24iKSksW2xpdCgidHlwZSIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIigiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInN5bWJvbCIsc29ydCgiRXhwcmVzc2lvbiIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJkZWZpbml0aW9ucyIsc29ydCgiRXhwcmVzc2lvbiIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIpIildLHt9KQ0000(builder); _init_cHJvZChsYWJlbCgiYWxsIixzb3J0KCJFeHByZXNzaW9uIikpLFtsaXQoImFsbCIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIigiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImdlbmVyYXRvcnMiLFxpdGVyLXNlcHMoc29ydCgiRXhwcmVzc2lvbiIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpXSkpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIikiKV0se30p(builder); @@ -5606,10 +5608,6 @@ public static void init(ExpectBuilder builder){ _init_cHJvZChsYWJlbCgiZGl2aXNpb24iLHNvcnQoIkV4cHJlc3Npb24iKSksW2xhYmVsKCJsaHMiLHNvcnQoIkV4cHJlc3Npb24iKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLyIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgicmhzIixzb3J0KCJFeHByZXNzaW9uIikpXSx7fSk00(builder); - _init_cHJvZChsYWJlbCgibGVzc1RoYW4iLHNvcnQoIkV4cHJlc3Npb24iKSksW2xhYmVsKCJsaHMiLHNvcnQoIkV4cHJlc3Npb24iKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGNvbmRpdGlvbmFsKGxpdCgiXDwiKSx7XG5vdC1mb2xsb3cobGl0KCItIikpfSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJyaHMiLHNvcnQoIkV4cHJlc3Npb24iKSldLHt9KQ0000(builder); - - _init_cHJvZChsYWJlbCgidHVwbGUiLHNvcnQoIkV4cHJlc3Npb24iKSksW2xpdCgiXDwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImVsZW1lbnRzIixcaXRlci1zZXBzKHNvcnQoIkV4cHJlc3Npb24iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJcPiIpXSx7fSk00(builder); - _init_cHJvZChsYWJlbCgiYW5kIixzb3J0KCJFeHByZXNzaW9uIikpLFtsYWJlbCgibGhzIixzb3J0KCJFeHByZXNzaW9uIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIiYmIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJyaHMiLHNvcnQoIkV4cHJlc3Npb24iKSldLHthc3NvYyhsZWZ0KCkpfSk00(builder); _init_cHJvZChsYWJlbCgiam9pbiIsc29ydCgiRXhwcmVzc2lvbiIpKSxbbGFiZWwoImxocyIsc29ydCgiRXhwcmVzc2lvbiIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJqb2luIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJyaHMiLHNvcnQoIkV4cHJlc3Npb24iKSldLHt9KQ0000(builder); @@ -5620,6 +5618,8 @@ public static void init(ExpectBuilder builder){ _init_cHJvZChsYWJlbCgidmlzaXQiLHNvcnQoIkV4cHJlc3Npb24iKSksW2xhYmVsKCJsYWJlbCIsc29ydCgiTGFiZWwiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJ2aXNpdCIsc29ydCgiVmlzaXQiKSldLHt9KQ0000(builder); + _init_cHJvZChsYWJlbCgidHVwbGUiLHNvcnQoIkV4cHJlc3Npb24iKSksW2xpdCgiXDwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImVsZW1lbnRzMCIsXGl0ZXItc3Rhci1zZXBzKHNvcnQoIkV4cHJlc3Npb24iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJcPiIpXSx7fSk00(builder); + _init_cHJvZChsYWJlbCgicHJvZHVjdCIsc29ydCgiRXhwcmVzc2lvbiIpKSxbbGFiZWwoImxocyIsc29ydCgiRXhwcmVzc2lvbiIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIqIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGNvbmRpdGlvbmFsKGVtcHR5KCkse1xub3QtZm9sbG93KGxpdCgiKiIpKX0pLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgicmhzIixjb25kaXRpb25hbChzb3J0KCJFeHByZXNzaW9uIikse2V4Y2VwdCgibWF0Y2giKSxleGNlcHQoIm5vTWF0Y2giKX0pKV0se30p(builder); _init_cHJvZChsYWJlbCgiY2xvc3VyZSIsc29ydCgiRXhwcmVzc2lvbiIpKSxbbGFiZWwoInR5cGUiLHNvcnQoIlR5cGUiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJwYXJhbWV0ZXJzIixzb3J0KCJQYXJhbWV0ZXJzIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoInsiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInN0YXRlbWVudHMiLFxpdGVyLXNlcHMoc29ydCgiU3RhdGVtZW50IiksW2xheW91dHMoIkxBWU9VVExJU1QiKV0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJ9IildLHt9KQ0000(builder); From 172e9cf4de9b1364ce08377e248d721c63be11b8 Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Thu, 19 Dec 2024 14:46:07 +0100 Subject: [PATCH 088/191] removed strange duplicated --- src/org/rascalmpl/ast/Expression.java | 76 --------------------------- 1 file changed, 76 deletions(-) diff --git a/src/org/rascalmpl/ast/Expression.java b/src/org/rascalmpl/ast/Expression.java index bd10196a596..7ae910eed61 100644 --- a/src/org/rascalmpl/ast/Expression.java +++ b/src/org/rascalmpl/ast/Expression.java @@ -6394,82 +6394,6 @@ public boolean isTuple() { return false; } - static public class Tuple extends Expression { - // Production: sig("Tuple",[arg("java.util.List\","elements")],breakable=false) - - - private final java.util.List elements; - - public Tuple(ISourceLocation src, IConstructor node , java.util.List elements) { - super(src, node); - - this.elements = elements; - } - - @Override - public boolean isTuple() { - return true; - } - - @Override - public T accept(IASTVisitor visitor) { - return visitor.visitExpressionTuple(this); - } - - @Override - protected void addForLineNumber(int $line, java.util.List $result) { - if (getLocation().getBeginLine() == $line) { - $result.add(this); - } - ISourceLocation $l; - - for (AbstractAST $elem : elements) { - $l = $elem.getLocation(); - if ($l.hasLineColumn() && $l.getBeginLine() <= $line && $l.getEndLine() >= $line) { - $elem.addForLineNumber($line, $result); - } - if ($l.getBeginLine() > $line) { - return; - } - - } - } - - @Override - public boolean equals(Object o) { - if (!(o instanceof Tuple)) { - return false; - } - Tuple tmp = (Tuple) o; - return true && tmp.elements.equals(this.elements) ; - } - - @Override - public int hashCode() { - return 599 + 863 * elements.hashCode() ; - } - - - @Override - public java.util.List getElements() { - return this.elements; - } - - @Override - public boolean hasElements() { - return true; - } - - @Override - public Object clone() { - return newInstance(getClass(), src, (IConstructor) null , clone(elements)); - } - - } - public boolean isTuple() { - return false; - } - static public class Tuple extends Expression { // Production: sig("Tuple",[arg("java.util.List\","elements0")],breakable=false) From 2a7c5334f14f2faecb5f23f3a84b78f10d4f3aa2 Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Thu, 19 Dec 2024 14:55:51 +0100 Subject: [PATCH 089/191] also added empty tuple to Pattern syntax --- src/org/rascalmpl/ast/Expression.java | 19 +- src/org/rascalmpl/ast/Field.java | 4 +- src/org/rascalmpl/ast/Formals.java | 2 +- src/org/rascalmpl/ast/FunctionBody.java | 2 +- .../rascalmpl/ast/FunctionDeclaration.java | 8 +- src/org/rascalmpl/ast/FunctionModifier.java | 6 +- src/org/rascalmpl/ast/FunctionModifiers.java | 2 +- src/org/rascalmpl/ast/FunctionType.java | 2 +- src/org/rascalmpl/ast/Header.java | 4 +- src/org/rascalmpl/ast/IASTVisitor.java | 2 - src/org/rascalmpl/ast/Import.java | 8 +- src/org/rascalmpl/ast/ImportedModule.java | 8 +- src/org/rascalmpl/ast/IntegerLiteral.java | 6 +- .../ast/KeywordArgument_Expression.java | 2 +- .../ast/KeywordArguments_Expression.java | 4 +- src/org/rascalmpl/ast/KeywordFormal.java | 2 +- src/org/rascalmpl/ast/KeywordFormals.java | 4 +- src/org/rascalmpl/ast/Kind.java | 18 +- src/org/rascalmpl/ast/Label.java | 4 +- src/org/rascalmpl/ast/Literal.java | 16 +- .../ast/LocalVariableDeclaration.java | 4 +- src/org/rascalmpl/ast/LocationLiteral.java | 2 +- src/org/rascalmpl/ast/Mapping_Expression.java | 2 +- src/org/rascalmpl/ast/Module.java | 2 +- src/org/rascalmpl/ast/ModuleActuals.java | 2 +- src/org/rascalmpl/ast/ModuleParameters.java | 2 +- src/org/rascalmpl/ast/NullASTVisitor.java | 4 - src/org/rascalmpl/ast/OptionalExpression.java | 4 +- src/org/rascalmpl/ast/Parameters.java | 4 +- src/org/rascalmpl/ast/PathPart.java | 4 +- src/org/rascalmpl/ast/PathTail.java | 4 +- src/org/rascalmpl/ast/PatternWithAction.java | 4 +- src/org/rascalmpl/ast/Prod.java | 12 +- src/org/rascalmpl/ast/ProdModifier.java | 6 +- src/org/rascalmpl/ast/ProtocolPart.java | 4 +- src/org/rascalmpl/ast/ProtocolTail.java | 4 +- src/org/rascalmpl/ast/QualifiedName.java | 2 +- src/org/rascalmpl/ast/Range.java | 4 +- src/org/rascalmpl/ast/Renaming.java | 2 +- src/org/rascalmpl/ast/Renamings.java | 2 +- src/org/rascalmpl/ast/Replacement.java | 4 +- src/org/rascalmpl/ast/ShellCommand.java | 22 +- src/org/rascalmpl/ast/Signature.java | 4 +- src/org/rascalmpl/ast/Start.java | 4 +- src/org/rascalmpl/ast/Statement.java | 54 +- src/org/rascalmpl/ast/Strategy.java | 12 +- src/org/rascalmpl/ast/StringLiteral.java | 6 +- src/org/rascalmpl/ast/StringMiddle.java | 6 +- src/org/rascalmpl/ast/StringTail.java | 6 +- src/org/rascalmpl/ast/StringTemplate.java | 10 +- src/org/rascalmpl/ast/StructuredType.java | 2 +- src/org/rascalmpl/ast/Sym.java | 50 +- src/org/rascalmpl/ast/SyntaxDefinition.java | 8 +- src/org/rascalmpl/ast/Tag.java | 6 +- src/org/rascalmpl/ast/Tags.java | 2 +- src/org/rascalmpl/ast/Target.java | 4 +- src/org/rascalmpl/ast/Toplevel.java | 2 +- src/org/rascalmpl/ast/Type.java | 16 +- src/org/rascalmpl/ast/TypeArg.java | 4 +- src/org/rascalmpl/ast/TypeVar.java | 4 +- src/org/rascalmpl/ast/UserType.java | 4 +- src/org/rascalmpl/ast/Variable.java | 4 +- src/org/rascalmpl/ast/Variant.java | 2 +- src/org/rascalmpl/ast/Visibility.java | 4 +- src/org/rascalmpl/ast/Visit.java | 4 +- .../library/lang/rascal/syntax/Rascal.rsc | 2 +- .../lang/rascal/syntax/RascalParser.java | 4773 ++++++++--------- .../tests/library/lang/json/JSONIOTests.rsc | 1 + .../semantics/dynamic/Expression.java | 7 +- 69 files changed, 2598 insertions(+), 2626 deletions(-) diff --git a/src/org/rascalmpl/ast/Expression.java b/src/org/rascalmpl/ast/Expression.java index 7ae910eed61..1babdf54a65 100644 --- a/src/org/rascalmpl/ast/Expression.java +++ b/src/org/rascalmpl/ast/Expression.java @@ -33,13 +33,6 @@ public boolean hasArguments() { public java.util.List getArguments() { throw new UnsupportedOperationException(); } - public boolean hasElements() { - return false; - } - - public java.util.List getElements() { - throw new UnsupportedOperationException(); - } public boolean hasElements0() { return false; } @@ -6446,7 +6439,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 331 + 347 * elements0.hashCode() ; + return 599 + 863 * elements0.hashCode() ; } @@ -6530,7 +6523,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 487 + 53 * type.hashCode() + 983 * name.hashCode() ; + return 331 + 347 * type.hashCode() + 487 * name.hashCode() ; } @@ -6633,7 +6626,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 653 + 29 * type.hashCode() + 487 * name.hashCode() + 653 * pattern.hashCode() ; + return 53 + 983 * type.hashCode() + 653 * name.hashCode() + 29 * pattern.hashCode() ; } @@ -6735,7 +6728,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 373 + 449 * name.hashCode() + 251 * pattern.hashCode() ; + return 487 + 653 * name.hashCode() + 373 * pattern.hashCode() ; } @@ -6828,7 +6821,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 109 + 967 * label.hashCode() + 269 * visit.hashCode() ; + return 449 + 251 * label.hashCode() + 109 * visit.hashCode() ; } @@ -6923,7 +6916,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 97 + 101 * parameters.hashCode() + 467 * statements0.hashCode() ; + return 967 + 269 * parameters.hashCode() + 97 * statements0.hashCode() ; } diff --git a/src/org/rascalmpl/ast/Field.java b/src/org/rascalmpl/ast/Field.java index 3717dbd7b6c..18cf8c303c3 100644 --- a/src/org/rascalmpl/ast/Field.java +++ b/src/org/rascalmpl/ast/Field.java @@ -98,7 +98,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 89 + 727 * fieldIndex.hashCode() ; + return 101 + 467 * fieldIndex.hashCode() ; } @@ -172,7 +172,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 673 + 743 * fieldName.hashCode() ; + return 89 + 727 * fieldName.hashCode() ; } diff --git a/src/org/rascalmpl/ast/Formals.java b/src/org/rascalmpl/ast/Formals.java index 252c3ee0e28..1a9595c0311 100644 --- a/src/org/rascalmpl/ast/Formals.java +++ b/src/org/rascalmpl/ast/Formals.java @@ -93,7 +93,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 29 + 571 * formals.hashCode() ; + return 673 + 743 * formals.hashCode() ; } diff --git a/src/org/rascalmpl/ast/FunctionBody.java b/src/org/rascalmpl/ast/FunctionBody.java index 8c8ef98ac3e..60c54218830 100644 --- a/src/org/rascalmpl/ast/FunctionBody.java +++ b/src/org/rascalmpl/ast/FunctionBody.java @@ -93,7 +93,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 211 + 727 * statements.hashCode() ; + return 29 + 571 * statements.hashCode() ; } diff --git a/src/org/rascalmpl/ast/FunctionDeclaration.java b/src/org/rascalmpl/ast/FunctionDeclaration.java index bbbb1460d10..8fd452a5527 100644 --- a/src/org/rascalmpl/ast/FunctionDeclaration.java +++ b/src/org/rascalmpl/ast/FunctionDeclaration.java @@ -146,7 +146,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 251 + 131 * tags.hashCode() + 811 * visibility.hashCode() + 199 * signature.hashCode() ; + return 211 + 727 * tags.hashCode() + 251 * visibility.hashCode() + 131 * signature.hashCode() ; } @@ -280,7 +280,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 5 + 157 * tags.hashCode() + 389 * visibility.hashCode() + 163 * signature.hashCode() + 163 * expression.hashCode() + 71 * conditions.hashCode() ; + return 811 + 199 * tags.hashCode() + 5 * visibility.hashCode() + 157 * signature.hashCode() + 389 * expression.hashCode() + 163 * conditions.hashCode() ; } @@ -420,7 +420,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 503 + 31 * tags.hashCode() + 181 * visibility.hashCode() + 313 * signature.hashCode() + 463 * body.hashCode() ; + return 163 + 71 * tags.hashCode() + 503 * visibility.hashCode() + 31 * signature.hashCode() + 181 * body.hashCode() ; } @@ -551,7 +551,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 257 + 211 * tags.hashCode() + 179 * visibility.hashCode() + 457 * signature.hashCode() + 839 * expression.hashCode() ; + return 313 + 463 * tags.hashCode() + 257 * visibility.hashCode() + 211 * signature.hashCode() + 179 * expression.hashCode() ; } diff --git a/src/org/rascalmpl/ast/FunctionModifier.java b/src/org/rascalmpl/ast/FunctionModifier.java index b1258eb8509..165fe167584 100644 --- a/src/org/rascalmpl/ast/FunctionModifier.java +++ b/src/org/rascalmpl/ast/FunctionModifier.java @@ -74,7 +74,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 2 ; + return 457 ; } @@ -129,7 +129,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 461 ; + return 839 ; } @@ -184,7 +184,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 877 ; + return 2 ; } diff --git a/src/org/rascalmpl/ast/FunctionModifiers.java b/src/org/rascalmpl/ast/FunctionModifiers.java index f8d5870ff79..70a886497e2 100644 --- a/src/org/rascalmpl/ast/FunctionModifiers.java +++ b/src/org/rascalmpl/ast/FunctionModifiers.java @@ -93,7 +93,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 599 + 281 * modifiers.hashCode() ; + return 461 + 877 * modifiers.hashCode() ; } diff --git a/src/org/rascalmpl/ast/FunctionType.java b/src/org/rascalmpl/ast/FunctionType.java index 26d07d33b8f..defc97638e1 100644 --- a/src/org/rascalmpl/ast/FunctionType.java +++ b/src/org/rascalmpl/ast/FunctionType.java @@ -110,7 +110,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 43 + 103 * type.hashCode() + 673 * arguments.hashCode() ; + return 599 + 281 * type.hashCode() + 43 * arguments.hashCode() ; } diff --git a/src/org/rascalmpl/ast/Header.java b/src/org/rascalmpl/ast/Header.java index 2230da82048..64bce1b112e 100644 --- a/src/org/rascalmpl/ast/Header.java +++ b/src/org/rascalmpl/ast/Header.java @@ -134,7 +134,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 509 + 61 * tags.hashCode() + 173 * name.hashCode() + 761 * imports.hashCode() ; + return 103 + 673 * tags.hashCode() + 509 * name.hashCode() + 61 * imports.hashCode() ; } @@ -258,7 +258,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 409 + 997 * tags.hashCode() + 367 * name.hashCode() + 401 * params.hashCode() + 139 * imports.hashCode() ; + return 173 + 761 * tags.hashCode() + 409 * name.hashCode() + 997 * params.hashCode() + 367 * imports.hashCode() ; } diff --git a/src/org/rascalmpl/ast/IASTVisitor.java b/src/org/rascalmpl/ast/IASTVisitor.java index e29eb85925a..97b5fe91102 100644 --- a/src/org/rascalmpl/ast/IASTVisitor.java +++ b/src/org/rascalmpl/ast/IASTVisitor.java @@ -323,8 +323,6 @@ public interface IASTVisitor { public T visitExpressionTuple(Expression.Tuple x); - public T visitExpressionTuple(Expression.Tuple x); - public T visitExpressionTypedVariable(Expression.TypedVariable x); public T visitExpressionTypedVariableBecomes(Expression.TypedVariableBecomes x); diff --git a/src/org/rascalmpl/ast/Import.java b/src/org/rascalmpl/ast/Import.java index 9da3ec16e80..1853df9e1d2 100644 --- a/src/org/rascalmpl/ast/Import.java +++ b/src/org/rascalmpl/ast/Import.java @@ -112,7 +112,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 937 + 521 * module.hashCode() ; + return 401 + 139 * module.hashCode() ; } @@ -186,7 +186,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 719 + 773 * module.hashCode() ; + return 937 + 521 * module.hashCode() ; } @@ -270,7 +270,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 277 + 239 * name.hashCode() + 151 * at.hashCode() ; + return 719 + 773 * name.hashCode() + 277 * at.hashCode() ; } @@ -353,7 +353,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 397 + 137 * syntax.hashCode() ; + return 239 + 151 * syntax.hashCode() ; } diff --git a/src/org/rascalmpl/ast/ImportedModule.java b/src/org/rascalmpl/ast/ImportedModule.java index ad54aff866e..82a122881da 100644 --- a/src/org/rascalmpl/ast/ImportedModule.java +++ b/src/org/rascalmpl/ast/ImportedModule.java @@ -115,7 +115,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 811 + 709 * name.hashCode() + 167 * actuals.hashCode() ; + return 397 + 137 * name.hashCode() + 811 * actuals.hashCode() ; } @@ -218,7 +218,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 53 + 463 * name.hashCode() + 127 * actuals.hashCode() + 67 * renamings.hashCode() ; + return 709 + 167 * name.hashCode() + 53 * actuals.hashCode() + 463 * renamings.hashCode() ; } @@ -310,7 +310,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 643 + 229 * name.hashCode() ; + return 127 + 67 * name.hashCode() ; } @@ -394,7 +394,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 271 + 331 * name.hashCode() + 17 * renamings.hashCode() ; + return 643 + 229 * name.hashCode() + 271 * renamings.hashCode() ; } diff --git a/src/org/rascalmpl/ast/IntegerLiteral.java b/src/org/rascalmpl/ast/IntegerLiteral.java index cd0b67c7944..b36a0229034 100644 --- a/src/org/rascalmpl/ast/IntegerLiteral.java +++ b/src/org/rascalmpl/ast/IntegerLiteral.java @@ -105,7 +105,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 401 + 313 * decimal.hashCode() ; + return 331 + 17 * decimal.hashCode() ; } @@ -179,7 +179,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 449 + 463 * hex.hashCode() ; + return 401 + 313 * hex.hashCode() ; } @@ -253,7 +253,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 971 + 179 * octal.hashCode() ; + return 449 + 463 * octal.hashCode() ; } diff --git a/src/org/rascalmpl/ast/KeywordArgument_Expression.java b/src/org/rascalmpl/ast/KeywordArgument_Expression.java index 4ee5627240a..0c70e0f32c0 100644 --- a/src/org/rascalmpl/ast/KeywordArgument_Expression.java +++ b/src/org/rascalmpl/ast/KeywordArgument_Expression.java @@ -108,7 +108,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 229 + 823 * name.hashCode() + 43 * expression.hashCode() ; + return 971 + 179 * name.hashCode() + 229 * expression.hashCode() ; } diff --git a/src/org/rascalmpl/ast/KeywordArguments_Expression.java b/src/org/rascalmpl/ast/KeywordArguments_Expression.java index 84d2d262b72..8fd2d746939 100644 --- a/src/org/rascalmpl/ast/KeywordArguments_Expression.java +++ b/src/org/rascalmpl/ast/KeywordArguments_Expression.java @@ -110,7 +110,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 733 + 239 * optionalComma.hashCode() + 941 * keywordArgumentList.hashCode() ; + return 823 + 43 * optionalComma.hashCode() + 733 * keywordArgumentList.hashCode() ; } @@ -183,7 +183,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 941 ; + return 239 ; } diff --git a/src/org/rascalmpl/ast/KeywordFormal.java b/src/org/rascalmpl/ast/KeywordFormal.java index 353eb6199ca..f8f8aecdf6e 100644 --- a/src/org/rascalmpl/ast/KeywordFormal.java +++ b/src/org/rascalmpl/ast/KeywordFormal.java @@ -125,7 +125,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 2 + 421 * type.hashCode() + 941 * name.hashCode() + 307 * expression.hashCode() ; + return 941 + 941 * type.hashCode() + 2 * name.hashCode() + 421 * expression.hashCode() ; } diff --git a/src/org/rascalmpl/ast/KeywordFormals.java b/src/org/rascalmpl/ast/KeywordFormals.java index 436642881ae..2f39c228054 100644 --- a/src/org/rascalmpl/ast/KeywordFormals.java +++ b/src/org/rascalmpl/ast/KeywordFormals.java @@ -110,7 +110,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 941 + 631 * optionalComma.hashCode() + 269 * keywordFormalList.hashCode() ; + return 941 + 307 * optionalComma.hashCode() + 941 * keywordFormalList.hashCode() ; } @@ -183,7 +183,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 293 ; + return 631 ; } diff --git a/src/org/rascalmpl/ast/Kind.java b/src/org/rascalmpl/ast/Kind.java index 7a7dcacf87f..07e5f1f9550 100644 --- a/src/org/rascalmpl/ast/Kind.java +++ b/src/org/rascalmpl/ast/Kind.java @@ -74,7 +74,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 757 ; + return 269 ; } @@ -129,7 +129,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 829 ; + return 293 ; } @@ -184,7 +184,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 47 ; + return 757 ; } @@ -239,7 +239,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 257 ; + return 829 ; } @@ -294,7 +294,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 367 ; + return 47 ; } @@ -349,7 +349,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 421 ; + return 257 ; } @@ -404,7 +404,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 577 ; + return 367 ; } @@ -459,7 +459,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 653 ; + return 421 ; } @@ -514,7 +514,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 701 ; + return 577 ; } diff --git a/src/org/rascalmpl/ast/Label.java b/src/org/rascalmpl/ast/Label.java index 546f0120444..b2b0a7ed8c0 100644 --- a/src/org/rascalmpl/ast/Label.java +++ b/src/org/rascalmpl/ast/Label.java @@ -91,7 +91,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 233 + 577 * name.hashCode() ; + return 653 + 701 * name.hashCode() ; } @@ -155,7 +155,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 643 ; + return 233 ; } diff --git a/src/org/rascalmpl/ast/Literal.java b/src/org/rascalmpl/ast/Literal.java index 8609f0b0e68..945fa6fc57d 100644 --- a/src/org/rascalmpl/ast/Literal.java +++ b/src/org/rascalmpl/ast/Literal.java @@ -140,7 +140,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 631 + 173 * booleanLiteral.hashCode() ; + return 577 + 643 * booleanLiteral.hashCode() ; } @@ -214,7 +214,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 103 + 257 * dateTimeLiteral.hashCode() ; + return 631 + 173 * dateTimeLiteral.hashCode() ; } @@ -288,7 +288,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 283 + 521 * integerLiteral.hashCode() ; + return 103 + 257 * integerLiteral.hashCode() ; } @@ -362,7 +362,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 127 + 89 * locationLiteral.hashCode() ; + return 283 + 521 * locationLiteral.hashCode() ; } @@ -436,7 +436,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 739 + 547 * rationalLiteral.hashCode() ; + return 127 + 89 * rationalLiteral.hashCode() ; } @@ -510,7 +510,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 3 + 373 * realLiteral.hashCode() ; + return 739 + 547 * realLiteral.hashCode() ; } @@ -584,7 +584,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 31 + 283 * regExpLiteral.hashCode() ; + return 3 + 373 * regExpLiteral.hashCode() ; } @@ -658,7 +658,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 461 + 7 * stringLiteral.hashCode() ; + return 31 + 283 * stringLiteral.hashCode() ; } diff --git a/src/org/rascalmpl/ast/LocalVariableDeclaration.java b/src/org/rascalmpl/ast/LocalVariableDeclaration.java index d1609d507c6..ffc7efd7b1e 100644 --- a/src/org/rascalmpl/ast/LocalVariableDeclaration.java +++ b/src/org/rascalmpl/ast/LocalVariableDeclaration.java @@ -91,7 +91,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 463 + 691 * declarator.hashCode() ; + return 461 + 7 * declarator.hashCode() ; } @@ -165,7 +165,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 479 + 89 * declarator.hashCode() ; + return 463 + 691 * declarator.hashCode() ; } diff --git a/src/org/rascalmpl/ast/LocationLiteral.java b/src/org/rascalmpl/ast/LocationLiteral.java index 70dc451d6d0..041da56636d 100644 --- a/src/org/rascalmpl/ast/LocationLiteral.java +++ b/src/org/rascalmpl/ast/LocationLiteral.java @@ -108,7 +108,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 937 + 631 * protocolPart.hashCode() + 797 * pathPart.hashCode() ; + return 479 + 89 * protocolPart.hashCode() + 937 * pathPart.hashCode() ; } diff --git a/src/org/rascalmpl/ast/Mapping_Expression.java b/src/org/rascalmpl/ast/Mapping_Expression.java index 5ea6504ffb9..dccc2dcf9df 100644 --- a/src/org/rascalmpl/ast/Mapping_Expression.java +++ b/src/org/rascalmpl/ast/Mapping_Expression.java @@ -108,7 +108,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 239 + 137 * from.hashCode() + 277 * to.hashCode() ; + return 631 + 797 * from.hashCode() + 239 * to.hashCode() ; } diff --git a/src/org/rascalmpl/ast/Module.java b/src/org/rascalmpl/ast/Module.java index 76f6fe2bd2b..b3b8333ac7d 100644 --- a/src/org/rascalmpl/ast/Module.java +++ b/src/org/rascalmpl/ast/Module.java @@ -108,7 +108,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 281 + 229 * header.hashCode() + 211 * body.hashCode() ; + return 137 + 277 * header.hashCode() + 281 * body.hashCode() ; } diff --git a/src/org/rascalmpl/ast/ModuleActuals.java b/src/org/rascalmpl/ast/ModuleActuals.java index 15613d8567d..8011982b649 100644 --- a/src/org/rascalmpl/ast/ModuleActuals.java +++ b/src/org/rascalmpl/ast/ModuleActuals.java @@ -93,7 +93,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 83 + 673 * types.hashCode() ; + return 229 + 211 * types.hashCode() ; } diff --git a/src/org/rascalmpl/ast/ModuleParameters.java b/src/org/rascalmpl/ast/ModuleParameters.java index b63ac141f10..1e5649d5506 100644 --- a/src/org/rascalmpl/ast/ModuleParameters.java +++ b/src/org/rascalmpl/ast/ModuleParameters.java @@ -93,7 +93,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 557 + 601 * parameters.hashCode() ; + return 83 + 673 * parameters.hashCode() ; } diff --git a/src/org/rascalmpl/ast/NullASTVisitor.java b/src/org/rascalmpl/ast/NullASTVisitor.java index bccc74f091c..62ec109ee14 100644 --- a/src/org/rascalmpl/ast/NullASTVisitor.java +++ b/src/org/rascalmpl/ast/NullASTVisitor.java @@ -629,10 +629,6 @@ public T visitExpressionTuple(Expression.Tuple x) { return null; } - public T visitExpressionTuple(Expression.Tuple x) { - return null; - } - public T visitExpressionTypedVariable(Expression.TypedVariable x) { return null; } diff --git a/src/org/rascalmpl/ast/OptionalExpression.java b/src/org/rascalmpl/ast/OptionalExpression.java index ef3dbdd1f6d..a951b5abbbc 100644 --- a/src/org/rascalmpl/ast/OptionalExpression.java +++ b/src/org/rascalmpl/ast/OptionalExpression.java @@ -91,7 +91,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 19 + 829 * expression.hashCode() ; + return 557 + 601 * expression.hashCode() ; } @@ -155,7 +155,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 809 ; + return 19 ; } diff --git a/src/org/rascalmpl/ast/Parameters.java b/src/org/rascalmpl/ast/Parameters.java index 3e12d9e4c07..8a0e49b8982 100644 --- a/src/org/rascalmpl/ast/Parameters.java +++ b/src/org/rascalmpl/ast/Parameters.java @@ -108,7 +108,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 157 + 31 * formals.hashCode() + 13 * keywordFormals.hashCode() ; + return 829 + 809 * formals.hashCode() + 157 * keywordFormals.hashCode() ; } @@ -201,7 +201,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 857 + 383 * formals.hashCode() + 853 * keywordFormals.hashCode() ; + return 31 + 13 * formals.hashCode() + 857 * keywordFormals.hashCode() ; } diff --git a/src/org/rascalmpl/ast/PathPart.java b/src/org/rascalmpl/ast/PathPart.java index e59d5a5653e..6df0cc5dc2c 100644 --- a/src/org/rascalmpl/ast/PathPart.java +++ b/src/org/rascalmpl/ast/PathPart.java @@ -132,7 +132,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 743 + 331 * pre.hashCode() + 967 * expression.hashCode() + 257 * tail.hashCode() ; + return 383 + 853 * pre.hashCode() + 743 * expression.hashCode() + 331 * tail.hashCode() ; } @@ -224,7 +224,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 2 + 709 * pathChars.hashCode() ; + return 967 + 257 * pathChars.hashCode() ; } diff --git a/src/org/rascalmpl/ast/PathTail.java b/src/org/rascalmpl/ast/PathTail.java index cb5b8cfd6cd..f17eb658c16 100644 --- a/src/org/rascalmpl/ast/PathTail.java +++ b/src/org/rascalmpl/ast/PathTail.java @@ -132,7 +132,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 499 + 991 * mid.hashCode() + 653 * expression.hashCode() + 557 * tail.hashCode() ; + return 2 + 709 * mid.hashCode() + 499 * expression.hashCode() + 991 * tail.hashCode() ; } @@ -224,7 +224,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 257 + 941 * post.hashCode() ; + return 653 + 557 * post.hashCode() ; } diff --git a/src/org/rascalmpl/ast/PatternWithAction.java b/src/org/rascalmpl/ast/PatternWithAction.java index 56a834a09ff..32148f04e9f 100644 --- a/src/org/rascalmpl/ast/PatternWithAction.java +++ b/src/org/rascalmpl/ast/PatternWithAction.java @@ -115,7 +115,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 601 + 239 * pattern.hashCode() + 241 * statement.hashCode() ; + return 257 + 941 * pattern.hashCode() + 601 * statement.hashCode() ; } @@ -208,7 +208,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 673 + 757 * pattern.hashCode() + 449 * replacement.hashCode() ; + return 239 + 241 * pattern.hashCode() + 673 * replacement.hashCode() ; } diff --git a/src/org/rascalmpl/ast/Prod.java b/src/org/rascalmpl/ast/Prod.java index 44ba13d816d..1aa1429bcfc 100644 --- a/src/org/rascalmpl/ast/Prod.java +++ b/src/org/rascalmpl/ast/Prod.java @@ -150,7 +150,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 167 + 191 * lhs.hashCode() + 191 * rhs.hashCode() ; + return 757 + 449 * lhs.hashCode() + 167 * rhs.hashCode() ; } @@ -243,7 +243,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 409 + 487 * associativity.hashCode() + 29 * group.hashCode() ; + return 191 + 191 * associativity.hashCode() + 409 * group.hashCode() ; } @@ -336,7 +336,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 23 + 23 * lhs.hashCode() + 491 * rhs.hashCode() ; + return 487 + 29 * lhs.hashCode() + 23 * rhs.hashCode() ; } @@ -443,7 +443,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 617 + 761 * modifiers.hashCode() + 197 * name.hashCode() + 5 * syms.hashCode() ; + return 23 + 491 * modifiers.hashCode() + 617 * name.hashCode() + 761 * syms.hashCode() ; } @@ -535,7 +535,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 19 + 19 * referenced.hashCode() ; + return 197 + 5 * referenced.hashCode() ; } @@ -623,7 +623,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 19 + 157 * modifiers.hashCode() + 139 * syms.hashCode() ; + return 19 + 19 * modifiers.hashCode() + 19 * syms.hashCode() ; } diff --git a/src/org/rascalmpl/ast/ProdModifier.java b/src/org/rascalmpl/ast/ProdModifier.java index 4acd3e17373..0d4b3612650 100644 --- a/src/org/rascalmpl/ast/ProdModifier.java +++ b/src/org/rascalmpl/ast/ProdModifier.java @@ -98,7 +98,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 193 + 859 * associativity.hashCode() ; + return 157 + 139 * associativity.hashCode() ; } @@ -162,7 +162,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 3 ; + return 193 ; } @@ -227,7 +227,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 701 + 283 * tag.hashCode() ; + return 859 + 3 * tag.hashCode() ; } diff --git a/src/org/rascalmpl/ast/ProtocolPart.java b/src/org/rascalmpl/ast/ProtocolPart.java index 5a628203f10..cd3c2e2f57b 100644 --- a/src/org/rascalmpl/ast/ProtocolPart.java +++ b/src/org/rascalmpl/ast/ProtocolPart.java @@ -132,7 +132,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 349 + 139 * pre.hashCode() + 73 * expression.hashCode() + 439 * tail.hashCode() ; + return 701 + 283 * pre.hashCode() + 349 * expression.hashCode() + 139 * tail.hashCode() ; } @@ -224,7 +224,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 191 + 89 * protocolChars.hashCode() ; + return 73 + 439 * protocolChars.hashCode() ; } diff --git a/src/org/rascalmpl/ast/ProtocolTail.java b/src/org/rascalmpl/ast/ProtocolTail.java index 22ccd0f0f5a..998d84b41d6 100644 --- a/src/org/rascalmpl/ast/ProtocolTail.java +++ b/src/org/rascalmpl/ast/ProtocolTail.java @@ -132,7 +132,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 787 + 73 * mid.hashCode() + 673 * expression.hashCode() + 233 * tail.hashCode() ; + return 191 + 89 * mid.hashCode() + 787 * expression.hashCode() + 73 * tail.hashCode() ; } @@ -224,7 +224,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 331 + 223 * post.hashCode() ; + return 673 + 233 * post.hashCode() ; } diff --git a/src/org/rascalmpl/ast/QualifiedName.java b/src/org/rascalmpl/ast/QualifiedName.java index b98905dee25..81a3a4e4483 100644 --- a/src/org/rascalmpl/ast/QualifiedName.java +++ b/src/org/rascalmpl/ast/QualifiedName.java @@ -93,7 +93,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 499 + 919 * names.hashCode() ; + return 331 + 223 * names.hashCode() ; } diff --git a/src/org/rascalmpl/ast/Range.java b/src/org/rascalmpl/ast/Range.java index 505a83845cc..9d4c51e7096 100644 --- a/src/org/rascalmpl/ast/Range.java +++ b/src/org/rascalmpl/ast/Range.java @@ -105,7 +105,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 233 + 709 * character.hashCode() ; + return 499 + 919 * character.hashCode() ; } @@ -189,7 +189,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 503 + 233 * start.hashCode() + 419 * end.hashCode() ; + return 233 + 709 * start.hashCode() + 503 * end.hashCode() ; } diff --git a/src/org/rascalmpl/ast/Renaming.java b/src/org/rascalmpl/ast/Renaming.java index dec3326a8f1..cc8eaefc2e3 100644 --- a/src/org/rascalmpl/ast/Renaming.java +++ b/src/org/rascalmpl/ast/Renaming.java @@ -108,7 +108,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 599 + 881 * from.hashCode() + 739 * to.hashCode() ; + return 233 + 419 * from.hashCode() + 599 * to.hashCode() ; } diff --git a/src/org/rascalmpl/ast/Renamings.java b/src/org/rascalmpl/ast/Renamings.java index 3d87e56d406..39d63478ecc 100644 --- a/src/org/rascalmpl/ast/Renamings.java +++ b/src/org/rascalmpl/ast/Renamings.java @@ -93,7 +93,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 881 + 3 * renamings.hashCode() ; + return 881 + 739 * renamings.hashCode() ; } diff --git a/src/org/rascalmpl/ast/Replacement.java b/src/org/rascalmpl/ast/Replacement.java index 33d02bd867f..61219bd2cc7 100644 --- a/src/org/rascalmpl/ast/Replacement.java +++ b/src/org/rascalmpl/ast/Replacement.java @@ -110,7 +110,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 293 + 281 * replacementExpression.hashCode() + 433 * conditions.hashCode() ; + return 881 + 3 * replacementExpression.hashCode() + 293 * conditions.hashCode() ; } @@ -193,7 +193,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 283 + 727 * replacementExpression.hashCode() ; + return 281 + 433 * replacementExpression.hashCode() ; } diff --git a/src/org/rascalmpl/ast/ShellCommand.java b/src/org/rascalmpl/ast/ShellCommand.java index 7ac2b9913cb..e2b7b69f1da 100644 --- a/src/org/rascalmpl/ast/ShellCommand.java +++ b/src/org/rascalmpl/ast/ShellCommand.java @@ -88,7 +88,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 449 ; + return 283 ; } @@ -153,7 +153,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 983 + 523 * name.hashCode() ; + return 727 + 449 * name.hashCode() ; } @@ -217,7 +217,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 271 ; + return 983 ; } @@ -272,7 +272,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 907 ; + return 523 ; } @@ -327,7 +327,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 479 ; + return 271 ; } @@ -382,7 +382,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 383 ; + return 907 ; } @@ -437,7 +437,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 397 ; + return 479 ; } @@ -512,7 +512,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 929 + 997 * name.hashCode() + 857 * expression.hashCode() ; + return 383 + 397 * name.hashCode() + 929 * expression.hashCode() ; } @@ -585,7 +585,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 127 ; + return 997 ; } @@ -650,7 +650,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 607 + 631 * name.hashCode() ; + return 857 + 127 * name.hashCode() ; } @@ -724,7 +724,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 449 + 113 * name.hashCode() ; + return 607 + 631 * name.hashCode() ; } diff --git a/src/org/rascalmpl/ast/Signature.java b/src/org/rascalmpl/ast/Signature.java index 5945718aae4..67c16d9a3b0 100644 --- a/src/org/rascalmpl/ast/Signature.java +++ b/src/org/rascalmpl/ast/Signature.java @@ -149,7 +149,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 659 + 113 * modifiers.hashCode() + 163 * type.hashCode() + 491 * name.hashCode() + 887 * parameters.hashCode() ; + return 449 + 113 * modifiers.hashCode() + 659 * type.hashCode() + 113 * name.hashCode() + 163 * parameters.hashCode() ; } @@ -292,7 +292,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 547 + 293 * modifiers.hashCode() + 997 * type.hashCode() + 881 * name.hashCode() + 313 * parameters.hashCode() + 127 * exceptions.hashCode() ; + return 491 + 887 * modifiers.hashCode() + 547 * type.hashCode() + 293 * name.hashCode() + 997 * parameters.hashCode() + 881 * exceptions.hashCode() ; } diff --git a/src/org/rascalmpl/ast/Start.java b/src/org/rascalmpl/ast/Start.java index cfe5ab5b2ab..c328663f5c5 100644 --- a/src/org/rascalmpl/ast/Start.java +++ b/src/org/rascalmpl/ast/Start.java @@ -74,7 +74,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 823 ; + return 313 ; } @@ -129,7 +129,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 757 ; + return 127 ; } diff --git a/src/org/rascalmpl/ast/Statement.java b/src/org/rascalmpl/ast/Statement.java index 7ccd64e63f5..0db876ccb83 100644 --- a/src/org/rascalmpl/ast/Statement.java +++ b/src/org/rascalmpl/ast/Statement.java @@ -269,7 +269,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 89 + 619 * dataTarget.hashCode() + 401 * statement.hashCode() ; + return 823 + 757 * dataTarget.hashCode() + 89 * statement.hashCode() ; } @@ -355,7 +355,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 463 + 317 * expression.hashCode() ; + return 619 + 401 * expression.hashCode() ; } @@ -442,7 +442,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 857 + 353 * expression.hashCode() + 53 * message.hashCode() ; + return 463 + 317 * expression.hashCode() + 857 * message.hashCode() ; } @@ -548,7 +548,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 149 + 127 * assignable.hashCode() + 827 * operator.hashCode() + 431 * statement.hashCode() ; + return 353 + 53 * assignable.hashCode() + 149 * operator.hashCode() + 127 * statement.hashCode() ; } @@ -643,7 +643,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 131 + 827 * target.hashCode() ; + return 827 + 431 * target.hashCode() ; } @@ -720,7 +720,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 2 + 449 * target.hashCode() ; + return 131 + 827 * target.hashCode() ; } @@ -817,7 +817,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 89 + 233 * label.hashCode() + 617 * body.hashCode() + 151 * condition.hashCode() ; + return 2 + 449 * label.hashCode() + 89 * body.hashCode() + 233 * condition.hashCode() ; } @@ -902,7 +902,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 19 ; + return 617 ; } @@ -967,7 +967,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 787 + 457 * expression.hashCode() ; + return 151 + 19 * expression.hashCode() ; } @@ -1044,7 +1044,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 283 + 739 * target.hashCode() ; + return 787 + 457 * target.hashCode() ; } @@ -1111,7 +1111,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 547 ; + return 283 ; } @@ -1201,7 +1201,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 97 + 607 * label.hashCode() + 73 * generators.hashCode() + 677 * body.hashCode() ; + return 739 + 547 * label.hashCode() + 97 * generators.hashCode() + 607 * body.hashCode() ; } @@ -1296,7 +1296,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 89 + 599 * functionDeclaration.hashCode() ; + return 73 + 677 * functionDeclaration.hashCode() ; } @@ -1385,7 +1385,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 3 + 757 * type.hashCode() + 193 * names.hashCode() ; + return 89 + 599 * type.hashCode() + 3 * names.hashCode() ; } @@ -1493,7 +1493,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 881 + 823 * label.hashCode() + 859 * conditions.hashCode() + 181 * thenStatement.hashCode() ; + return 757 + 193 * label.hashCode() + 881 * conditions.hashCode() + 823 * thenStatement.hashCode() ; } @@ -1620,7 +1620,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 677 + 433 * label.hashCode() + 67 * conditions.hashCode() + 757 * thenStatement.hashCode() + 479 * elseStatement.hashCode() ; + return 859 + 181 * label.hashCode() + 677 * conditions.hashCode() + 433 * thenStatement.hashCode() + 67 * elseStatement.hashCode() ; } @@ -1734,7 +1734,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 691 + 193 * dataTarget.hashCode() + 113 * statement.hashCode() ; + return 757 + 479 * dataTarget.hashCode() + 691 * statement.hashCode() ; } @@ -1832,7 +1832,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 607 + 151 * label.hashCode() + 409 * statements.hashCode() ; + return 193 + 113 * label.hashCode() + 607 * statements.hashCode() ; } @@ -1915,7 +1915,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 691 + 691 * statement.hashCode() ; + return 151 + 409 * statement.hashCode() ; } @@ -2014,7 +2014,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 73 + 457 * variables.hashCode() + 719 * bound.hashCode() + 461 * body.hashCode() ; + return 691 + 691 * variables.hashCode() + 73 * bound.hashCode() + 457 * body.hashCode() ; } @@ -2131,7 +2131,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 929 + 199 * label.hashCode() + 569 * expression.hashCode() + 149 * cases.hashCode() ; + return 719 + 461 * label.hashCode() + 929 * expression.hashCode() + 199 * cases.hashCode() ; } @@ -2226,7 +2226,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 569 + 617 * statement.hashCode() ; + return 569 + 149 * statement.hashCode() ; } @@ -2315,7 +2315,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 389 + 757 * body.hashCode() + 757 * handlers.hashCode() ; + return 569 + 617 * body.hashCode() + 389 * handlers.hashCode() ; } @@ -2423,7 +2423,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 439 + 239 * body.hashCode() + 641 * handlers.hashCode() + 227 * finallyBody.hashCode() ; + return 757 + 757 * body.hashCode() + 439 * handlers.hashCode() + 239 * finallyBody.hashCode() ; } @@ -2518,7 +2518,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 269 + 389 * declaration.hashCode() ; + return 641 + 227 * declaration.hashCode() ; } @@ -2605,7 +2605,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 367 + 643 * label.hashCode() + 619 * visit.hashCode() ; + return 269 + 389 * label.hashCode() + 367 * visit.hashCode() ; } @@ -2713,7 +2713,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 631 + 151 * label.hashCode() + 593 * conditions.hashCode() + 109 * body.hashCode() ; + return 643 + 619 * label.hashCode() + 631 * conditions.hashCode() + 151 * body.hashCode() ; } diff --git a/src/org/rascalmpl/ast/Strategy.java b/src/org/rascalmpl/ast/Strategy.java index 5249a3fc7e6..cd0e5d292bc 100644 --- a/src/org/rascalmpl/ast/Strategy.java +++ b/src/org/rascalmpl/ast/Strategy.java @@ -74,7 +74,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 53 ; + return 593 ; } @@ -129,7 +129,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 839 ; + return 109 ; } @@ -184,7 +184,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 389 ; + return 53 ; } @@ -239,7 +239,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 229 ; + return 839 ; } @@ -294,7 +294,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 157 ; + return 389 ; } @@ -349,7 +349,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 283 ; + return 229 ; } diff --git a/src/org/rascalmpl/ast/StringLiteral.java b/src/org/rascalmpl/ast/StringLiteral.java index 0563ce82386..fad93712024 100644 --- a/src/org/rascalmpl/ast/StringLiteral.java +++ b/src/org/rascalmpl/ast/StringLiteral.java @@ -139,7 +139,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 947 + 541 * pre.hashCode() + 103 * expression.hashCode() + 619 * tail.hashCode() ; + return 157 + 283 * pre.hashCode() + 947 * expression.hashCode() + 541 * tail.hashCode() ; } @@ -231,7 +231,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 421 + 541 * constant.hashCode() ; + return 103 + 619 * constant.hashCode() ; } @@ -325,7 +325,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 509 + 941 * pre.hashCode() + 653 * template.hashCode() + 13 * tail.hashCode() ; + return 421 + 541 * pre.hashCode() + 509 * template.hashCode() + 941 * tail.hashCode() ; } diff --git a/src/org/rascalmpl/ast/StringMiddle.java b/src/org/rascalmpl/ast/StringMiddle.java index fe53df8c6ae..1eb963084cd 100644 --- a/src/org/rascalmpl/ast/StringMiddle.java +++ b/src/org/rascalmpl/ast/StringMiddle.java @@ -132,7 +132,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 787 + 37 * mid.hashCode() + 131 * expression.hashCode() + 331 * tail.hashCode() ; + return 653 + 13 * mid.hashCode() + 787 * expression.hashCode() + 37 * tail.hashCode() ; } @@ -224,7 +224,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 521 + 839 * mid.hashCode() ; + return 131 + 331 * mid.hashCode() ; } @@ -318,7 +318,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 191 + 599 * mid.hashCode() + 109 * template.hashCode() + 977 * tail.hashCode() ; + return 521 + 839 * mid.hashCode() + 191 * template.hashCode() + 599 * tail.hashCode() ; } diff --git a/src/org/rascalmpl/ast/StringTail.java b/src/org/rascalmpl/ast/StringTail.java index 41a7288b62d..5020467cbf9 100644 --- a/src/org/rascalmpl/ast/StringTail.java +++ b/src/org/rascalmpl/ast/StringTail.java @@ -139,7 +139,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 2 + 947 * mid.hashCode() + 281 * expression.hashCode() + 409 * tail.hashCode() ; + return 109 + 977 * mid.hashCode() + 2 * expression.hashCode() + 947 * tail.hashCode() ; } @@ -251,7 +251,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 97 + 607 * mid.hashCode() + 547 * template.hashCode() + 283 * tail.hashCode() ; + return 281 + 409 * mid.hashCode() + 97 * template.hashCode() + 607 * tail.hashCode() ; } @@ -343,7 +343,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 757 + 347 * post.hashCode() ; + return 547 + 283 * post.hashCode() ; } diff --git a/src/org/rascalmpl/ast/StringTemplate.java b/src/org/rascalmpl/ast/StringTemplate.java index 48e3018dad7..5dc7be9140a 100644 --- a/src/org/rascalmpl/ast/StringTemplate.java +++ b/src/org/rascalmpl/ast/StringTemplate.java @@ -202,7 +202,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 73 + 181 * preStats.hashCode() + 499 * body.hashCode() + 227 * postStats.hashCode() + 389 * condition.hashCode() ; + return 757 + 347 * preStats.hashCode() + 73 * body.hashCode() + 181 * postStats.hashCode() + 499 * condition.hashCode() ; } @@ -339,7 +339,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 479 + 103 * generators.hashCode() + 859 * preStats.hashCode() + 163 * body.hashCode() + 739 * postStats.hashCode() ; + return 227 + 389 * generators.hashCode() + 479 * preStats.hashCode() + 103 * body.hashCode() + 859 * postStats.hashCode() ; } @@ -476,7 +476,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 821 + 977 * conditions.hashCode() + 677 * preStats.hashCode() + 11 * body.hashCode() + 691 * postStats.hashCode() ; + return 163 + 739 * conditions.hashCode() + 821 * preStats.hashCode() + 977 * body.hashCode() + 677 * postStats.hashCode() ; } @@ -647,7 +647,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 71 + 181 * conditions.hashCode() + 199 * preStatsThen.hashCode() + 787 * thenString.hashCode() + 193 * postStatsThen.hashCode() + 199 * preStatsElse.hashCode() + 389 * elseString.hashCode() + 281 * postStatsElse.hashCode() ; + return 11 + 691 * conditions.hashCode() + 71 * preStatsThen.hashCode() + 181 * thenString.hashCode() + 199 * postStatsThen.hashCode() + 787 * preStatsElse.hashCode() + 193 * elseString.hashCode() + 199 * postStatsElse.hashCode() ; } @@ -809,7 +809,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 389 + 683 * condition.hashCode() + 577 * preStats.hashCode() + 653 * body.hashCode() + 73 * postStats.hashCode() ; + return 389 + 281 * condition.hashCode() + 389 * preStats.hashCode() + 683 * body.hashCode() + 577 * postStats.hashCode() ; } diff --git a/src/org/rascalmpl/ast/StructuredType.java b/src/org/rascalmpl/ast/StructuredType.java index 521002c3eac..16cf2840974 100644 --- a/src/org/rascalmpl/ast/StructuredType.java +++ b/src/org/rascalmpl/ast/StructuredType.java @@ -110,7 +110,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 991 + 911 * basicType.hashCode() + 379 * arguments.hashCode() ; + return 653 + 73 * basicType.hashCode() + 991 * arguments.hashCode() ; } diff --git a/src/org/rascalmpl/ast/Sym.java b/src/org/rascalmpl/ast/Sym.java index 706f9e0fbf7..ae33e8d9f24 100644 --- a/src/org/rascalmpl/ast/Sym.java +++ b/src/org/rascalmpl/ast/Sym.java @@ -187,7 +187,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 811 + 373 * first.hashCode() + 83 * alternatives.hashCode() ; + return 911 + 379 * first.hashCode() + 811 * alternatives.hashCode() ; } @@ -270,7 +270,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 71 + 683 * cistring.hashCode() ; + return 373 + 83 * cistring.hashCode() ; } @@ -344,7 +344,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 839 + 577 * charClass.hashCode() ; + return 71 + 683 * charClass.hashCode() ; } @@ -428,7 +428,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 41 + 809 * symbol.hashCode() + 821 * column.hashCode() ; + return 839 + 577 * symbol.hashCode() + 41 * column.hashCode() ; } @@ -501,7 +501,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 821 ; + return 809 ; } @@ -566,7 +566,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 59 + 139 * symbol.hashCode() ; + return 821 + 821 * symbol.hashCode() ; } @@ -650,7 +650,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 233 + 331 * symbol.hashCode() + 359 * label.hashCode() ; + return 59 + 139 * symbol.hashCode() + 233 * label.hashCode() ; } @@ -743,7 +743,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 151 + 311 * symbol.hashCode() + 73 * match.hashCode() ; + return 331 + 359 * symbol.hashCode() + 151 * match.hashCode() ; } @@ -826,7 +826,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 619 + 5 * symbol.hashCode() ; + return 311 + 73 * symbol.hashCode() ; } @@ -910,7 +910,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 191 + 467 * symbol.hashCode() + 149 * sep.hashCode() ; + return 619 + 5 * symbol.hashCode() + 191 * sep.hashCode() ; } @@ -993,7 +993,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 19 + 761 * symbol.hashCode() ; + return 467 + 149 * symbol.hashCode() ; } @@ -1077,7 +1077,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 89 + 587 * symbol.hashCode() + 67 * sep.hashCode() ; + return 19 + 761 * symbol.hashCode() + 89 * sep.hashCode() ; } @@ -1170,7 +1170,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 191 + 577 * symbol.hashCode() + 263 * label.hashCode() ; + return 587 + 67 * symbol.hashCode() + 191 * label.hashCode() ; } @@ -1253,7 +1253,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 647 + 991 * string.hashCode() ; + return 577 + 263 * string.hashCode() ; } @@ -1327,7 +1327,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 409 + 907 * nonterminal.hashCode() ; + return 647 + 991 * nonterminal.hashCode() ; } @@ -1411,7 +1411,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 89 + 347 * symbol.hashCode() + 509 * match.hashCode() ; + return 409 + 907 * symbol.hashCode() + 89 * match.hashCode() ; } @@ -1504,7 +1504,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 151 + 599 * match.hashCode() + 29 * symbol.hashCode() ; + return 347 + 509 * match.hashCode() + 151 * symbol.hashCode() ; } @@ -1587,7 +1587,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 941 + 103 * symbol.hashCode() ; + return 599 + 29 * symbol.hashCode() ; } @@ -1661,7 +1661,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 67 + 769 * nonterminal.hashCode() ; + return 941 + 103 * nonterminal.hashCode() ; } @@ -1747,7 +1747,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 149 + 541 * nonterminal.hashCode() + 353 * parameters.hashCode() ; + return 67 + 769 * nonterminal.hashCode() + 149 * parameters.hashCode() ; } @@ -1840,7 +1840,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 23 + 787 * match.hashCode() + 863 * symbol.hashCode() ; + return 541 + 353 * match.hashCode() + 23 * symbol.hashCode() ; } @@ -1935,7 +1935,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 557 + 61 * first.hashCode() + 281 * sequence.hashCode() ; + return 787 + 863 * first.hashCode() + 557 * sequence.hashCode() ; } @@ -2018,7 +2018,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 263 + 19 * nonterminal.hashCode() ; + return 61 + 281 * nonterminal.hashCode() ; } @@ -2092,7 +2092,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 61 + 241 * symbol.hashCode() ; + return 263 + 19 * symbol.hashCode() ; } @@ -2176,7 +2176,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 409 + 443 * symbol.hashCode() + 11 * match.hashCode() ; + return 61 + 241 * symbol.hashCode() + 409 * match.hashCode() ; } diff --git a/src/org/rascalmpl/ast/SyntaxDefinition.java b/src/org/rascalmpl/ast/SyntaxDefinition.java index 56a534b5bc6..55f99a56e2b 100644 --- a/src/org/rascalmpl/ast/SyntaxDefinition.java +++ b/src/org/rascalmpl/ast/SyntaxDefinition.java @@ -122,7 +122,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 389 + 229 * defined.hashCode() + 193 * production.hashCode() ; + return 443 + 11 * defined.hashCode() + 389 * production.hashCode() ; } @@ -225,7 +225,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 617 + 521 * start.hashCode() + 269 * defined.hashCode() + 839 * production.hashCode() ; + return 229 + 193 * start.hashCode() + 617 * defined.hashCode() + 521 * production.hashCode() ; } @@ -337,7 +337,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 743 + 751 * vis.hashCode() + 241 * defined.hashCode() + 911 * production.hashCode() ; + return 269 + 839 * vis.hashCode() + 743 * defined.hashCode() + 751 * production.hashCode() ; } @@ -439,7 +439,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 827 + 29 * defined.hashCode() + 947 * production.hashCode() ; + return 241 + 911 * defined.hashCode() + 827 * production.hashCode() ; } diff --git a/src/org/rascalmpl/ast/Tag.java b/src/org/rascalmpl/ast/Tag.java index 7e03763917c..e2615d2a30f 100644 --- a/src/org/rascalmpl/ast/Tag.java +++ b/src/org/rascalmpl/ast/Tag.java @@ -115,7 +115,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 883 + 743 * name.hashCode() + 313 * contents.hashCode() ; + return 29 + 947 * name.hashCode() + 883 * contents.hashCode() ; } @@ -198,7 +198,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 607 + 727 * name.hashCode() ; + return 743 + 313 * name.hashCode() ; } @@ -282,7 +282,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 883 + 617 * name.hashCode() + 233 * expression.hashCode() ; + return 607 + 727 * name.hashCode() + 883 * expression.hashCode() ; } diff --git a/src/org/rascalmpl/ast/Tags.java b/src/org/rascalmpl/ast/Tags.java index e239513bad2..f4cf57584a6 100644 --- a/src/org/rascalmpl/ast/Tags.java +++ b/src/org/rascalmpl/ast/Tags.java @@ -93,7 +93,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 263 + 163 * tags.hashCode() ; + return 617 + 233 * tags.hashCode() ; } diff --git a/src/org/rascalmpl/ast/Target.java b/src/org/rascalmpl/ast/Target.java index f0149eddb21..dadd78fdb14 100644 --- a/src/org/rascalmpl/ast/Target.java +++ b/src/org/rascalmpl/ast/Target.java @@ -81,7 +81,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 683 ; + return 263 ; } @@ -146,7 +146,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 661 + 499 * name.hashCode() ; + return 163 + 683 * name.hashCode() ; } diff --git a/src/org/rascalmpl/ast/Toplevel.java b/src/org/rascalmpl/ast/Toplevel.java index 739b782b1fc..199e99f8689 100644 --- a/src/org/rascalmpl/ast/Toplevel.java +++ b/src/org/rascalmpl/ast/Toplevel.java @@ -91,7 +91,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 769 + 163 * declaration.hashCode() ; + return 661 + 499 * declaration.hashCode() ; } diff --git a/src/org/rascalmpl/ast/Type.java b/src/org/rascalmpl/ast/Type.java index 2763bb1a49a..abdf2c89d3d 100644 --- a/src/org/rascalmpl/ast/Type.java +++ b/src/org/rascalmpl/ast/Type.java @@ -140,7 +140,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 641 + 313 * basic.hashCode() ; + return 769 + 163 * basic.hashCode() ; } @@ -214,7 +214,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 509 + 563 * type.hashCode() ; + return 641 + 313 * type.hashCode() ; } @@ -288,7 +288,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 149 + 431 * function.hashCode() ; + return 509 + 563 * function.hashCode() ; } @@ -362,7 +362,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 67 + 19 * selector.hashCode() ; + return 149 + 431 * selector.hashCode() ; } @@ -436,7 +436,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 181 + 599 * structured.hashCode() ; + return 67 + 19 * structured.hashCode() ; } @@ -510,7 +510,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 101 + 421 * symbol.hashCode() ; + return 181 + 599 * symbol.hashCode() ; } @@ -584,7 +584,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 277 + 487 * user.hashCode() ; + return 101 + 421 * user.hashCode() ; } @@ -658,7 +658,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 797 + 787 * typeVar.hashCode() ; + return 277 + 487 * typeVar.hashCode() ; } diff --git a/src/org/rascalmpl/ast/TypeArg.java b/src/org/rascalmpl/ast/TypeArg.java index 82dd668f9d7..d340caba1a6 100644 --- a/src/org/rascalmpl/ast/TypeArg.java +++ b/src/org/rascalmpl/ast/TypeArg.java @@ -98,7 +98,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 397 + 191 * type.hashCode() ; + return 797 + 787 * type.hashCode() ; } @@ -182,7 +182,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 977 + 173 * type.hashCode() + 541 * name.hashCode() ; + return 397 + 191 * type.hashCode() + 977 * name.hashCode() ; } diff --git a/src/org/rascalmpl/ast/TypeVar.java b/src/org/rascalmpl/ast/TypeVar.java index 1553e1baf48..34164dfd19d 100644 --- a/src/org/rascalmpl/ast/TypeVar.java +++ b/src/org/rascalmpl/ast/TypeVar.java @@ -108,7 +108,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 491 + 331 * name.hashCode() + 167 * bound.hashCode() ; + return 173 + 541 * name.hashCode() + 491 * bound.hashCode() ; } @@ -191,7 +191,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 809 + 109 * name.hashCode() ; + return 331 + 167 * name.hashCode() ; } diff --git a/src/org/rascalmpl/ast/UserType.java b/src/org/rascalmpl/ast/UserType.java index dadb13a5c1a..69a206d97e2 100644 --- a/src/org/rascalmpl/ast/UserType.java +++ b/src/org/rascalmpl/ast/UserType.java @@ -98,7 +98,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 373 + 449 * name.hashCode() ; + return 809 + 109 * name.hashCode() ; } @@ -184,7 +184,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 571 + 467 * name.hashCode() + 691 * parameters.hashCode() ; + return 373 + 449 * name.hashCode() + 571 * parameters.hashCode() ; } diff --git a/src/org/rascalmpl/ast/Variable.java b/src/org/rascalmpl/ast/Variable.java index d1721f58da1..6e768417d22 100644 --- a/src/org/rascalmpl/ast/Variable.java +++ b/src/org/rascalmpl/ast/Variable.java @@ -108,7 +108,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 701 + 19 * name.hashCode() + 137 * initial.hashCode() ; + return 467 + 691 * name.hashCode() + 701 * initial.hashCode() ; } @@ -191,7 +191,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 907 + 41 * name.hashCode() ; + return 19 + 137 * name.hashCode() ; } diff --git a/src/org/rascalmpl/ast/Variant.java b/src/org/rascalmpl/ast/Variant.java index e224303aed1..119a76ac9cc 100644 --- a/src/org/rascalmpl/ast/Variant.java +++ b/src/org/rascalmpl/ast/Variant.java @@ -127,7 +127,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 59 + 823 * name.hashCode() + 139 * arguments.hashCode() + 293 * keywordArguments.hashCode() ; + return 907 + 41 * name.hashCode() + 59 * arguments.hashCode() + 823 * keywordArguments.hashCode() ; } diff --git a/src/org/rascalmpl/ast/Visibility.java b/src/org/rascalmpl/ast/Visibility.java index 5e439c09aa3..5272568e81a 100644 --- a/src/org/rascalmpl/ast/Visibility.java +++ b/src/org/rascalmpl/ast/Visibility.java @@ -74,7 +74,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 773 ; + return 139 ; } @@ -184,7 +184,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 421 ; + return 773 ; } diff --git a/src/org/rascalmpl/ast/Visit.java b/src/org/rascalmpl/ast/Visit.java index f91c1c3eda0..f2cedfe32ab 100644 --- a/src/org/rascalmpl/ast/Visit.java +++ b/src/org/rascalmpl/ast/Visit.java @@ -117,7 +117,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 467 + 181 * subject.hashCode() + 383 * cases.hashCode() ; + return 293 + 421 * subject.hashCode() + 467 * cases.hashCode() ; } @@ -222,7 +222,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 263 + 463 * strategy.hashCode() + 223 * subject.hashCode() + 139 * cases.hashCode() ; + return 181 + 383 * strategy.hashCode() + 263 * subject.hashCode() + 463 * cases.hashCode() ; } diff --git a/src/org/rascalmpl/library/lang/rascal/syntax/Rascal.rsc b/src/org/rascalmpl/library/lang/rascal/syntax/Rascal.rsc index ebcd1392cfb..3204ff5eefb 100644 --- a/src/org/rascalmpl/library/lang/rascal/syntax/Rascal.rsc +++ b/src/org/rascalmpl/library/lang/rascal/syntax/Rascal.rsc @@ -866,7 +866,7 @@ syntax Pattern | splicePlus : "+" Pattern argument | negative : "-" Pattern argument | literal : Literal literal - | \tuple : "\<" {Pattern ","}+ elements "\>" + | \tuple : "\<" {Pattern ","}* elements0 "\>" | typedVariable : Type type Name name | \map : "(" {Mapping[Pattern] ","}* mappings ")" | reifiedType : "type" "(" Pattern symbol "," Pattern definitions ")" diff --git a/src/org/rascalmpl/library/lang/rascal/syntax/RascalParser.java b/src/org/rascalmpl/library/lang/rascal/syntax/RascalParser.java index 2c68f56b04f..dea96c4e5d6 100644 --- a/src/org/rascalmpl/library/lang/rascal/syntax/RascalParser.java +++ b/src/org/rascalmpl/library/lang/rascal/syntax/RascalParser.java @@ -73,6 +73,16 @@ protected static IntegerKeyedHashMap _initDontNest() { + _putDontNest(result, 1445, 1464); + + _putDontNest(result, 1445, 1474); + + _putDontNest(result, 1445, 1445); + + _putDontNest(result, 1445, 1489); + + _putDontNest(result, 1445, 1454); + _putDontNest(result, 887, 1279); _putDontNest(result, 887, 1388); @@ -245,18 +255,10 @@ protected static IntegerKeyedHashMap _initDontNest() { _putDontNest(result, 1279, 1339); - _putDontNest(result, 14290, 14463); - - _putDontNest(result, 14290, 14481); - - _putDontNest(result, 14290, 14500); - - _putDontNest(result, 14290, 14490); - - _putDontNest(result, 14290, 14472); - _putDontNest(result, 1573, 1573); + _putDontNest(result, 14395, 14437); + _putDontNest(result, 1024, 1279); _putDontNest(result, 1024, 1388); @@ -321,7 +323,7 @@ protected static IntegerKeyedHashMap _initDontNest() { _putDontNest(result, 1024, 1339); - _putDontNest(result, 14138, 1407); + _putDontNest(result, 14075, 1407); _putDontNest(result, 1479, 1489); @@ -387,15 +389,11 @@ protected static IntegerKeyedHashMap _initDontNest() { _putDontNest(result, 1220, 1339); - _putDontNest(result, 1449, 1464); + _putDontNest(result, 10959, 10487); - _putDontNest(result, 1449, 1474); + _putDontNest(result, 10959, 10481); - _putDontNest(result, 1449, 1445); - - _putDontNest(result, 1449, 1489); - - _putDontNest(result, 1449, 1454); + _putDontNest(result, 10959, 10650); _putDontNest(result, 1344, 1388); @@ -427,7 +425,23 @@ protected static IntegerKeyedHashMap _initDontNest() { _putDontNest(result, 1344, 1351); - _putDontNest(result, 8467, 841); + _putDontNest(result, 1449, 1464); + + _putDontNest(result, 1449, 1474); + + _putDontNest(result, 1449, 1445); + + _putDontNest(result, 1449, 1489); + + _putDontNest(result, 1449, 1454); + + _putDontNest(result, 10790, 10481); + + _putDontNest(result, 10790, 10650); + + _putDontNest(result, 10751, 10481); + + _putDontNest(result, 10751, 10650); _putDontNest(result, 1262, 1279); @@ -567,6 +581,26 @@ protected static IntegerKeyedHashMap _initDontNest() { _putDontNest(result, 1097, 1257); + _putDontNest(result, 14294, 14400); + + _putDontNest(result, 14294, 14418); + + _putDontNest(result, 14294, 14409); + + _putDontNest(result, 14294, 14427); + + _putDontNest(result, 14294, 14437); + + _putDontNest(result, 14244, 14400); + + _putDontNest(result, 14244, 14418); + + _putDontNest(result, 14244, 14409); + + _putDontNest(result, 14244, 14427); + + _putDontNest(result, 14244, 14437); + _putDontNest(result, 931, 1279); _putDontNest(result, 931, 1388); @@ -909,6 +943,8 @@ protected static IntegerKeyedHashMap _initDontNest() { _putDontNest(result, 1087, 1339); + _putDontNest(result, 7085, 7102); + _putDontNest(result, 1407, 1474); _putDontNest(result, 1407, 1445); @@ -921,16 +957,6 @@ protected static IntegerKeyedHashMap _initDontNest() { _putDontNest(result, 1407, 1464); - _putDontNest(result, 14307, 14463); - - _putDontNest(result, 14307, 14481); - - _putDontNest(result, 14307, 14500); - - _putDontNest(result, 14307, 14490); - - _putDontNest(result, 14307, 14472); - _putDontNest(result, 1185, 1279); _putDontNest(result, 1185, 1388); @@ -1021,16 +1047,6 @@ protected static IntegerKeyedHashMap _initDontNest() { _putDontNest(result, 1283, 1339); - _putDontNest(result, 14463, 14463); - - _putDontNest(result, 14463, 14481); - - _putDontNest(result, 14463, 14500); - - _putDontNest(result, 14463, 14490); - - _putDontNest(result, 14463, 14472); - _putDontNest(result, 1464, 1464); _putDontNest(result, 1464, 1474); @@ -1223,10 +1239,6 @@ protected static IntegerKeyedHashMap _initDontNest() { _putDontNest(result, 1293, 1339); - _putDontNest(result, 10814, 10713); - - _putDontNest(result, 10814, 10544); - _putDontNest(result, 1198, 1279); _putDontNest(result, 1198, 1388); @@ -1281,13 +1293,19 @@ protected static IntegerKeyedHashMap _initDontNest() { _putDontNest(result, 1198, 1339); - _putDontNest(result, 1469, 1489); + _putDontNest(result, 10474, 10481); - _putDontNest(result, 1154, 2537); + _putDontNest(result, 10474, 10650); - _putDontNest(result, 10571, 10713); + _putDontNest(result, 10508, 10481); + + _putDontNest(result, 10508, 10650); + + _putDontNest(result, 1469, 1489); - _putDontNest(result, 10571, 10544); + _putDontNest(result, 7102, 7102); + + _putDontNest(result, 1154, 2537); _putDontNest(result, 1355, 1388); @@ -1329,40 +1347,6 @@ protected static IntegerKeyedHashMap _initDontNest() { _putDontNest(result, 1426, 1454); - _putDontNest(result, 10594, 10713); - - _putDontNest(result, 10594, 10544); - - _putDontNest(result, 14357, 14463); - - _putDontNest(result, 14357, 14481); - - _putDontNest(result, 14357, 14500); - - _putDontNest(result, 14357, 14490); - - _putDontNest(result, 14357, 14472); - - _putDontNest(result, 14402, 14463); - - _putDontNest(result, 14402, 14481); - - _putDontNest(result, 14402, 14500); - - _putDontNest(result, 14402, 14490); - - _putDontNest(result, 14402, 14472); - - _putDontNest(result, 14345, 14463); - - _putDontNest(result, 14345, 14481); - - _putDontNest(result, 14345, 14500); - - _putDontNest(result, 14345, 14490); - - _putDontNest(result, 14345, 14472); - _putDontNest(result, 1210, 1279); _putDontNest(result, 1210, 1388); @@ -1417,9 +1401,9 @@ protected static IntegerKeyedHashMap _initDontNest() { _putDontNest(result, 1210, 1339); - _putDontNest(result, 10537, 10713); + _putDontNest(result, 10595, 10481); - _putDontNest(result, 10537, 10544); + _putDontNest(result, 10595, 10650); _putDontNest(result, 1369, 1388); @@ -1467,13 +1451,13 @@ protected static IntegerKeyedHashMap _initDontNest() { _putDontNest(result, 1392, 1464); - _putDontNest(result, 2533, 14338); + _putDontNest(result, 2533, 14390); - _putDontNest(result, 2533, 14446); + _putDontNest(result, 2533, 14291); - _putDontNest(result, 2533, 14354); + _putDontNest(result, 2533, 14275); - _putDontNest(result, 2533, 14453); + _putDontNest(result, 2533, 14383); _putDontNest(result, 1269, 1279); @@ -1557,8 +1541,6 @@ protected static IntegerKeyedHashMap _initDontNest() { _putDontNest(result, 1289, 1339); - _putDontNest(result, 14458, 14500); - _putDontNest(result, 1238, 1279); _putDontNest(result, 1238, 1388); @@ -1605,6 +1587,10 @@ protected static IntegerKeyedHashMap _initDontNest() { _putDontNest(result, 1238, 1339); + _putDontNest(result, 7090, 7102); + + _putDontNest(result, 7090, 7090); + _putDontNest(result, 1440, 1464); _putDontNest(result, 1440, 1474); @@ -1653,6 +1639,8 @@ protected static IntegerKeyedHashMap _initDontNest() { _putDontNest(result, 1300, 1339); + _putDontNest(result, 8404, 841); + _putDontNest(result, 1557, 1573); _putDontNest(result, 1053, 1279); @@ -1811,6 +1799,12 @@ protected static IntegerKeyedHashMap _initDontNest() { _putDontNest(result, 982, 1257); + _putDontNest(result, 8409, 10487); + + _putDontNest(result, 8409, 10481); + + _putDontNest(result, 8409, 10650); + _putDontNest(result, 1325, 1388); _putDontNest(result, 1325, 1378); @@ -1845,6 +1839,26 @@ protected static IntegerKeyedHashMap _initDontNest() { _putDontNest(result, 1325, 1339); + _putDontNest(result, 14387, 14400); + + _putDontNest(result, 14387, 14418); + + _putDontNest(result, 14387, 14409); + + _putDontNest(result, 14387, 14427); + + _putDontNest(result, 14387, 14437); + + _putDontNest(result, 14282, 14400); + + _putDontNest(result, 14282, 14418); + + _putDontNest(result, 14282, 14409); + + _putDontNest(result, 14282, 14427); + + _putDontNest(result, 14282, 14437); + _putDontNest(result, 1215, 1279); _putDontNest(result, 1215, 1388); @@ -1911,35 +1925,23 @@ protected static IntegerKeyedHashMap _initDontNest() { _putDontNest(result, 1397, 1464); - _putDontNest(result, 10853, 10713); + _putDontNest(result, 10531, 10481); - _putDontNest(result, 10853, 10544); + _putDontNest(result, 10531, 10650); - _putDontNest(result, 1445, 1464); + _putDontNest(result, 14339, 14400); - _putDontNest(result, 1445, 1474); + _putDontNest(result, 14339, 14418); - _putDontNest(result, 1445, 1445); + _putDontNest(result, 14339, 14409); - _putDontNest(result, 1445, 1489); + _putDontNest(result, 14339, 14427); - _putDontNest(result, 1445, 1454); - - _putDontNest(result, 14481, 14463); - - _putDontNest(result, 14481, 14481); - - _putDontNest(result, 14481, 14500); - - _putDontNest(result, 14481, 14490); - - _putDontNest(result, 14481, 14472); + _putDontNest(result, 14339, 14437); - _putDontNest(result, 7113, 7113); + _putDontNest(result, 14422, 14437); - _putDontNest(result, 7113, 7125); - - _putDontNest(result, 7125, 7125); + _putDontNest(result, 14437, 14437); _putDontNest(result, 1234, 1279); @@ -1989,26 +1991,6 @@ protected static IntegerKeyedHashMap _initDontNest() { _putDontNest(result, 1234, 1339); - _putDontNest(result, 14450, 14463); - - _putDontNest(result, 14450, 14481); - - _putDontNest(result, 14450, 14500); - - _putDontNest(result, 14450, 14490); - - _putDontNest(result, 14450, 14472); - - _putDontNest(result, 4494, 4645); - - _putDontNest(result, 4494, 4639); - - _putDontNest(result, 4494, 4607); - - _putDontNest(result, 4494, 4618); - - _putDontNest(result, 4494, 4627); - _putDontNest(result, 1435, 1464); _putDontNest(result, 1435, 1474); @@ -2083,6 +2065,16 @@ protected static IntegerKeyedHashMap _initDontNest() { _putDontNest(result, 907, 1339); + _putDontNest(result, 14427, 14400); + + _putDontNest(result, 14427, 14418); + + _putDontNest(result, 14427, 14409); + + _putDontNest(result, 14427, 14427); + + _putDontNest(result, 14427, 14437); + _putDontNest(result, 1562, 1573); _putDontNest(result, 1562, 1562); @@ -2105,16 +2097,6 @@ protected static IntegerKeyedHashMap _initDontNest() { _putDontNest(result, 1402, 1464); - _putDontNest(result, 14366, 14463); - - _putDontNest(result, 14366, 14481); - - _putDontNest(result, 14366, 14500); - - _putDontNest(result, 14366, 14490); - - _putDontNest(result, 14366, 14472); - _putDontNest(result, 815, 1279); _putDontNest(result, 815, 1388); @@ -2233,17 +2215,19 @@ protected static IntegerKeyedHashMap _initDontNest() { _putDontNest(result, 1351, 1351); - _putDontNest(result, 10604, 10713); + _putDontNest(result, 14303, 14400); + + _putDontNest(result, 14303, 14418); - _putDontNest(result, 10604, 10544); + _putDontNest(result, 14303, 14409); - _putDontNest(result, 7108, 7125); + _putDontNest(result, 14303, 14427); - _putDontNest(result, 8472, 10550); + _putDontNest(result, 14303, 14437); - _putDontNest(result, 8472, 10713); + _putDontNest(result, 10541, 10481); - _putDontNest(result, 8472, 10544); + _putDontNest(result, 10541, 10650); _putDontNest(result, 1339, 1388); @@ -2273,6 +2257,10 @@ protected static IntegerKeyedHashMap _initDontNest() { _putDontNest(result, 1339, 1339); + _putDontNest(result, 1547, 1573); + + _putDontNest(result, 1547, 1562); + _putDontNest(result, 1205, 1279); _putDontNest(result, 1205, 1388); @@ -2323,17 +2311,15 @@ protected static IntegerKeyedHashMap _initDontNest() { _putDontNest(result, 1205, 1339); - _putDontNest(result, 1547, 1573); - - _putDontNest(result, 1547, 1562); + _putDontNest(result, 14400, 14400); - _putDontNest(result, 10658, 10713); + _putDontNest(result, 14400, 14418); - _putDontNest(result, 10658, 10544); + _putDontNest(result, 14400, 14409); - _putDontNest(result, 10611, 10713); + _putDontNest(result, 14400, 14427); - _putDontNest(result, 10611, 10544); + _putDontNest(result, 14400, 14437); _putDontNest(result, 1364, 1388); @@ -2365,14 +2351,6 @@ protected static IntegerKeyedHashMap _initDontNest() { _putDontNest(result, 1364, 1351); - _putDontNest(result, 1542, 1573); - - _putDontNest(result, 1542, 1552); - - _putDontNest(result, 1542, 1562); - - _putDontNest(result, 14500, 14500); - _putDontNest(result, 1310, 1279); _putDontNest(result, 1310, 1388); @@ -2411,9 +2389,65 @@ protected static IntegerKeyedHashMap _initDontNest() { _putDontNest(result, 1310, 1339); - _putDontNest(result, 10686, 841); + _putDontNest(result, 1542, 1573); + + _putDontNest(result, 1542, 1552); + + _putDontNest(result, 1542, 1562); + + _putDontNest(result, 14418, 14400); + + _putDontNest(result, 14418, 14418); + + _putDontNest(result, 14418, 14409); + + _putDontNest(result, 14418, 14427); + + _putDontNest(result, 14418, 14437); + + _putDontNest(result, 1334, 1388); + + _putDontNest(result, 1334, 1378); + + _putDontNest(result, 1334, 1417); + + _putDontNest(result, 1334, 1330); + + _putDontNest(result, 1334, 1474); + + _putDontNest(result, 1334, 1426); + + _putDontNest(result, 1334, 1369); + + _putDontNest(result, 1334, 1397); + + _putDontNest(result, 1334, 1445); + + _putDontNest(result, 1334, 1435); + + _putDontNest(result, 1334, 1454); + + _putDontNest(result, 1334, 1407); + + _putDontNest(result, 1334, 1464); + + _putDontNest(result, 1334, 1360); + + _putDontNest(result, 1334, 1351); + + _putDontNest(result, 1334, 1489); + + _putDontNest(result, 1334, 1339); + + _putDontNest(result, 14236, 14400); + + _putDontNest(result, 14236, 14418); + + _putDontNest(result, 14236, 14409); - _putDontNest(result, 10686, 999); + _putDontNest(result, 14236, 14427); + + _putDontNest(result, 14236, 14437); _putDontNest(result, 1015, 1279); @@ -2543,42 +2577,6 @@ protected static IntegerKeyedHashMap _initDontNest() { _putDontNest(result, 1062, 1339); - _putDontNest(result, 14476, 14500); - - _putDontNest(result, 1334, 1388); - - _putDontNest(result, 1334, 1378); - - _putDontNest(result, 1334, 1417); - - _putDontNest(result, 1334, 1330); - - _putDontNest(result, 1334, 1474); - - _putDontNest(result, 1334, 1426); - - _putDontNest(result, 1334, 1369); - - _putDontNest(result, 1334, 1397); - - _putDontNest(result, 1334, 1445); - - _putDontNest(result, 1334, 1435); - - _putDontNest(result, 1334, 1454); - - _putDontNest(result, 1334, 1407); - - _putDontNest(result, 1334, 1464); - - _putDontNest(result, 1334, 1360); - - _putDontNest(result, 1334, 1351); - - _putDontNest(result, 1334, 1489); - - _putDontNest(result, 1334, 1339); - _putDontNest(result, 1229, 1279); _putDontNest(result, 1229, 1388); @@ -2625,9 +2623,19 @@ protected static IntegerKeyedHashMap _initDontNest() { _putDontNest(result, 1229, 1339); - _putDontNest(result, 10745, 10713); + _putDontNest(result, 4484, 4635); + + _putDontNest(result, 4484, 4608); - _putDontNest(result, 10745, 10544); + _putDontNest(result, 4484, 4629); + + _putDontNest(result, 4484, 4617); + + _putDontNest(result, 4484, 4597); + + _putDontNest(result, 10548, 10481); + + _putDontNest(result, 10548, 10650); _putDontNest(result, 1257, 1279); @@ -2677,38 +2685,6 @@ protected static IntegerKeyedHashMap _initDontNest() { _putDontNest(result, 1257, 1339); - _putDontNest(result, 14299, 14463); - - _putDontNest(result, 14299, 14481); - - _putDontNest(result, 14299, 14500); - - _putDontNest(result, 14299, 14490); - - _putDontNest(result, 14299, 14472); - - _putDontNest(result, 14485, 14500); - - _putDontNest(result, 14490, 14463); - - _putDontNest(result, 14490, 14481); - - _putDontNest(result, 14490, 14500); - - _putDontNest(result, 14490, 14490); - - _putDontNest(result, 14490, 14472); - - _putDontNest(result, 14472, 14463); - - _putDontNest(result, 14472, 14481); - - _putDontNest(result, 14472, 14500); - - _putDontNest(result, 14472, 14490); - - _putDontNest(result, 14472, 14472); - _putDontNest(result, 1454, 1464); _putDontNest(result, 1454, 1474); @@ -2719,11 +2695,21 @@ protected static IntegerKeyedHashMap _initDontNest() { _putDontNest(result, 1454, 1454); - _putDontNest(result, 11022, 10550); + _putDontNest(result, 10524, 10481); + + _putDontNest(result, 10524, 10650); + + _putDontNest(result, 10682, 10481); + + _putDontNest(result, 10682, 10650); - _putDontNest(result, 11022, 10713); + _putDontNest(result, 14404, 14437); - _putDontNest(result, 11022, 10544); + _putDontNest(result, 14413, 14437); + + _putDontNest(result, 10623, 841); + + _putDontNest(result, 10623, 999); _putDontNest(result, 1225, 1279); @@ -2773,8 +2759,6 @@ protected static IntegerKeyedHashMap _initDontNest() { _putDontNest(result, 1225, 1339); - _putDontNest(result, 14467, 14500); - _putDontNest(result, 1274, 1388); _putDontNest(result, 1274, 1378); @@ -2811,9 +2795,25 @@ protected static IntegerKeyedHashMap _initDontNest() { _putDontNest(result, 1274, 1339); - _putDontNest(result, 10587, 10713); + _putDontNest(result, 14409, 14400); + + _putDontNest(result, 14409, 14418); + + _putDontNest(result, 14409, 14409); + + _putDontNest(result, 14409, 14427); - _putDontNest(result, 10587, 10544); + _putDontNest(result, 14409, 14437); + + _putDontNest(result, 14227, 14400); + + _putDontNest(result, 14227, 14418); + + _putDontNest(result, 14227, 14409); + + _putDontNest(result, 14227, 14427); + + _putDontNest(result, 14227, 14437); _putDontNest(result, 1305, 1388); @@ -2933,14 +2933,19 @@ protected static IntegerMap _initDontNestGroups() { result.putUnsafe(1205, resultStoreId); ++resultStoreId; - result.putUnsafe(8467, resultStoreId); + result.putUnsafe(1220, resultStoreId); + result.putUnsafe(1252, resultStoreId); + result.putUnsafe(1238, resultStoreId); + result.putUnsafe(1229, resultStoreId); ++resultStoreId; - result.putUnsafe(14138, resultStoreId); + result.putUnsafe(8404, resultStoreId); ++resultStoreId; - result.putUnsafe(1388, resultStoreId); - result.putUnsafe(1397, resultStoreId); + result.putUnsafe(14075, resultStoreId); + ++resultStoreId; + + result.putUnsafe(1248, resultStoreId); ++resultStoreId; result.putUnsafe(1392, resultStoreId); @@ -2950,6 +2955,9 @@ protected static IntegerMap _initDontNestGroups() { result.putUnsafe(1289, resultStoreId); ++resultStoreId; + result.putUnsafe(2533, resultStoreId); + ++resultStoreId; + result.putUnsafe(887, resultStoreId); result.putUnsafe(1097, resultStoreId); result.putUnsafe(931, resultStoreId); @@ -2962,11 +2970,22 @@ protected static IntegerMap _initDontNestGroups() { result.putUnsafe(1225, resultStoreId); ++resultStoreId; - result.putUnsafe(14458, resultStoreId); - result.putUnsafe(14500, resultStoreId); - result.putUnsafe(14476, resultStoreId); - result.putUnsafe(14485, resultStoreId); - result.putUnsafe(14467, resultStoreId); + result.putUnsafe(14294, resultStoreId); + result.putUnsafe(14244, resultStoreId); + result.putUnsafe(14339, resultStoreId); + result.putUnsafe(14427, resultStoreId); + result.putUnsafe(14303, resultStoreId); + result.putUnsafe(14400, resultStoreId); + result.putUnsafe(14387, resultStoreId); + result.putUnsafe(14282, resultStoreId); + result.putUnsafe(14418, resultStoreId); + result.putUnsafe(14236, resultStoreId); + result.putUnsafe(14409, resultStoreId); + result.putUnsafe(14227, resultStoreId); + ++resultStoreId; + + result.putUnsafe(1562, resultStoreId); + result.putUnsafe(1547, resultStoreId); ++resultStoreId; result.putUnsafe(1407, resultStoreId); @@ -2975,6 +2994,18 @@ protected static IntegerMap _initDontNestGroups() { result.putUnsafe(1402, resultStoreId); ++resultStoreId; + result.putUnsafe(10790, resultStoreId); + result.putUnsafe(10751, resultStoreId); + result.putUnsafe(10595, resultStoreId); + result.putUnsafe(10531, resultStoreId); + result.putUnsafe(10541, resultStoreId); + result.putUnsafe(10548, resultStoreId); + result.putUnsafe(10474, resultStoreId); + result.putUnsafe(10508, resultStoreId); + result.putUnsafe(10524, resultStoreId); + result.putUnsafe(10682, resultStoreId); + ++resultStoreId; + result.putUnsafe(1552, resultStoreId); result.putUnsafe(1542, resultStoreId); ++resultStoreId; @@ -3002,13 +3033,8 @@ protected static IntegerMap _initDontNestGroups() { result.putUnsafe(1364, resultStoreId); ++resultStoreId; - result.putUnsafe(1220, resultStoreId); - result.putUnsafe(1252, resultStoreId); - result.putUnsafe(1238, resultStoreId); - result.putUnsafe(1229, resultStoreId); - ++resultStoreId; - - result.putUnsafe(7113, resultStoreId); + result.putUnsafe(10959, resultStoreId); + result.putUnsafe(8409, resultStoreId); ++resultStoreId; result.putUnsafe(1464, resultStoreId); @@ -3025,21 +3051,15 @@ protected static IntegerMap _initDontNestGroups() { result.putUnsafe(1274, resultStoreId); ++resultStoreId; - result.putUnsafe(1248, resultStoreId); + result.putUnsafe(4484, resultStoreId); + ++resultStoreId; + + result.putUnsafe(1388, resultStoreId); + result.putUnsafe(1397, resultStoreId); ++resultStoreId; - result.putUnsafe(14290, resultStoreId); - result.putUnsafe(14345, resultStoreId); - result.putUnsafe(14481, resultStoreId); - result.putUnsafe(14450, resultStoreId); - result.putUnsafe(14366, resultStoreId); - result.putUnsafe(14299, resultStoreId); - result.putUnsafe(14307, resultStoreId); - result.putUnsafe(14463, resultStoreId); - result.putUnsafe(14357, resultStoreId); - result.putUnsafe(14402, resultStoreId); - result.putUnsafe(14490, resultStoreId); - result.putUnsafe(14472, resultStoreId); + result.putUnsafe(7085, resultStoreId); + result.putUnsafe(7102, resultStoreId); ++resultStoreId; result.putUnsafe(1024, resultStoreId); @@ -3053,28 +3073,12 @@ protected static IntegerMap _initDontNestGroups() { result.putUnsafe(1062, resultStoreId); ++resultStoreId; - result.putUnsafe(10686, resultStoreId); + result.putUnsafe(10623, resultStoreId); ++resultStoreId; result.putUnsafe(1210, resultStoreId); ++resultStoreId; - result.putUnsafe(7125, resultStoreId); - result.putUnsafe(7108, resultStoreId); - ++resultStoreId; - - result.putUnsafe(10814, resultStoreId); - result.putUnsafe(10537, resultStoreId); - result.putUnsafe(10853, resultStoreId); - result.putUnsafe(10604, resultStoreId); - result.putUnsafe(10658, resultStoreId); - result.putUnsafe(10611, resultStoreId); - result.putUnsafe(10745, resultStoreId); - result.putUnsafe(10587, resultStoreId); - result.putUnsafe(10571, resultStoreId); - result.putUnsafe(10594, resultStoreId); - ++resultStoreId; - result.putUnsafe(1449, resultStoreId); result.putUnsafe(1417, resultStoreId); result.putUnsafe(1426, resultStoreId); @@ -3084,11 +3088,11 @@ protected static IntegerMap _initDontNestGroups() { result.putUnsafe(1454, resultStoreId); ++resultStoreId; - result.putUnsafe(1562, resultStoreId); - result.putUnsafe(1547, resultStoreId); - ++resultStoreId; - - result.putUnsafe(2533, resultStoreId); + result.putUnsafe(14395, resultStoreId); + result.putUnsafe(14422, resultStoreId); + result.putUnsafe(14437, resultStoreId); + result.putUnsafe(14404, resultStoreId); + result.putUnsafe(14413, resultStoreId); ++resultStoreId; result.putUnsafe(1479, resultStoreId); @@ -3103,6 +3107,9 @@ protected static IntegerMap _initDontNestGroups() { result.putUnsafe(1305, resultStoreId); ++resultStoreId; + result.putUnsafe(7090, resultStoreId); + ++resultStoreId; + result.putUnsafe(1262, resultStoreId); ++resultStoreId; @@ -3110,13 +3117,6 @@ protected static IntegerMap _initDontNestGroups() { result.putUnsafe(1198, resultStoreId); ++resultStoreId; - result.putUnsafe(8472, resultStoreId); - result.putUnsafe(11022, resultStoreId); - ++resultStoreId; - - result.putUnsafe(4494, resultStoreId); - ++resultStoreId; - result.putUnsafe(1315, resultStoreId); result.putUnsafe(1325, resultStoreId); result.putUnsafe(1334, resultStoreId); @@ -3343,10 +3343,11 @@ protected IntegerList getFilteredParents(int childId) { private static final IConstructor cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJDb21wcmVoZW5zaW9uIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIkNvbXByZWhlbnNpb25cIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKHNvcnQoIkNvbXByZWhlbnNpb24iKSkpfSk00 = (IConstructor) _read("prod(label(\"$MetaHole\",sort(\"Comprehension\")),[\\char-class([range(0,0)]),lit(\"sort(\\\"Comprehension\\\")\"),lit(\":\"),iter(\\char-class([range(48,57)])),\\char-class([range(0,0)])],{tag(\"holeType\"(sort(\"Comprehension\")))})", RascalValueFactory.Production); private static final IConstructor cHJvZChsYWJlbCgic3RydWN0dXJlZCIsc29ydCgiVHlwZSIpKSxbbGFiZWwoInN0cnVjdHVyZWQiLHNvcnQoIlN0cnVjdHVyZWRUeXBlIikpXSx7fSk00 = (IConstructor) _read("prod(label(\"structured\",sort(\"Type\")),[label(\"structured\",sort(\"StructuredType\"))],{})", RascalValueFactory.Production); private static final IConstructor cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJyZWwiKV0se30p = (IConstructor) _read("prod(keywords(\"RascalKeywords\"),[lit(\"rel\")],{})", RascalValueFactory.Production); - private static final IConstructor cHJvZChsaXQoInNvcnQoXCJBc3NpZ25hYmxlXCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDY1LDY1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDMsMTAzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTgsOTgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p = (IConstructor) _read("prod(lit(\"sort(\\\"Assignable\\\")\"),[\\char-class([range(115,115)]),\\char-class([range(111,111)]),\\char-class([range(114,114)]),\\char-class([range(116,116)]),\\char-class([range(40,40)]),\\char-class([range(34,34)]),\\char-class([range(65,65)]),\\char-class([range(115,115)]),\\char-class([range(115,115)]),\\char-class([range(105,105)]),\\char-class([range(103,103)]),\\char-class([range(110,110)]),\\char-class([range(97,97)]),\\char-class([range(98,98)]),\\char-class([range(108,108)]),\\char-class([range(101,101)]),\\char-class([range(34,34)]),\\char-class([range(41,41)])],{})", RascalValueFactory.Production); private static final IConstructor cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJsaXN0IildLHt9KQ0000 = (IConstructor) _read("prod(keywords(\"RascalKeywords\"),[lit(\"list\")],{})", RascalValueFactory.Production); private static final IConstructor cHJvZChsYWJlbCgiYW5kIixzb3J0KCJFeHByZXNzaW9uIikpLFtsYWJlbCgibGhzIixzb3J0KCJFeHByZXNzaW9uIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIiYmIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJyaHMiLHNvcnQoIkV4cHJlc3Npb24iKSldLHthc3NvYyhsZWZ0KCkpfSk00 = (IConstructor) _read("prod(label(\"and\",sort(\"Expression\")),[label(\"lhs\",sort(\"Expression\")),layouts(\"LAYOUTLIST\"),lit(\"&&\"),layouts(\"LAYOUTLIST\"),label(\"rhs\",sort(\"Expression\"))],{assoc(left())})", RascalValueFactory.Production); private static final IConstructor cHJvZChsaXQoIlxcaXRlci1zZXBzKHNvcnQoXCJGaWVsZFwiKSxbbGl0KFwiLFwiKV0pIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg5Miw5MildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDUsNDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDcwLDcwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDAsMTAwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5MSw5MSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NCw0NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Myw5MyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000 = (IConstructor) _read("prod(lit(\"\\\\iter-seps(sort(\\\"Field\\\"),[lit(\\\",\\\")])\"),[\\char-class([range(92,92)]),\\char-class([range(105,105)]),\\char-class([range(116,116)]),\\char-class([range(101,101)]),\\char-class([range(114,114)]),\\char-class([range(45,45)]),\\char-class([range(115,115)]),\\char-class([range(101,101)]),\\char-class([range(112,112)]),\\char-class([range(115,115)]),\\char-class([range(40,40)]),\\char-class([range(115,115)]),\\char-class([range(111,111)]),\\char-class([range(114,114)]),\\char-class([range(116,116)]),\\char-class([range(40,40)]),\\char-class([range(34,34)]),\\char-class([range(70,70)]),\\char-class([range(105,105)]),\\char-class([range(101,101)]),\\char-class([range(108,108)]),\\char-class([range(100,100)]),\\char-class([range(34,34)]),\\char-class([range(41,41)]),\\char-class([range(44,44)]),\\char-class([range(91,91)]),\\char-class([range(108,108)]),\\char-class([range(105,105)]),\\char-class([range(116,116)]),\\char-class([range(40,40)]),\\char-class([range(34,34)]),\\char-class([range(44,44)]),\\char-class([range(34,34)]),\\char-class([range(41,41)]),\\char-class([range(93,93)]),\\char-class([range(41,41)])],{})", RascalValueFactory.Production); + private static final IConstructor cHJvZChsYWJlbCgidHVwbGUiLHNvcnQoIlBhdHRlcm4iKSksW2xpdCgiXDwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImVsZW1lbnRzMCIsXGl0ZXItc3Rhci1zZXBzKHNvcnQoIlBhdHRlcm4iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJcPiIpXSx7fSk00 = (IConstructor) _read("prod(label(\"tuple\",sort(\"Pattern\")),[lit(\"\\<\"),layouts(\"LAYOUTLIST\"),label(\"elements0\",\\iter-star-seps(sort(\"Pattern\"),[layouts(\"LAYOUTLIST\"),lit(\",\"),layouts(\"LAYOUTLIST\")])),layouts(\"LAYOUTLIST\"),lit(\"\\>\")],{})", RascalValueFactory.Production); + private static final IConstructor cHJvZChsaXQoInNvcnQoXCJBc3NpZ25hYmxlXCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDY1LDY1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDMsMTAzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTgsOTgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p = (IConstructor) _read("prod(lit(\"sort(\\\"Assignable\\\")\"),[\\char-class([range(115,115)]),\\char-class([range(111,111)]),\\char-class([range(114,114)]),\\char-class([range(116,116)]),\\char-class([range(40,40)]),\\char-class([range(34,34)]),\\char-class([range(65,65)]),\\char-class([range(115,115)]),\\char-class([range(115,115)]),\\char-class([range(105,105)]),\\char-class([range(103,103)]),\\char-class([range(110,110)]),\\char-class([range(97,97)]),\\char-class([range(98,98)]),\\char-class([range(108,108)]),\\char-class([range(101,101)]),\\char-class([range(34,34)]),\\char-class([range(41,41)])],{})", RascalValueFactory.Production); private static final IConstructor cHJvZChsYWJlbCgiZGl2aXNpb24iLHNvcnQoIkFzc2lnbm1lbnQiKSksW2xpdCgiLz0iKV0se30p = (IConstructor) _read("prod(label(\"division\",sort(\"Assignment\")),[lit(\"/=\")],{})", RascalValueFactory.Production); private static final IConstructor cHJvZChsYWJlbCgiY29udGludWUiLHNvcnQoIlN0YXRlbWVudCIpKSxbbGl0KCJjb250aW51ZSIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgidGFyZ2V0Iixzb3J0KCJUYXJnZXQiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiOyIpXSx7dGFnKCJicmVha2FibGUiKCkpfSk00 = (IConstructor) _read("prod(label(\"continue\",sort(\"Statement\")),[lit(\"continue\"),layouts(\"LAYOUTLIST\"),label(\"target\",sort(\"Target\")),layouts(\"LAYOUTLIST\"),lit(\";\")],{tag(\"breakable\"())})", RascalValueFactory.Production); private static final IConstructor cHJvZChsaXQoInRyeSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTIxLDEyMSldKV0se30p = (IConstructor) _read("prod(lit(\"try\"),[\\char-class([range(116,116)]),\\char-class([range(114,114)]),\\char-class([range(121,121)])],{})", RascalValueFactory.Production); @@ -3405,7 +3406,6 @@ protected IntegerList getFilteredParents(int childId) { private static final IConstructor cHJvZChsaXQoInNvcnQoXCJQcm90b2NvbFBhcnRcIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODAsODApXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk5LDk5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4MCw4MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p = (IConstructor) _read("prod(lit(\"sort(\\\"ProtocolPart\\\")\"),[\\char-class([range(115,115)]),\\char-class([range(111,111)]),\\char-class([range(114,114)]),\\char-class([range(116,116)]),\\char-class([range(40,40)]),\\char-class([range(34,34)]),\\char-class([range(80,80)]),\\char-class([range(114,114)]),\\char-class([range(111,111)]),\\char-class([range(116,116)]),\\char-class([range(111,111)]),\\char-class([range(99,99)]),\\char-class([range(111,111)]),\\char-class([range(108,108)]),\\char-class([range(80,80)]),\\char-class([range(97,97)]),\\char-class([range(114,114)]),\\char-class([range(116,116)]),\\char-class([range(34,34)]),\\char-class([range(41,41)])],{})", RascalValueFactory.Production); private static final IConstructor cHJvZChsaXQoIlxcaXRlci1zdGFyKHNvcnQoXCJOYW1lZFJlZ0V4cFwiKSkiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkyLDkyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NSw0NSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDc4LDc4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAwLDEwMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODIsODIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMywxMDMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDY5LDY5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMjAsMTIwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTIsMTEyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00 = (IConstructor) _read("prod(lit(\"\\\\iter-star(sort(\\\"NamedRegExp\\\"))\"),[\\char-class([range(92,92)]),\\char-class([range(105,105)]),\\char-class([range(116,116)]),\\char-class([range(101,101)]),\\char-class([range(114,114)]),\\char-class([range(45,45)]),\\char-class([range(115,115)]),\\char-class([range(116,116)]),\\char-class([range(97,97)]),\\char-class([range(114,114)]),\\char-class([range(40,40)]),\\char-class([range(115,115)]),\\char-class([range(111,111)]),\\char-class([range(114,114)]),\\char-class([range(116,116)]),\\char-class([range(40,40)]),\\char-class([range(34,34)]),\\char-class([range(78,78)]),\\char-class([range(97,97)]),\\char-class([range(109,109)]),\\char-class([range(101,101)]),\\char-class([range(100,100)]),\\char-class([range(82,82)]),\\char-class([range(101,101)]),\\char-class([range(103,103)]),\\char-class([range(69,69)]),\\char-class([range(120,120)]),\\char-class([range(112,112)]),\\char-class([range(34,34)]),\\char-class([range(41,41)]),\\char-class([range(41,41)])],{})", RascalValueFactory.Production); private static final IConstructor cHJvZChsYWJlbCgiZGlmZmVyZW5jZSIsc29ydCgiQ2xhc3MiKSksW2xhYmVsKCJsaHMiLHNvcnQoIkNsYXNzIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIi0iKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInJocyIsc29ydCgiQ2xhc3MiKSldLHthc3NvYyhsZWZ0KCkpfSk00 = (IConstructor) _read("prod(label(\"difference\",sort(\"Class\")),[label(\"lhs\",sort(\"Class\")),layouts(\"LAYOUTLIST\"),lit(\"-\"),layouts(\"LAYOUTLIST\"),label(\"rhs\",sort(\"Class\"))],{assoc(left())})", RascalValueFactory.Production); - private static final IConstructor cHJvZChsYWJlbCgidHVwbGUiLHNvcnQoIlBhdHRlcm4iKSksW2xpdCgiXDwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImVsZW1lbnRzIixcaXRlci1zZXBzKHNvcnQoIlBhdHRlcm4iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJcPiIpXSx7fSk00 = (IConstructor) _read("prod(label(\"tuple\",sort(\"Pattern\")),[lit(\"\\<\"),layouts(\"LAYOUTLIST\"),label(\"elements\",\\iter-seps(sort(\"Pattern\"),[layouts(\"LAYOUTLIST\"),lit(\",\"),layouts(\"LAYOUTLIST\")])),layouts(\"LAYOUTLIST\"),lit(\"\\>\")],{})", RascalValueFactory.Production); private static final IConstructor cHJvZChsYWJlbCgibm9uZSIsXHBhcmFtZXRlcml6ZWQtc29ydCgiS2V5d29yZEFyZ3VtZW50cyIsW3NvcnQoIkV4cHJlc3Npb24iKV0pKSxbXSx7fSk00 = (IConstructor) _read("prod(label(\"none\",\\parameterized-sort(\"KeywordArguments\",[sort(\"Expression\")])),[],{})", RascalValueFactory.Production); private static final IConstructor cHJvZChsYWJlbCgiZGVmYXVsdCIsXHBhcmFtZXRlcml6ZWQtc29ydCgiS2V5d29yZEFyZ3VtZW50cyIsW3NvcnQoIkV4cHJlc3Npb24iKV0pKSxbbGFiZWwoIm9wdGlvbmFsQ29tbWEiLGxleCgiT3B0aW9uYWxDb21tYSIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksY29uZGl0aW9uYWwobGFiZWwoImtleXdvcmRBcmd1bWVudExpc3QiLFxpdGVyLXNlcHMoXHBhcmFtZXRlcml6ZWQtc29ydCgiS2V5d29yZEFyZ3VtZW50Iixbc29ydCgiRXhwcmVzc2lvbiIpXSksW2xheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIiwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIildKSkse3ByZWNlZGUoXGNoYXItY2xhc3MoW3JhbmdlKDksMTApLHJhbmdlKDMyLDMyKSxyYW5nZSg0MCw0MCkscmFuZ2UoNDQsNDQpXSkpfSldLHt9KQ0000 = (IConstructor) _read("prod(label(\"default\",\\parameterized-sort(\"KeywordArguments\",[sort(\"Expression\")])),[label(\"optionalComma\",lex(\"OptionalComma\")),layouts(\"LAYOUTLIST\"),conditional(label(\"keywordArgumentList\",\\iter-seps(\\parameterized-sort(\"KeywordArgument\",[sort(\"Expression\")]),[layouts(\"LAYOUTLIST\"),lit(\",\"),layouts(\"LAYOUTLIST\")])),{precede(\\char-class([range(9,10),range(32,32),range(40,40),range(44,44)]))})],{})", RascalValueFactory.Production); private static final IConstructor cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJTdGF0ZW1lbnQiKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJcXGl0ZXItc3Rhcihzb3J0KFwiU3RhdGVtZW50XCIpKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoXGl0ZXItc3Rhci1zZXBzKHNvcnQoIlN0YXRlbWVudCIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIildKSkpfSk00 = (IConstructor) _read("prod(label(\"$MetaHole\",sort(\"Statement\")),[\\char-class([range(0,0)]),lit(\"\\\\iter-star(sort(\\\"Statement\\\"))\"),lit(\":\"),iter(\\char-class([range(48,57)])),\\char-class([range(0,0)])],{tag(\"holeType\"(\\iter-star-seps(sort(\"Statement\"),[layouts(\"LAYOUTLIST\")])))})", RascalValueFactory.Production); @@ -3436,6 +3436,7 @@ protected IntegerList getFilteredParents(int childId) { private static final IConstructor cHJvZChsaXQoIm9wdChcXGNoYXItY2xhc3MoW3JhbmdlKDY4LDY4KSxyYW5nZSg3MCw3MCkscmFuZ2UoMTAwLDEwMCkscmFuZ2UoMTAyLDEwMildKSkiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Miw5MildKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTksOTkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNCwxMDQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NSw0NSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTksOTkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTEsOTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDMsMTAzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNTQsNTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDU2LDU2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NCw0NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNTQsNTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDU2LDU2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDQsNDQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDMsMTAzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNTUsNTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDQ4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NCw0NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNTUsNTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDQ4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDQsNDQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDMsMTAzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDksNDkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDQ4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw0OCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDQsNDQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ5LDQ5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw0OCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NCw0NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMywxMDMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0OSw0OSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDUwLDUwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NCw0NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDksNDkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDQ4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg1MCw1MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDkzLDkzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000 = (IConstructor) _read("prod(lit(\"opt(\\\\char-class([range(68,68),range(70,70),range(100,100),range(102,102)]))\"),[\\char-class([range(111,111)]),\\char-class([range(112,112)]),\\char-class([range(116,116)]),\\char-class([range(40,40)]),\\char-class([range(92,92)]),\\char-class([range(99,99)]),\\char-class([range(104,104)]),\\char-class([range(97,97)]),\\char-class([range(114,114)]),\\char-class([range(45,45)]),\\char-class([range(99,99)]),\\char-class([range(108,108)]),\\char-class([range(97,97)]),\\char-class([range(115,115)]),\\char-class([range(115,115)]),\\char-class([range(40,40)]),\\char-class([range(91,91)]),\\char-class([range(114,114)]),\\char-class([range(97,97)]),\\char-class([range(110,110)]),\\char-class([range(103,103)]),\\char-class([range(101,101)]),\\char-class([range(40,40)]),\\char-class([range(54,54)]),\\char-class([range(56,56)]),\\char-class([range(44,44)]),\\char-class([range(54,54)]),\\char-class([range(56,56)]),\\char-class([range(41,41)]),\\char-class([range(44,44)]),\\char-class([range(114,114)]),\\char-class([range(97,97)]),\\char-class([range(110,110)]),\\char-class([range(103,103)]),\\char-class([range(101,101)]),\\char-class([range(40,40)]),\\char-class([range(55,55)]),\\char-class([range(48,48)]),\\char-class([range(44,44)]),\\char-class([range(55,55)]),\\char-class([range(48,48)]),\\char-class([range(41,41)]),\\char-class([range(44,44)]),\\char-class([range(114,114)]),\\char-class([range(97,97)]),\\char-class([range(110,110)]),\\char-class([range(103,103)]),\\char-class([range(101,101)]),\\char-class([range(40,40)]),\\char-class([range(49,49)]),\\char-class([range(48,48)]),\\char-class([range(48,48)]),\\char-class([range(44,44)]),\\char-class([range(49,49)]),\\char-class([range(48,48)]),\\char-class([range(48,48)]),\\char-class([range(41,41)]),\\char-class([range(44,44)]),\\char-class([range(114,114)]),\\char-class([range(97,97)]),\\char-class([range(110,110)]),\\char-class([range(103,103)]),\\char-class([range(101,101)]),\\char-class([range(40,40)]),\\char-class([range(49,49)]),\\char-class([range(48,48)]),\\char-class([range(50,50)]),\\char-class([range(44,44)]),\\char-class([range(49,49)]),\\char-class([range(48,48)]),\\char-class([range(50,50)]),\\char-class([range(41,41)]),\\char-class([range(93,93)]),\\char-class([range(41,41)]),\\char-class([range(41,41)])],{})", RascalValueFactory.Production); private static final IConstructor cHJvZChsaXQoInwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyNCwxMjQpXSldLHt9KQ0000 = (IConstructor) _read("prod(lit(\"|\"),[\\char-class([range(124,124)])],{})", RascalValueFactory.Production); private static final IConstructor cHJvZChsYWJlbCgiaW5zZXJ0Iixzb3J0KCJTdGF0ZW1lbnQiKSksW2xpdCgiaW5zZXJ0IiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJkYXRhVGFyZ2V0Iixzb3J0KCJEYXRhVGFyZ2V0IikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgic3RhdGVtZW50Iixjb25kaXRpb25hbChzb3J0KCJTdGF0ZW1lbnQiKSx7ZXhjZXB0KCJ2YXJpYWJsZURlY2xhcmF0aW9uIiksZXhjZXB0KCJmdW5jdGlvbkRlY2xhcmF0aW9uIil9KSldLHt0YWcoImJyZWFrYWJsZSIoKSl9KQ0000 = (IConstructor) _read("prod(label(\"insert\",sort(\"Statement\")),[lit(\"insert\"),layouts(\"LAYOUTLIST\"),label(\"dataTarget\",sort(\"DataTarget\")),layouts(\"LAYOUTLIST\"),label(\"statement\",conditional(sort(\"Statement\"),{except(\"variableDeclaration\"),except(\"functionDeclaration\")}))],{tag(\"breakable\"())})", RascalValueFactory.Production); + private static final IConstructor cHJvZChsaXQoIm9wdChzZXEoW1xcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSksb3B0KFxcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpXSkpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTIsMTEyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEzLDExMyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDkxLDkxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Miw5MildKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTksOTkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNCwxMDQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NSw0NSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTksOTkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTEsOTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDMsMTAzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNTIsNTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDU2LDU2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NCw0NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNTMsNTMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDU1LDU1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTMsOTMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NCw0NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEyLDExMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDkyLDkyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5OSw5OSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA0LDEwNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ1LDQ1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5OSw5OSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5MSw5MSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMywxMDMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg1Miw1MildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNTYsNTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg1Myw1MyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNTUsNTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Myw5MyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Myw5MyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00 = (IConstructor) _read("prod(lit(\"opt(seq([\\\\char-class([range(48,57)]),opt(\\\\char-class([range(48,57)]))]))\"),[\\char-class([range(111,111)]),\\char-class([range(112,112)]),\\char-class([range(116,116)]),\\char-class([range(40,40)]),\\char-class([range(115,115)]),\\char-class([range(101,101)]),\\char-class([range(113,113)]),\\char-class([range(40,40)]),\\char-class([range(91,91)]),\\char-class([range(92,92)]),\\char-class([range(99,99)]),\\char-class([range(104,104)]),\\char-class([range(97,97)]),\\char-class([range(114,114)]),\\char-class([range(45,45)]),\\char-class([range(99,99)]),\\char-class([range(108,108)]),\\char-class([range(97,97)]),\\char-class([range(115,115)]),\\char-class([range(115,115)]),\\char-class([range(40,40)]),\\char-class([range(91,91)]),\\char-class([range(114,114)]),\\char-class([range(97,97)]),\\char-class([range(110,110)]),\\char-class([range(103,103)]),\\char-class([range(101,101)]),\\char-class([range(40,40)]),\\char-class([range(52,52)]),\\char-class([range(56,56)]),\\char-class([range(44,44)]),\\char-class([range(53,53)]),\\char-class([range(55,55)]),\\char-class([range(41,41)]),\\char-class([range(93,93)]),\\char-class([range(41,41)]),\\char-class([range(44,44)]),\\char-class([range(111,111)]),\\char-class([range(112,112)]),\\char-class([range(116,116)]),\\char-class([range(40,40)]),\\char-class([range(92,92)]),\\char-class([range(99,99)]),\\char-class([range(104,104)]),\\char-class([range(97,97)]),\\char-class([range(114,114)]),\\char-class([range(45,45)]),\\char-class([range(99,99)]),\\char-class([range(108,108)]),\\char-class([range(97,97)]),\\char-class([range(115,115)]),\\char-class([range(115,115)]),\\char-class([range(40,40)]),\\char-class([range(91,91)]),\\char-class([range(114,114)]),\\char-class([range(97,97)]),\\char-class([range(110,110)]),\\char-class([range(103,103)]),\\char-class([range(101,101)]),\\char-class([range(40,40)]),\\char-class([range(52,52)]),\\char-class([range(56,56)]),\\char-class([range(44,44)]),\\char-class([range(53,53)]),\\char-class([range(55,55)]),\\char-class([range(41,41)]),\\char-class([range(93,93)]),\\char-class([range(41,41)]),\\char-class([range(41,41)]),\\char-class([range(93,93)]),\\char-class([range(41,41)]),\\char-class([range(41,41)])],{})", RascalValueFactory.Production); private static final IConstructor cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIkJhY2tzbGFzaCIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJCYWNrc2xhc2hcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKGxleCgiQmFja3NsYXNoIikpKX0p = (IConstructor) _read("prod(label(\"$MetaHole\",lex(\"Backslash\")),[\\char-class([range(0,0)]),lit(\"sort(\\\"Backslash\\\")\"),lit(\":\"),iter(\\char-class([range(48,57)])),\\char-class([range(0,0)])],{tag(\"holeType\"(lex(\"Backslash\")))})", RascalValueFactory.Production); private static final IConstructor cHJvZChsaXQoImxpc3QiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSldLHt9KQ0000 = (IConstructor) _read("prod(lit(\"list\"),[\\char-class([range(108,108)]),\\char-class([range(105,105)]),\\char-class([range(115,115)]),\\char-class([range(116,116)])],{})", RascalValueFactory.Production); private static final IConstructor cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJTdGFydCIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJTdGFydFwiKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoc29ydCgiU3RhcnQiKSkpfSk00 = (IConstructor) _read("prod(label(\"$MetaHole\",sort(\"Start\")),[\\char-class([range(0,0)]),lit(\"sort(\\\"Start\\\")\"),lit(\":\"),iter(\\char-class([range(48,57)])),\\char-class([range(0,0)])],{tag(\"holeType\"(sort(\"Start\")))})", RascalValueFactory.Production); @@ -3460,8 +3461,6 @@ protected IntegerList getFilteredParents(int childId) { private static final IConstructor cHJvZChsaXQoImFsaWFzIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSldLHt9KQ0000 = (IConstructor) _read("prod(lit(\"alias\"),[\\char-class([range(97,97)]),\\char-class([range(108,108)]),\\char-class([range(105,105)]),\\char-class([range(97,97)]),\\char-class([range(115,115)])],{})", RascalValueFactory.Production); private static final IConstructor cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJmYWxzZSIpXSx7fSk00 = (IConstructor) _read("prod(keywords(\"RascalKeywords\"),[lit(\"false\")],{})", RascalValueFactory.Production); private static final IConstructor cHJvZChsYWJlbCgiZGVmYXVsdCIsc29ydCgiUGFyYW1ldGVycyIpKSxbbGl0KCIoIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJmb3JtYWxzIixzb3J0KCJGb3JtYWxzIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgia2V5d29yZEZvcm1hbHMiLHNvcnQoIktleXdvcmRGb3JtYWxzIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIikiKV0se30p = (IConstructor) _read("prod(label(\"default\",sort(\"Parameters\")),[lit(\"(\"),layouts(\"LAYOUTLIST\"),label(\"formals\",sort(\"Formals\")),layouts(\"LAYOUTLIST\"),label(\"keywordFormals\",sort(\"KeywordFormals\")),layouts(\"LAYOUTLIST\"),lit(\")\")],{})", RascalValueFactory.Production); - private static final IConstructor cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIlBhdHRlcm4iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000 = (IConstructor) _read("regular(\\iter-seps(sort(\"Pattern\"),[layouts(\"LAYOUTLIST\"),lit(\",\"),layouts(\"LAYOUTLIST\")]))", RascalValueFactory.Production); - private static final IConstructor cHJvZChsaXQoIm9wdChzZXEoW1xcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSksb3B0KFxcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpXSkpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTIsMTEyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEzLDExMyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDkxLDkxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Miw5MildKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTksOTkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNCwxMDQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NSw0NSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTksOTkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTEsOTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDMsMTAzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNTIsNTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDU2LDU2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NCw0NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNTMsNTMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDU1LDU1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTMsOTMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NCw0NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEyLDExMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDkyLDkyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5OSw5OSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA0LDEwNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ1LDQ1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5OSw5OSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5MSw5MSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMywxMDMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg1Miw1MildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNTYsNTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg1Myw1MyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNTUsNTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Myw5MyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Myw5MyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00 = (IConstructor) _read("prod(lit(\"opt(seq([\\\\char-class([range(48,57)]),opt(\\\\char-class([range(48,57)]))]))\"),[\\char-class([range(111,111)]),\\char-class([range(112,112)]),\\char-class([range(116,116)]),\\char-class([range(40,40)]),\\char-class([range(115,115)]),\\char-class([range(101,101)]),\\char-class([range(113,113)]),\\char-class([range(40,40)]),\\char-class([range(91,91)]),\\char-class([range(92,92)]),\\char-class([range(99,99)]),\\char-class([range(104,104)]),\\char-class([range(97,97)]),\\char-class([range(114,114)]),\\char-class([range(45,45)]),\\char-class([range(99,99)]),\\char-class([range(108,108)]),\\char-class([range(97,97)]),\\char-class([range(115,115)]),\\char-class([range(115,115)]),\\char-class([range(40,40)]),\\char-class([range(91,91)]),\\char-class([range(114,114)]),\\char-class([range(97,97)]),\\char-class([range(110,110)]),\\char-class([range(103,103)]),\\char-class([range(101,101)]),\\char-class([range(40,40)]),\\char-class([range(52,52)]),\\char-class([range(56,56)]),\\char-class([range(44,44)]),\\char-class([range(53,53)]),\\char-class([range(55,55)]),\\char-class([range(41,41)]),\\char-class([range(93,93)]),\\char-class([range(41,41)]),\\char-class([range(44,44)]),\\char-class([range(111,111)]),\\char-class([range(112,112)]),\\char-class([range(116,116)]),\\char-class([range(40,40)]),\\char-class([range(92,92)]),\\char-class([range(99,99)]),\\char-class([range(104,104)]),\\char-class([range(97,97)]),\\char-class([range(114,114)]),\\char-class([range(45,45)]),\\char-class([range(99,99)]),\\char-class([range(108,108)]),\\char-class([range(97,97)]),\\char-class([range(115,115)]),\\char-class([range(115,115)]),\\char-class([range(40,40)]),\\char-class([range(91,91)]),\\char-class([range(114,114)]),\\char-class([range(97,97)]),\\char-class([range(110,110)]),\\char-class([range(103,103)]),\\char-class([range(101,101)]),\\char-class([range(40,40)]),\\char-class([range(52,52)]),\\char-class([range(56,56)]),\\char-class([range(44,44)]),\\char-class([range(53,53)]),\\char-class([range(55,55)]),\\char-class([range(41,41)]),\\char-class([range(93,93)]),\\char-class([range(41,41)]),\\char-class([range(41,41)]),\\char-class([range(93,93)]),\\char-class([range(41,41)]),\\char-class([range(41,41)])],{})", RascalValueFactory.Production); private static final IConstructor cHJvZChsaXQoInNvcnQoXCJDYXRjaFwiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg2Nyw2NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk5LDk5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDQsMTA0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000 = (IConstructor) _read("prod(lit(\"sort(\\\"Catch\\\")\"),[\\char-class([range(115,115)]),\\char-class([range(111,111)]),\\char-class([range(114,114)]),\\char-class([range(116,116)]),\\char-class([range(40,40)]),\\char-class([range(34,34)]),\\char-class([range(67,67)]),\\char-class([range(97,97)]),\\char-class([range(116,116)]),\\char-class([range(99,99)]),\\char-class([range(104,104)]),\\char-class([range(34,34)]),\\char-class([range(41,41)])],{})", RascalValueFactory.Production); private static final IConstructor cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp = (IConstructor) _read("regular(iter(\\char-class([range(48,57)])))", RascalValueFactory.Production); private static final IConstructor cmVndWxhcihcaXRlci1zdGFyLXNlcHMoc29ydCgiUmFuZ2UiKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpXSkp = (IConstructor) _read("regular(\\iter-star-seps(sort(\"Range\"),[layouts(\"LAYOUTLIST\")]))", RascalValueFactory.Production); @@ -3554,6 +3553,7 @@ protected IntegerList getFilteredParents(int childId) { private static final IConstructor cHJvZChsYWJlbCgibGFuZ3VhZ2UiLHNvcnQoIlN5bnRheERlZmluaXRpb24iKSksW2xhYmVsKCJzdGFydCIsc29ydCgiU3RhcnQiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgic3ludGF4IiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJkZWZpbmVkIixzb3J0KCJTeW0iKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiPSIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgicHJvZHVjdGlvbiIsc29ydCgiUHJvZCIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCI7IildLHt0YWcoIkZvbGRhYmxlIigpKX0p = (IConstructor) _read("prod(label(\"language\",sort(\"SyntaxDefinition\")),[label(\"start\",sort(\"Start\")),layouts(\"LAYOUTLIST\"),lit(\"syntax\"),layouts(\"LAYOUTLIST\"),label(\"defined\",sort(\"Sym\")),layouts(\"LAYOUTLIST\"),lit(\"=\"),layouts(\"LAYOUTLIST\"),label(\"production\",sort(\"Prod\")),layouts(\"LAYOUTLIST\"),lit(\";\")],{tag(\"Foldable\"())})", RascalValueFactory.Production); private static final IConstructor cHJvZChsYWJlbCgicmVnRXhwIixzb3J0KCJMaXRlcmFsIikpLFtsYWJlbCgicmVnRXhwTGl0ZXJhbCIsbGV4KCJSZWdFeHBMaXRlcmFsIikpXSx7dGFnKCJjYXRlZ29yeSIoInJlZ2V4cCIpKX0p = (IConstructor) _read("prod(label(\"regExp\",sort(\"Literal\")),[label(\"regExpLiteral\",lex(\"RegExpLiteral\"))],{tag(\"category\"(\"regexp\"))})", RascalValueFactory.Production); private static final IConstructor cHJvZChsaXQoInNvcnQoXCJUYWdTdHJpbmdcIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODQsODQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDMsMTAzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4Myw4MyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAzLDEwMyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00 = (IConstructor) _read("prod(lit(\"sort(\\\"TagString\\\")\"),[\\char-class([range(115,115)]),\\char-class([range(111,111)]),\\char-class([range(114,114)]),\\char-class([range(116,116)]),\\char-class([range(40,40)]),\\char-class([range(34,34)]),\\char-class([range(84,84)]),\\char-class([range(97,97)]),\\char-class([range(103,103)]),\\char-class([range(83,83)]),\\char-class([range(116,116)]),\\char-class([range(114,114)]),\\char-class([range(105,105)]),\\char-class([range(110,110)]),\\char-class([range(103,103)]),\\char-class([range(34,34)]),\\char-class([range(41,41)])],{})", RascalValueFactory.Production); + private static final IConstructor cHJvZChsaXQoIlxcaXRlci1zdGFyKFxcY2hhci1jbGFzcyhbcmFuZ2UoOSw5KSxyYW5nZSgzMiwzMikscmFuZ2UoMTYwLDE2MCkscmFuZ2UoNTc2MCw1NzYwKSxyYW5nZSg4MTkyLDgyMDIpLHJhbmdlKDgyMzksODIzOSkscmFuZ2UoODI4Nyw4Mjg3KSxyYW5nZSgxMjI4OCwxMjI4OCldKSkiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkyLDkyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NSw0NSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Miw5MildKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTksOTkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNCwxMDQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NSw0NSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTksOTkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTEsOTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDMsMTAzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNTcsNTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg1Nyw1NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAzLDEwMyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDUxLDUxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg1MCw1MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDQsNDQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDUxLDUxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg1MCw1MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAzLDEwMyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ5LDQ5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg1NCw1NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0OSw0OSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNTQsNTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDQ4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDQsNDQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDMsMTAzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNTMsNTMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDU1LDU1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg1NCw1NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg1Myw1MyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNTUsNTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDU0LDU0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw0OCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAzLDEwMyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDU2LDU2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0OSw0OSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNTcsNTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDUwLDUwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NCw0NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNTYsNTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDUwLDUwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw0OCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNTAsNTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NCw0NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMywxMDMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg1Niw1NildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNTAsNTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDUxLDUxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg1Nyw1NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDQsNDQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDU2LDU2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg1MCw1MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNTEsNTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDU3LDU3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDQsNDQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDMsMTAzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNTYsNTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDUwLDUwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg1Niw1NildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNTUsNTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg1Niw1NildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNTAsNTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDU2LDU2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg1NSw1NSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAzLDEwMyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ5LDQ5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg1MCw1MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNTAsNTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDU2LDU2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg1Niw1NildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDQsNDQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ5LDQ5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg1MCw1MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNTAsNTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDU2LDU2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg1Niw1NildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDkzLDkzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000 = (IConstructor) _read("prod(lit(\"\\\\iter-star(\\\\char-class([range(9,9),range(32,32),range(160,160),range(5760,5760),range(8192,8202),range(8239,8239),range(8287,8287),range(12288,12288)]))\"),[\\char-class([range(92,92)]),\\char-class([range(105,105)]),\\char-class([range(116,116)]),\\char-class([range(101,101)]),\\char-class([range(114,114)]),\\char-class([range(45,45)]),\\char-class([range(115,115)]),\\char-class([range(116,116)]),\\char-class([range(97,97)]),\\char-class([range(114,114)]),\\char-class([range(40,40)]),\\char-class([range(92,92)]),\\char-class([range(99,99)]),\\char-class([range(104,104)]),\\char-class([range(97,97)]),\\char-class([range(114,114)]),\\char-class([range(45,45)]),\\char-class([range(99,99)]),\\char-class([range(108,108)]),\\char-class([range(97,97)]),\\char-class([range(115,115)]),\\char-class([range(115,115)]),\\char-class([range(40,40)]),\\char-class([range(91,91)]),\\char-class([range(114,114)]),\\char-class([range(97,97)]),\\char-class([range(110,110)]),\\char-class([range(103,103)]),\\char-class([range(101,101)]),\\char-class([range(40,40)]),\\char-class([range(57,57)]),\\char-class([range(44,44)]),\\char-class([range(57,57)]),\\char-class([range(41,41)]),\\char-class([range(44,44)]),\\char-class([range(114,114)]),\\char-class([range(97,97)]),\\char-class([range(110,110)]),\\char-class([range(103,103)]),\\char-class([range(101,101)]),\\char-class([range(40,40)]),\\char-class([range(51,51)]),\\char-class([range(50,50)]),\\char-class([range(44,44)]),\\char-class([range(51,51)]),\\char-class([range(50,50)]),\\char-class([range(41,41)]),\\char-class([range(44,44)]),\\char-class([range(114,114)]),\\char-class([range(97,97)]),\\char-class([range(110,110)]),\\char-class([range(103,103)]),\\char-class([range(101,101)]),\\char-class([range(40,40)]),\\char-class([range(49,49)]),\\char-class([range(54,54)]),\\char-class([range(48,48)]),\\char-class([range(44,44)]),\\char-class([range(49,49)]),\\char-class([range(54,54)]),\\char-class([range(48,48)]),\\char-class([range(41,41)]),\\char-class([range(44,44)]),\\char-class([range(114,114)]),\\char-class([range(97,97)]),\\char-class([range(110,110)]),\\char-class([range(103,103)]),\\char-class([range(101,101)]),\\char-class([range(40,40)]),\\char-class([range(53,53)]),\\char-class([range(55,55)]),\\char-class([range(54,54)]),\\char-class([range(48,48)]),\\char-class([range(44,44)]),\\char-class([range(53,53)]),\\char-class([range(55,55)]),\\char-class([range(54,54)]),\\char-class([range(48,48)]),\\char-class([range(41,41)]),\\char-class([range(44,44)]),\\char-class([range(114,114)]),\\char-class([range(97,97)]),\\char-class([range(110,110)]),\\char-class([range(103,103)]),\\char-class([range(101,101)]),\\char-class([range(40,40)]),\\char-class([range(56,56)]),\\char-class([range(49,49)]),\\char-class([range(57,57)]),\\char-class([range(50,50)]),\\char-class([range(44,44)]),\\char-class([range(56,56)]),\\char-class([range(50,50)]),\\char-class([range(48,48)]),\\char-class([range(50,50)]),\\char-class([range(41,41)]),\\char-class([range(44,44)]),\\char-class([range(114,114)]),\\char-class([range(97,97)]),\\char-class([range(110,110)]),\\char-class([range(103,103)]),\\char-class([range(101,101)]),\\char-class([range(40,40)]),\\char-class([range(56,56)]),\\char-class([range(50,50)]),\\char-class([range(51,51)]),\\char-class([range(57,57)]),\\char-class([range(44,44)]),\\char-class([range(56,56)]),\\char-class([range(50,50)]),\\char-class([range(51,51)]),\\char-class([range(57,57)]),\\char-class([range(41,41)]),\\char-class([range(44,44)]),\\char-class([range(114,114)]),\\char-class([range(97,97)]),\\char-class([range(110,110)]),\\char-class([range(103,103)]),\\char-class([range(101,101)]),\\char-class([range(40,40)]),\\char-class([range(56,56)]),\\char-class([range(50,50)]),\\char-class([range(56,56)]),\\char-class([range(55,55)]),\\char-class([range(44,44)]),\\char-class([range(56,56)]),\\char-class([range(50,50)]),\\char-class([range(56,56)]),\\char-class([range(55,55)]),\\char-class([range(41,41)]),\\char-class([range(44,44)]),\\char-class([range(114,114)]),\\char-class([range(97,97)]),\\char-class([range(110,110)]),\\char-class([range(103,103)]),\\char-class([range(101,101)]),\\char-class([range(40,40)]),\\char-class([range(49,49)]),\\char-class([range(50,50)]),\\char-class([range(50,50)]),\\char-class([range(56,56)]),\\char-class([range(56,56)]),\\char-class([range(44,44)]),\\char-class([range(49,49)]),\\char-class([range(50,50)]),\\char-class([range(50,50)]),\\char-class([range(56,56)]),\\char-class([range(56,56)]),\\char-class([range(41,41)]),\\char-class([range(93,93)]),\\char-class([range(41,41)]),\\char-class([range(41,41)])],{})", RascalValueFactory.Production); private static final IConstructor cHJvZChsYWJlbCgibm9uRW1wdHlCbG9jayIsc29ydCgiRXhwcmVzc2lvbiIpKSxbbGl0KCJ7IiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJzdGF0ZW1lbnRzIixcaXRlci1zZXBzKHNvcnQoIlN0YXRlbWVudCIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIildKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgifSIpXSx7fSk00 = (IConstructor) _read("prod(label(\"nonEmptyBlock\",sort(\"Expression\")),[lit(\"{\"),layouts(\"LAYOUTLIST\"),label(\"statements\",\\iter-seps(sort(\"Statement\"),[layouts(\"LAYOUTLIST\")])),layouts(\"LAYOUTLIST\"),lit(\"}\")],{})", RascalValueFactory.Production); private static final IConstructor cHJvZChsYWJlbCgiZGVmYXVsdCIsc29ydCgiS2V5d29yZEZvcm1hbHMiKSksW2xhYmVsKCJvcHRpb25hbENvbW1hIixsZXgoIk9wdGlvbmFsQ29tbWEiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGNvbmRpdGlvbmFsKGxhYmVsKCJrZXl3b3JkRm9ybWFsTGlzdCIsXGl0ZXItc2Vwcyhzb3J0KCJLZXl3b3JkRm9ybWFsIiksW2xheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIiwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIildKSkse3ByZWNlZGUoXGNoYXItY2xhc3MoW3JhbmdlKDksMTApLHJhbmdlKDMyLDMyKSxyYW5nZSg0MCw0MCkscmFuZ2UoNDQsNDQpXSkpfSldLHt9KQ0000 = (IConstructor) _read("prod(label(\"default\",sort(\"KeywordFormals\")),[label(\"optionalComma\",lex(\"OptionalComma\")),layouts(\"LAYOUTLIST\"),conditional(label(\"keywordFormalList\",\\iter-seps(sort(\"KeywordFormal\"),[layouts(\"LAYOUTLIST\"),lit(\",\"),layouts(\"LAYOUTLIST\")])),{precede(\\char-class([range(9,10),range(32,32),range(40,40),range(44,44)]))})],{})", RascalValueFactory.Production); private static final IConstructor cHJvZChsYWJlbCgidm9pZCIsc29ydCgiQmFzaWNUeXBlIikpLFtsaXQoInZvaWQiKV0se30p = (IConstructor) _read("prod(label(\"void\",sort(\"BasicType\")),[lit(\"void\")],{})", RascalValueFactory.Production); @@ -3583,8 +3583,6 @@ protected IntegerList getFilteredParents(int childId) { private static final IConstructor cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJ2aXNpdCIpXSx7fSk00 = (IConstructor) _read("prod(keywords(\"RascalKeywords\"),[lit(\"visit\")],{})", RascalValueFactory.Production); private static final IConstructor cHJvZChsYWJlbCgibGl0ZXJhbCIsc29ydCgiUGF0dGVybiIpKSxbbGFiZWwoImxpdGVyYWwiLHNvcnQoIkxpdGVyYWwiKSldLHt9KQ0000 = (IConstructor) _read("prod(label(\"literal\",sort(\"Pattern\")),[label(\"literal\",sort(\"Literal\"))],{})", RascalValueFactory.Production); private static final IConstructor cHJvZChsZXgoIlJhdGlvbmFsTGl0ZXJhbCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSksXGl0ZXItc3RhcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pXSx7fSk00 = (IConstructor) _read("prod(lex(\"RationalLiteral\"),[\\char-class([range(48,57)]),\\iter-star(\\char-class([range(48,57)])),\\char-class([range(114,114)])],{})", RascalValueFactory.Production); - private static final IConstructor cHJvZChsaXQoIlxcaXRlci1zZXBzKHNvcnQoXCJQYXR0ZXJuXCIpLFtsaXQoXCIsXCIpXSkiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkyLDkyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NSw0NSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEyLDExMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODAsODApXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5MSw5MSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NCw0NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Myw5MyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000 = (IConstructor) _read("prod(lit(\"\\\\iter-seps(sort(\\\"Pattern\\\"),[lit(\\\",\\\")])\"),[\\char-class([range(92,92)]),\\char-class([range(105,105)]),\\char-class([range(116,116)]),\\char-class([range(101,101)]),\\char-class([range(114,114)]),\\char-class([range(45,45)]),\\char-class([range(115,115)]),\\char-class([range(101,101)]),\\char-class([range(112,112)]),\\char-class([range(115,115)]),\\char-class([range(40,40)]),\\char-class([range(115,115)]),\\char-class([range(111,111)]),\\char-class([range(114,114)]),\\char-class([range(116,116)]),\\char-class([range(40,40)]),\\char-class([range(34,34)]),\\char-class([range(80,80)]),\\char-class([range(97,97)]),\\char-class([range(116,116)]),\\char-class([range(116,116)]),\\char-class([range(101,101)]),\\char-class([range(114,114)]),\\char-class([range(110,110)]),\\char-class([range(34,34)]),\\char-class([range(41,41)]),\\char-class([range(44,44)]),\\char-class([range(91,91)]),\\char-class([range(108,108)]),\\char-class([range(105,105)]),\\char-class([range(116,116)]),\\char-class([range(40,40)]),\\char-class([range(34,34)]),\\char-class([range(44,44)]),\\char-class([range(34,34)]),\\char-class([range(41,41)]),\\char-class([range(93,93)]),\\char-class([range(41,41)])],{})", RascalValueFactory.Production); - private static final IConstructor cHJvZChsaXQoIlxcaXRlci1zdGFyKFxcY2hhci1jbGFzcyhbcmFuZ2UoOSw5KSxyYW5nZSgzMiwzMikscmFuZ2UoMTYwLDE2MCkscmFuZ2UoNTc2MCw1NzYwKSxyYW5nZSg4MTkyLDgyMDIpLHJhbmdlKDgyMzksODIzOSkscmFuZ2UoODI4Nyw4Mjg3KSxyYW5nZSgxMjI4OCwxMjI4OCldKSkiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkyLDkyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NSw0NSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Miw5MildKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTksOTkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNCwxMDQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NSw0NSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTksOTkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTEsOTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDMsMTAzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNTcsNTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg1Nyw1NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAzLDEwMyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDUxLDUxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg1MCw1MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDQsNDQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDUxLDUxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg1MCw1MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAzLDEwMyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ5LDQ5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg1NCw1NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0OSw0OSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNTQsNTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDQ4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDQsNDQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDMsMTAzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNTMsNTMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDU1LDU1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg1NCw1NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg1Myw1MyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNTUsNTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDU0LDU0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw0OCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAzLDEwMyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDU2LDU2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0OSw0OSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNTcsNTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDUwLDUwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NCw0NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNTYsNTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDUwLDUwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw0OCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNTAsNTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NCw0NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMywxMDMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg1Niw1NildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNTAsNTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDUxLDUxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg1Nyw1NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDQsNDQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDU2LDU2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg1MCw1MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNTEsNTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDU3LDU3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDQsNDQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDMsMTAzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNTYsNTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDUwLDUwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg1Niw1NildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNTUsNTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg1Niw1NildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNTAsNTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDU2LDU2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg1NSw1NSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAzLDEwMyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ5LDQ5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg1MCw1MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNTAsNTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDU2LDU2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg1Niw1NildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDQsNDQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ5LDQ5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg1MCw1MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNTAsNTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDU2LDU2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg1Niw1NildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDkzLDkzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000 = (IConstructor) _read("prod(lit(\"\\\\iter-star(\\\\char-class([range(9,9),range(32,32),range(160,160),range(5760,5760),range(8192,8202),range(8239,8239),range(8287,8287),range(12288,12288)]))\"),[\\char-class([range(92,92)]),\\char-class([range(105,105)]),\\char-class([range(116,116)]),\\char-class([range(101,101)]),\\char-class([range(114,114)]),\\char-class([range(45,45)]),\\char-class([range(115,115)]),\\char-class([range(116,116)]),\\char-class([range(97,97)]),\\char-class([range(114,114)]),\\char-class([range(40,40)]),\\char-class([range(92,92)]),\\char-class([range(99,99)]),\\char-class([range(104,104)]),\\char-class([range(97,97)]),\\char-class([range(114,114)]),\\char-class([range(45,45)]),\\char-class([range(99,99)]),\\char-class([range(108,108)]),\\char-class([range(97,97)]),\\char-class([range(115,115)]),\\char-class([range(115,115)]),\\char-class([range(40,40)]),\\char-class([range(91,91)]),\\char-class([range(114,114)]),\\char-class([range(97,97)]),\\char-class([range(110,110)]),\\char-class([range(103,103)]),\\char-class([range(101,101)]),\\char-class([range(40,40)]),\\char-class([range(57,57)]),\\char-class([range(44,44)]),\\char-class([range(57,57)]),\\char-class([range(41,41)]),\\char-class([range(44,44)]),\\char-class([range(114,114)]),\\char-class([range(97,97)]),\\char-class([range(110,110)]),\\char-class([range(103,103)]),\\char-class([range(101,101)]),\\char-class([range(40,40)]),\\char-class([range(51,51)]),\\char-class([range(50,50)]),\\char-class([range(44,44)]),\\char-class([range(51,51)]),\\char-class([range(50,50)]),\\char-class([range(41,41)]),\\char-class([range(44,44)]),\\char-class([range(114,114)]),\\char-class([range(97,97)]),\\char-class([range(110,110)]),\\char-class([range(103,103)]),\\char-class([range(101,101)]),\\char-class([range(40,40)]),\\char-class([range(49,49)]),\\char-class([range(54,54)]),\\char-class([range(48,48)]),\\char-class([range(44,44)]),\\char-class([range(49,49)]),\\char-class([range(54,54)]),\\char-class([range(48,48)]),\\char-class([range(41,41)]),\\char-class([range(44,44)]),\\char-class([range(114,114)]),\\char-class([range(97,97)]),\\char-class([range(110,110)]),\\char-class([range(103,103)]),\\char-class([range(101,101)]),\\char-class([range(40,40)]),\\char-class([range(53,53)]),\\char-class([range(55,55)]),\\char-class([range(54,54)]),\\char-class([range(48,48)]),\\char-class([range(44,44)]),\\char-class([range(53,53)]),\\char-class([range(55,55)]),\\char-class([range(54,54)]),\\char-class([range(48,48)]),\\char-class([range(41,41)]),\\char-class([range(44,44)]),\\char-class([range(114,114)]),\\char-class([range(97,97)]),\\char-class([range(110,110)]),\\char-class([range(103,103)]),\\char-class([range(101,101)]),\\char-class([range(40,40)]),\\char-class([range(56,56)]),\\char-class([range(49,49)]),\\char-class([range(57,57)]),\\char-class([range(50,50)]),\\char-class([range(44,44)]),\\char-class([range(56,56)]),\\char-class([range(50,50)]),\\char-class([range(48,48)]),\\char-class([range(50,50)]),\\char-class([range(41,41)]),\\char-class([range(44,44)]),\\char-class([range(114,114)]),\\char-class([range(97,97)]),\\char-class([range(110,110)]),\\char-class([range(103,103)]),\\char-class([range(101,101)]),\\char-class([range(40,40)]),\\char-class([range(56,56)]),\\char-class([range(50,50)]),\\char-class([range(51,51)]),\\char-class([range(57,57)]),\\char-class([range(44,44)]),\\char-class([range(56,56)]),\\char-class([range(50,50)]),\\char-class([range(51,51)]),\\char-class([range(57,57)]),\\char-class([range(41,41)]),\\char-class([range(44,44)]),\\char-class([range(114,114)]),\\char-class([range(97,97)]),\\char-class([range(110,110)]),\\char-class([range(103,103)]),\\char-class([range(101,101)]),\\char-class([range(40,40)]),\\char-class([range(56,56)]),\\char-class([range(50,50)]),\\char-class([range(56,56)]),\\char-class([range(55,55)]),\\char-class([range(44,44)]),\\char-class([range(56,56)]),\\char-class([range(50,50)]),\\char-class([range(56,56)]),\\char-class([range(55,55)]),\\char-class([range(41,41)]),\\char-class([range(44,44)]),\\char-class([range(114,114)]),\\char-class([range(97,97)]),\\char-class([range(110,110)]),\\char-class([range(103,103)]),\\char-class([range(101,101)]),\\char-class([range(40,40)]),\\char-class([range(49,49)]),\\char-class([range(50,50)]),\\char-class([range(50,50)]),\\char-class([range(56,56)]),\\char-class([range(56,56)]),\\char-class([range(44,44)]),\\char-class([range(49,49)]),\\char-class([range(50,50)]),\\char-class([range(50,50)]),\\char-class([range(56,56)]),\\char-class([range(56,56)]),\\char-class([range(41,41)]),\\char-class([range(93,93)]),\\char-class([range(41,41)]),\\char-class([range(41,41)])],{})", RascalValueFactory.Production); private static final IConstructor cHJvZChsYWJlbCgiZnVuY3Rpb24iLHNvcnQoIktpbmQiKSksW2xpdCgiZnVuY3Rpb24iKV0se30p = (IConstructor) _read("prod(label(\"function\",sort(\"Kind\")),[lit(\"function\")],{})", RascalValueFactory.Production); private static final IConstructor cmVndWxhcihzZXEoW1xjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSxvcHQoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKV0pKQ0000 = (IConstructor) _read("regular(seq([\\char-class([range(48,57)]),opt(\\char-class([range(48,57)]))]))", RascalValueFactory.Production); private static final IConstructor cHJvZChsYWJlbCgiZXhwcmVzc2lvbiIsc29ydCgiRnVuY3Rpb25EZWNsYXJhdGlvbiIpKSxbbGFiZWwoInRhZ3MiLHNvcnQoIlRhZ3MiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJ2aXNpYmlsaXR5Iixzb3J0KCJWaXNpYmlsaXR5IikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgic2lnbmF0dXJlIixzb3J0KCJTaWduYXR1cmUiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiPSIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgiZXhwcmVzc2lvbiIsc29ydCgiRXhwcmVzc2lvbiIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCI7IildLHt0YWcoIkZvbGRhYmxlIigpKSx0YWcoImJyZWFrYWJsZSIoIntleHByZXNzaW9ufSIpKX0p = (IConstructor) _read("prod(label(\"expression\",sort(\"FunctionDeclaration\")),[label(\"tags\",sort(\"Tags\")),layouts(\"LAYOUTLIST\"),label(\"visibility\",sort(\"Visibility\")),layouts(\"LAYOUTLIST\"),label(\"signature\",sort(\"Signature\")),layouts(\"LAYOUTLIST\"),lit(\"=\"),layouts(\"LAYOUTLIST\"),label(\"expression\",sort(\"Expression\")),layouts(\"LAYOUTLIST\"),lit(\";\")],{tag(\"Foldable\"()),tag(\"breakable\"(\"{expression}\"))})", RascalValueFactory.Production); @@ -3820,9 +3818,8 @@ protected IntegerList getFilteredParents(int childId) { private static final IConstructor cHJvZChsYWJlbCgibm9udGVybWluYWwiLHNvcnQoIlN5bSIpKSxbY29uZGl0aW9uYWwobGFiZWwoIm5vbnRlcm1pbmFsIixsZXgoIk5vbnRlcm1pbmFsIikpLHtcbm90LWZvbGxvdyhsaXQoIlsiKSl9KV0se30p = (IConstructor) _read("prod(label(\"nonterminal\",sort(\"Sym\")),[conditional(label(\"nonterminal\",lex(\"Nonterminal\")),{\\not-follow(lit(\"[\"))})],{})", RascalValueFactory.Production); private static final IConstructor cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJGdW5jdGlvblR5cGUiKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJzb3J0KFwiRnVuY3Rpb25UeXBlXCIpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihzb3J0KCJGdW5jdGlvblR5cGUiKSkpfSk00 = (IConstructor) _read("prod(label(\"$MetaHole\",sort(\"FunctionType\")),[\\char-class([range(0,0)]),lit(\"sort(\\\"FunctionType\\\")\"),lit(\":\"),iter(\\char-class([range(48,57)])),\\char-class([range(0,0)])],{tag(\"holeType\"(sort(\"FunctionType\")))})", RascalValueFactory.Production); private static final IConstructor cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJvbmUiKV0se30p = (IConstructor) _read("prod(keywords(\"RascalKeywords\"),[lit(\"one\")],{})", RascalValueFactory.Production); - private static final IConstructor cmVndWxhcihcaXRlci1zdGFyKGxleCgiUmVnRXhwIikpKQ0000 = (IConstructor) _read("regular(\\iter-star(lex(\"RegExp\")))", RascalValueFactory.Production); private static final IConstructor cHJvZChsaXQoInJlbmFtaW5nIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAzLDEwMyldKV0se30p = (IConstructor) _read("prod(lit(\"renaming\"),[\\char-class([range(114,114)]),\\char-class([range(101,101)]),\\char-class([range(110,110)]),\\char-class([range(97,97)]),\\char-class([range(109,109)]),\\char-class([range(105,105)]),\\char-class([range(110,110)]),\\char-class([range(103,103)])],{})", RascalValueFactory.Production); - private static final IConstructor cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJQYXR0ZXJuIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgiXFxpdGVyLXNlcHMoc29ydChcIlBhdHRlcm5cIiksW2xpdChcIixcIildKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoXGl0ZXItc2Vwcyhzb3J0KCJQYXR0ZXJuIiksW2xheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIiwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIildKSkpfSk00 = (IConstructor) _read("prod(label(\"$MetaHole\",sort(\"Pattern\")),[\\char-class([range(0,0)]),lit(\"\\\\iter-seps(sort(\\\"Pattern\\\"),[lit(\\\",\\\")])\"),lit(\":\"),iter(\\char-class([range(48,57)])),\\char-class([range(0,0)])],{tag(\"holeType\"(\\iter-seps(sort(\"Pattern\"),[layouts(\"LAYOUTLIST\"),lit(\",\"),layouts(\"LAYOUTLIST\")])))})", RascalValueFactory.Production); + private static final IConstructor cmVndWxhcihcaXRlci1zdGFyKGxleCgiUmVnRXhwIikpKQ0000 = (IConstructor) _read("regular(\\iter-star(lex(\"RegExp\")))", RascalValueFactory.Production); private static final IConstructor cHJvZChsYWJlbCgiZXhwcmVzc2lvbiIsc29ydCgiT3B0aW9uYWxFeHByZXNzaW9uIikpLFtsYWJlbCgiZXhwcmVzc2lvbiIsc29ydCgiRXhwcmVzc2lvbiIpKV0se30p = (IConstructor) _read("prod(label(\"expression\",sort(\"OptionalExpression\")),[label(\"expression\",sort(\"Expression\"))],{})", RascalValueFactory.Production); private static final IConstructor cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJtb2R1bGUiKV0se30p = (IConstructor) _read("prod(keywords(\"RascalKeywords\"),[lit(\"module\")],{})", RascalValueFactory.Production); private static final IConstructor cHJvZChsYWJlbCgibGlzdCIsc29ydCgiQ29tcHJlaGVuc2lvbiIpKSxbbGl0KCJbIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJyZXN1bHRzIixcaXRlci1zZXBzKHNvcnQoIkV4cHJlc3Npb24iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJ8IiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJnZW5lcmF0b3JzIixcaXRlci1zZXBzKHNvcnQoIkV4cHJlc3Npb24iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJdIildLHt0YWcoImJyZWFrYWJsZSIoIntyZXN1bHRzLGdlbmVyYXRvcnN9IikpfSk00 = (IConstructor) _read("prod(label(\"list\",sort(\"Comprehension\")),[lit(\"[\"),layouts(\"LAYOUTLIST\"),label(\"results\",\\iter-seps(sort(\"Expression\"),[layouts(\"LAYOUTLIST\"),lit(\",\"),layouts(\"LAYOUTLIST\")])),layouts(\"LAYOUTLIST\"),lit(\"|\"),layouts(\"LAYOUTLIST\"),label(\"generators\",\\iter-seps(sort(\"Expression\"),[layouts(\"LAYOUTLIST\"),lit(\",\"),layouts(\"LAYOUTLIST\")])),layouts(\"LAYOUTLIST\"),lit(\"]\")],{tag(\"breakable\"(\"{results,generators}\"))})", RascalValueFactory.Production); @@ -6617,37 +6614,37 @@ protected static class Range { protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJSYW5nZSIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoIlxcaXRlci1zdGFyKHNvcnQoXCJSYW5nZVwiKSkiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKFxpdGVyLXN0YXItc2Vwcyhzb3J0KCJSYW5nZSIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIildKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[3] = new ListStackNode(2991, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(2990, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[0] = new CharStackNode(2987, 0, new int[][]{{0,0}}, null, null); - tmp[4] = new CharStackNode(2992, 4, new int[][]{{0,0}}, null, null); - tmp[1] = new LiteralStackNode(2988, 1, cHJvZChsaXQoIlxcaXRlci1zdGFyKHNvcnQoXCJSYW5nZVwiKSkiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkyLDkyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NSw0NSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDgyLDgyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAzLDEwMyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {92,105,116,101,114,45,115,116,97,114,40,115,111,114,116,40,34,82,97,110,103,101,34,41,41}, null, null); - tmp[2] = new LiteralStackNode(2989, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[3] = new ListStackNode(3000, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(2999, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[0] = new CharStackNode(2996, 0, new int[][]{{0,0}}, null, null); + tmp[4] = new CharStackNode(3001, 4, new int[][]{{0,0}}, null, null); + tmp[1] = new LiteralStackNode(2997, 1, cHJvZChsaXQoIlxcaXRlci1zdGFyKHNvcnQoXCJSYW5nZVwiKSkiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkyLDkyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NSw0NSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDgyLDgyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAzLDEwMyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {92,105,116,101,114,45,115,116,97,114,40,115,111,114,116,40,34,82,97,110,103,101,34,41,41}, null, null); + tmp[2] = new LiteralStackNode(2998, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJSYW5nZSIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoIlxcaXRlci1zdGFyKHNvcnQoXCJSYW5nZVwiKSkiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKFxpdGVyLXN0YXItc2Vwcyhzb3J0KCJSYW5nZSIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIildKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJSYW5nZSIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJSYW5nZVwiKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoc29ydCgiUmFuZ2UiKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[0] = new CharStackNode(2998, 0, new int[][]{{0,0}}, null, null); - tmp[4] = new CharStackNode(3003, 4, new int[][]{{0,0}}, null, null); - tmp[3] = new ListStackNode(3002, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(3001, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[2] = new LiteralStackNode(3000, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[1] = new LiteralStackNode(2999, 1, cHJvZChsaXQoInNvcnQoXCJSYW5nZVwiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4Miw4MildKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMywxMDMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,82,97,110,103,101,34,41}, null, null); + tmp[0] = new CharStackNode(3007, 0, new int[][]{{0,0}}, null, null); + tmp[4] = new CharStackNode(3012, 4, new int[][]{{0,0}}, null, null); + tmp[3] = new ListStackNode(3011, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(3010, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[2] = new LiteralStackNode(3009, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[1] = new LiteralStackNode(3008, 1, cHJvZChsaXQoInNvcnQoXCJSYW5nZVwiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4Miw4MildKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMywxMDMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,82,97,110,103,101,34,41}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJSYW5nZSIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJSYW5nZVwiKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoc29ydCgiUmFuZ2UiKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiY2hhcmFjdGVyIixzb3J0KCJSYW5nZSIpKSxbbGFiZWwoImNoYXJhY3RlciIsbGV4KCJDaGFyIikpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new NonTerminalStackNode(3007, 0, "Char", null, null); + tmp[0] = new NonTerminalStackNode(3016, 0, "Char", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiY2hhcmFjdGVyIixzb3J0KCJSYW5nZSIpKSxbbGFiZWwoImNoYXJhY3RlciIsbGV4KCJDaGFyIikpXSx7fSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiZnJvbVRvIixzb3J0KCJSYW5nZSIpKSxbbGFiZWwoInN0YXJ0IixsZXgoIkNoYXIiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLSIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgiZW5kIixsZXgoIkNoYXIiKSldLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[0] = new NonTerminalStackNode(3011, 0, "Char", null, null); - tmp[4] = new NonTerminalStackNode(3016, 4, "Char", null, null); - tmp[2] = new LiteralStackNode(3014, 2, cHJvZChsaXQoIi0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ1LDQ1KV0pXSx7fSk00, new int[] {45}, null, null); - tmp[3] = new NonTerminalStackNode(3015, 3, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(3013, 1, "layouts_LAYOUTLIST", null, null); + tmp[0] = new NonTerminalStackNode(3020, 0, "Char", null, null); + tmp[4] = new NonTerminalStackNode(3025, 4, "Char", null, null); + tmp[2] = new LiteralStackNode(3023, 2, cHJvZChsaXQoIi0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ1LDQ1KV0pXSx7fSk00, new int[] {45}, null, null); + tmp[3] = new NonTerminalStackNode(3024, 3, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(3022, 1, "layouts_LAYOUTLIST", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiZnJvbVRvIixzb3J0KCJSYW5nZSIpKSxbbGFiZWwoInN0YXJ0IixsZXgoIkNoYXIiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLSIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgiZW5kIixsZXgoIkNoYXIiKSldLHt9KQ0000, tmp); } public static void init(ExpectBuilder builder){ @@ -6674,17 +6671,17 @@ protected static class OptionalComma { protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIk9wdGlvbmFsQ29tbWEiKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJzb3J0KFwiT3B0aW9uYWxDb21tYVwiKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIobGV4KCJPcHRpb25hbENvbW1hIikpKX0p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[1] = new LiteralStackNode(3035, 1, cHJvZChsaXQoInNvcnQoXCJPcHRpb25hbENvbW1hXCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDc5LDc5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTIsMTEyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNjcsNjcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOSwxMDkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOSwxMDkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {115,111,114,116,40,34,79,112,116,105,111,110,97,108,67,111,109,109,97,34,41}, null, null); - tmp[3] = new ListStackNode(3038, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(3037, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[2] = new LiteralStackNode(3036, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[4] = new CharStackNode(3039, 4, new int[][]{{0,0}}, null, null); - tmp[0] = new CharStackNode(3034, 0, new int[][]{{0,0}}, null, null); + tmp[1] = new LiteralStackNode(3044, 1, cHJvZChsaXQoInNvcnQoXCJPcHRpb25hbENvbW1hXCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDc5LDc5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTIsMTEyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNjcsNjcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOSwxMDkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOSwxMDkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {115,111,114,116,40,34,79,112,116,105,111,110,97,108,67,111,109,109,97,34,41}, null, null); + tmp[3] = new ListStackNode(3047, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(3046, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[2] = new LiteralStackNode(3045, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[4] = new CharStackNode(3048, 4, new int[][]{{0,0}}, null, null); + tmp[0] = new CharStackNode(3043, 0, new int[][]{{0,0}}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIk9wdGlvbmFsQ29tbWEiKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJzb3J0KFwiT3B0aW9uYWxDb21tYVwiKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIobGV4KCJPcHRpb25hbENvbW1hIikpKX0p, tmp); } protected static final void _init_cHJvZChsYWJlbCgiZGVmYXVsdCIsbGV4KCJPcHRpb25hbENvbW1hIikpLFtvcHQobGl0KCIsIikpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new OptionalStackNode(3044, 0, cmVndWxhcihvcHQobGl0KCIsIikpKQ0000, new LiteralStackNode(3043, 0, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), null, null); + tmp[0] = new OptionalStackNode(3053, 0, cmVndWxhcihvcHQobGl0KCIsIikpKQ0000, new LiteralStackNode(3052, 0, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiZGVmYXVsdCIsbGV4KCJPcHRpb25hbENvbW1hIikpLFtvcHQobGl0KCIsIikpXSx7fSk00, tmp); } public static void init(ExpectBuilder builder){ @@ -6707,9 +6704,9 @@ protected static class start__Command { protected static final void _init_cHJvZChzdGFydChzb3J0KCJDb21tYW5kIikpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInRvcCIsc29ydCgiQ29tbWFuZCIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[3]; - tmp[2] = new NonTerminalStackNode(3052, 2, "layouts_LAYOUTLIST", null, null); - tmp[0] = new NonTerminalStackNode(3049, 0, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(3050, 1, "Command", null, null); + tmp[2] = new NonTerminalStackNode(3061, 2, "layouts_LAYOUTLIST", null, null); + tmp[0] = new NonTerminalStackNode(3058, 0, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(3059, 1, "Command", null, null); builder.addAlternative(RascalParser.cHJvZChzdGFydChzb3J0KCJDb21tYW5kIikpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInRvcCIsc29ydCgiQ29tbWFuZCIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIildLHt9KQ0000, tmp); } public static void init(ExpectBuilder builder){ @@ -6730,18 +6727,18 @@ protected static class PrePathChars { protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIlByZVBhdGhDaGFycyIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJQcmVQYXRoQ2hhcnNcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKGxleCgiUHJlUGF0aENoYXJzIikpKX0p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[1] = new LiteralStackNode(3057, 1, cHJvZChsaXQoInNvcnQoXCJQcmVQYXRoQ2hhcnNcIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODAsODApXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDgwLDgwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA0LDEwNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNjcsNjcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNCwxMDQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {115,111,114,116,40,34,80,114,101,80,97,116,104,67,104,97,114,115,34,41}, null, null); - tmp[3] = new ListStackNode(3060, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(3059, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[0] = new CharStackNode(3056, 0, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(3058, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[4] = new CharStackNode(3061, 4, new int[][]{{0,0}}, null, null); + tmp[1] = new LiteralStackNode(3066, 1, cHJvZChsaXQoInNvcnQoXCJQcmVQYXRoQ2hhcnNcIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODAsODApXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDgwLDgwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA0LDEwNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNjcsNjcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNCwxMDQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {115,111,114,116,40,34,80,114,101,80,97,116,104,67,104,97,114,115,34,41}, null, null); + tmp[3] = new ListStackNode(3069, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(3068, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[0] = new CharStackNode(3065, 0, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(3067, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[4] = new CharStackNode(3070, 4, new int[][]{{0,0}}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIlByZVBhdGhDaGFycyIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJQcmVQYXRoQ2hhcnNcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKGxleCgiUHJlUGF0aENoYXJzIikpKX0p, tmp); } protected static final void _init_cHJvZChsZXgoIlByZVBhdGhDaGFycyIpLFtsZXgoIlVSTENoYXJzIiksbGl0KCJcPCIpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[2]; - tmp[1] = new LiteralStackNode(3065, 1, cHJvZChsaXQoIlw8IiksW1xjaGFyLWNsYXNzKFtyYW5nZSg2MCw2MCldKV0se30p, new int[] {60}, null, null); - tmp[0] = new NonTerminalStackNode(3064, 0, "URLChars", null, null); + tmp[1] = new LiteralStackNode(3074, 1, cHJvZChsaXQoIlw8IiksW1xjaGFyLWNsYXNzKFtyYW5nZSg2MCw2MCldKV0se30p, new int[] {60}, null, null); + tmp[0] = new NonTerminalStackNode(3073, 0, "URLChars", null, null); builder.addAlternative(RascalParser.cHJvZChsZXgoIlByZVBhdGhDaGFycyIpLFtsZXgoIlVSTENoYXJzIiksbGl0KCJcPCIpXSx7fSk00, tmp); } public static void init(ExpectBuilder builder){ @@ -6764,19 +6761,19 @@ protected static class StringConstant { protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIlN0cmluZ0NvbnN0YW50IikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIlN0cmluZ0NvbnN0YW50XCIpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihsZXgoIlN0cmluZ0NvbnN0YW50IikpKX0p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[3] = new ListStackNode(3151, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(3150, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[4] = new CharStackNode(3152, 4, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(3149, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[1] = new LiteralStackNode(3148, 1, cHJvZChsaXQoInNvcnQoXCJTdHJpbmdDb25zdGFudFwiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4Myw4MyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAzLDEwMyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNjcsNjcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {115,111,114,116,40,34,83,116,114,105,110,103,67,111,110,115,116,97,110,116,34,41}, null, null); - tmp[0] = new CharStackNode(3147, 0, new int[][]{{0,0}}, null, null); + tmp[3] = new ListStackNode(3141, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(3140, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[4] = new CharStackNode(3142, 4, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(3139, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[1] = new LiteralStackNode(3138, 1, cHJvZChsaXQoInNvcnQoXCJTdHJpbmdDb25zdGFudFwiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4Myw4MyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAzLDEwMyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNjcsNjcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {115,111,114,116,40,34,83,116,114,105,110,103,67,111,110,115,116,97,110,116,34,41}, null, null); + tmp[0] = new CharStackNode(3137, 0, new int[][]{{0,0}}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIlN0cmluZ0NvbnN0YW50IikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIlN0cmluZ0NvbnN0YW50XCIpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihsZXgoIlN0cmluZ0NvbnN0YW50IikpKX0p, tmp); } protected static final void _init_cHJvZChsZXgoIlN0cmluZ0NvbnN0YW50IiksW2xpdCgiXCIiKSxsYWJlbCgiY2hhcnMiLFxpdGVyLXN0YXIobGV4KCJTdHJpbmdDaGFyYWN0ZXIiKSkpLGxpdCgiXCIiKV0se3RhZygiY2F0ZWdvcnkiKCJzdHJpbmciKSl9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[3]; - tmp[2] = new LiteralStackNode(3159, 2, cHJvZChsaXQoIlwiIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKV0se30p, new int[] {34}, null, null); - tmp[0] = new LiteralStackNode(3155, 0, cHJvZChsaXQoIlwiIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKV0se30p, new int[] {34}, null, null); - tmp[1] = new ListStackNode(3157, 1, cmVndWxhcihcaXRlci1zdGFyKGxleCgiU3RyaW5nQ2hhcmFjdGVyIikpKQ0000, new NonTerminalStackNode(3156, 0, "StringCharacter", null, null), false, null, null); + tmp[2] = new LiteralStackNode(3149, 2, cHJvZChsaXQoIlwiIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKV0se30p, new int[] {34}, null, null); + tmp[0] = new LiteralStackNode(3145, 0, cHJvZChsaXQoIlwiIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKV0se30p, new int[] {34}, null, null); + tmp[1] = new ListStackNode(3147, 1, cmVndWxhcihcaXRlci1zdGFyKGxleCgiU3RyaW5nQ2hhcmFjdGVyIikpKQ0000, new NonTerminalStackNode(3146, 0, "StringCharacter", null, null), false, null, null); builder.addAlternative(RascalParser.cHJvZChsZXgoIlN0cmluZ0NvbnN0YW50IiksW2xpdCgiXCIiKSxsYWJlbCgiY2hhcnMiLFxpdGVyLXN0YXIobGV4KCJTdHJpbmdDaGFyYWN0ZXIiKSkpLGxpdCgiXCIiKV0se3RhZygiY2F0ZWdvcnkiKCJzdHJpbmciKSl9KQ0000, tmp); } public static void init(ExpectBuilder builder){ @@ -6799,37 +6796,37 @@ protected static class Variable { protected static final void _init_cHJvZChsYWJlbCgidW5Jbml0aWFsaXplZCIsc29ydCgiVmFyaWFibGUiKSksW2xhYmVsKCJuYW1lIixsZXgoIk5hbWUiKSldLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new NonTerminalStackNode(3234, 0, "Name", null, null); + tmp[0] = new NonTerminalStackNode(3224, 0, "Name", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgidW5Jbml0aWFsaXplZCIsc29ydCgiVmFyaWFibGUiKSksW2xhYmVsKCJuYW1lIixsZXgoIk5hbWUiKSldLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgiaW5pdGlhbGl6ZWQiLHNvcnQoIlZhcmlhYmxlIikpLFtsYWJlbCgibmFtZSIsbGV4KCJOYW1lIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIj0iKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImluaXRpYWwiLHNvcnQoIkV4cHJlc3Npb24iKSldLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[4] = new NonTerminalStackNode(3243, 4, "Expression", null, null); - tmp[0] = new NonTerminalStackNode(3238, 0, "Name", null, null); - tmp[1] = new NonTerminalStackNode(3240, 1, "layouts_LAYOUTLIST", null, null); - tmp[2] = new LiteralStackNode(3241, 2, cHJvZChsaXQoIj0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDYxLDYxKV0pXSx7fSk00, new int[] {61}, null, null); - tmp[3] = new NonTerminalStackNode(3242, 3, "layouts_LAYOUTLIST", null, null); + tmp[4] = new NonTerminalStackNode(3233, 4, "Expression", null, null); + tmp[0] = new NonTerminalStackNode(3228, 0, "Name", null, null); + tmp[1] = new NonTerminalStackNode(3230, 1, "layouts_LAYOUTLIST", null, null); + tmp[2] = new LiteralStackNode(3231, 2, cHJvZChsaXQoIj0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDYxLDYxKV0pXSx7fSk00, new int[] {61}, null, null); + tmp[3] = new NonTerminalStackNode(3232, 3, "layouts_LAYOUTLIST", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiaW5pdGlhbGl6ZWQiLHNvcnQoIlZhcmlhYmxlIikpLFtsYWJlbCgibmFtZSIsbGV4KCJOYW1lIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIj0iKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImluaXRpYWwiLHNvcnQoIkV4cHJlc3Npb24iKSldLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJWYXJpYWJsZSIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoIlxcaXRlci1zZXBzKHNvcnQoXCJWYXJpYWJsZVwiKSxbbGl0KFwiLFwiKV0pIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihcaXRlci1zZXBzKHNvcnQoIlZhcmlhYmxlIiksW2xheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIiwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIildKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[3] = new ListStackNode(3251, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(3250, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[1] = new LiteralStackNode(3248, 1, cHJvZChsaXQoIlxcaXRlci1zZXBzKHNvcnQoXCJWYXJpYWJsZVwiKSxbbGl0KFwiLFwiKV0pIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg5Miw5MildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDUsNDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDg2LDg2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk4LDk4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5MSw5MSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NCw0NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Myw5MyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {92,105,116,101,114,45,115,101,112,115,40,115,111,114,116,40,34,86,97,114,105,97,98,108,101,34,41,44,91,108,105,116,40,34,44,34,41,93,41}, null, null); - tmp[4] = new CharStackNode(3252, 4, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(3249, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[0] = new CharStackNode(3247, 0, new int[][]{{0,0}}, null, null); + tmp[3] = new ListStackNode(3241, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(3240, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[1] = new LiteralStackNode(3238, 1, cHJvZChsaXQoIlxcaXRlci1zZXBzKHNvcnQoXCJWYXJpYWJsZVwiKSxbbGl0KFwiLFwiKV0pIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg5Miw5MildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDUsNDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDg2LDg2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk4LDk4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5MSw5MSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NCw0NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Myw5MyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {92,105,116,101,114,45,115,101,112,115,40,115,111,114,116,40,34,86,97,114,105,97,98,108,101,34,41,44,91,108,105,116,40,34,44,34,41,93,41}, null, null); + tmp[4] = new CharStackNode(3242, 4, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(3239, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[0] = new CharStackNode(3237, 0, new int[][]{{0,0}}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJWYXJpYWJsZSIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoIlxcaXRlci1zZXBzKHNvcnQoXCJWYXJpYWJsZVwiKSxbbGl0KFwiLFwiKV0pIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihcaXRlci1zZXBzKHNvcnQoIlZhcmlhYmxlIiksW2xheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIiwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIildKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJWYXJpYWJsZSIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJWYXJpYWJsZVwiKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoc29ydCgiVmFyaWFibGUiKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[3] = new ListStackNode(3264, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(3263, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[1] = new LiteralStackNode(3261, 1, cHJvZChsaXQoInNvcnQoXCJWYXJpYWJsZVwiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4Niw4NildKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5OCw5OCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {115,111,114,116,40,34,86,97,114,105,97,98,108,101,34,41}, null, null); - tmp[4] = new CharStackNode(3265, 4, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(3262, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[0] = new CharStackNode(3260, 0, new int[][]{{0,0}}, null, null); + tmp[3] = new ListStackNode(3254, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(3253, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[1] = new LiteralStackNode(3251, 1, cHJvZChsaXQoInNvcnQoXCJWYXJpYWJsZVwiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4Niw4NildKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5OCw5OCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {115,111,114,116,40,34,86,97,114,105,97,98,108,101,34,41}, null, null); + tmp[4] = new CharStackNode(3255, 4, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(3252, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[0] = new CharStackNode(3250, 0, new int[][]{{0,0}}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJWYXJpYWJsZSIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJWYXJpYWJsZVwiKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoc29ydCgiVmFyaWFibGUiKSkpfSk00, tmp); } public static void init(ExpectBuilder builder){ @@ -6856,45 +6853,45 @@ protected static class TypeArg { protected static final void _init_cHJvZChsYWJlbCgiZGVmYXVsdCIsc29ydCgiVHlwZUFyZyIpKSxbbGFiZWwoInR5cGUiLHNvcnQoIlR5cGUiKSldLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new NonTerminalStackNode(3375, 0, "Type", null, null); + tmp[0] = new NonTerminalStackNode(3365, 0, "Type", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiZGVmYXVsdCIsc29ydCgiVHlwZUFyZyIpKSxbbGFiZWwoInR5cGUiLHNvcnQoIlR5cGUiKSldLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJUeXBlQXJnIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgiXFxpdGVyLXNlcHMoc29ydChcIlR5cGVBcmdcIiksW2xpdChcIixcIildKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoXGl0ZXItc2Vwcyhzb3J0KCJUeXBlQXJnIiksW2xheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIiwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIildKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[4] = new CharStackNode(3384, 4, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(3381, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[0] = new CharStackNode(3379, 0, new int[][]{{0,0}}, null, null); - tmp[3] = new ListStackNode(3383, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(3382, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[1] = new LiteralStackNode(3380, 1, cHJvZChsaXQoIlxcaXRlci1zZXBzKHNvcnQoXCJUeXBlQXJnXCIpLFtsaXQoXCIsXCIpXSkiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkyLDkyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NSw0NSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEyLDExMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODQsODQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEyMSwxMjEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDY1LDY1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDMsMTAzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5MSw5MSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NCw0NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Myw5MyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {92,105,116,101,114,45,115,101,112,115,40,115,111,114,116,40,34,84,121,112,101,65,114,103,34,41,44,91,108,105,116,40,34,44,34,41,93,41}, null, null); + tmp[4] = new CharStackNode(3374, 4, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(3371, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[0] = new CharStackNode(3369, 0, new int[][]{{0,0}}, null, null); + tmp[3] = new ListStackNode(3373, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(3372, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[1] = new LiteralStackNode(3370, 1, cHJvZChsaXQoIlxcaXRlci1zZXBzKHNvcnQoXCJUeXBlQXJnXCIpLFtsaXQoXCIsXCIpXSkiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkyLDkyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NSw0NSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEyLDExMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODQsODQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEyMSwxMjEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDY1LDY1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDMsMTAzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5MSw5MSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NCw0NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Myw5MyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {92,105,116,101,114,45,115,101,112,115,40,115,111,114,116,40,34,84,121,112,101,65,114,103,34,41,44,91,108,105,116,40,34,44,34,41,93,41}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJUeXBlQXJnIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgiXFxpdGVyLXNlcHMoc29ydChcIlR5cGVBcmdcIiksW2xpdChcIixcIildKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoXGl0ZXItc2Vwcyhzb3J0KCJUeXBlQXJnIiksW2xheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIiwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIildKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJUeXBlQXJnIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIlR5cGVBcmdcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKHNvcnQoIlR5cGVBcmciKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[4] = new CharStackNode(3397, 4, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(3394, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[0] = new CharStackNode(3392, 0, new int[][]{{0,0}}, null, null); - tmp[3] = new ListStackNode(3396, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(3395, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[1] = new LiteralStackNode(3393, 1, cHJvZChsaXQoInNvcnQoXCJUeXBlQXJnXCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDg0LDg0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMjEsMTIxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTIsMTEyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg2NSw2NSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAzLDEwMyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {115,111,114,116,40,34,84,121,112,101,65,114,103,34,41}, null, null); + tmp[4] = new CharStackNode(3387, 4, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(3384, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[0] = new CharStackNode(3382, 0, new int[][]{{0,0}}, null, null); + tmp[3] = new ListStackNode(3386, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(3385, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[1] = new LiteralStackNode(3383, 1, cHJvZChsaXQoInNvcnQoXCJUeXBlQXJnXCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDg0LDg0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMjEsMTIxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTIsMTEyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg2NSw2NSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAzLDEwMyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {115,111,114,116,40,34,84,121,112,101,65,114,103,34,41}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJUeXBlQXJnIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIlR5cGVBcmdcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKHNvcnQoIlR5cGVBcmciKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgibmFtZWQiLHNvcnQoIlR5cGVBcmciKSksW2xhYmVsKCJ0eXBlIixzb3J0KCJUeXBlIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgibmFtZSIsbGV4KCJOYW1lIikpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[3]; - tmp[2] = new NonTerminalStackNode(3404, 2, "Name", null, null); - tmp[0] = new NonTerminalStackNode(3401, 0, "Type", null, null); - tmp[1] = new NonTerminalStackNode(3403, 1, "layouts_LAYOUTLIST", null, null); + tmp[2] = new NonTerminalStackNode(3394, 2, "Name", null, null); + tmp[0] = new NonTerminalStackNode(3391, 0, "Type", null, null); + tmp[1] = new NonTerminalStackNode(3393, 1, "layouts_LAYOUTLIST", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgibmFtZWQiLHNvcnQoIlR5cGVBcmciKSksW2xhYmVsKCJ0eXBlIixzb3J0KCJUeXBlIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgibmFtZSIsbGV4KCJOYW1lIikpXSx7fSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJUeXBlQXJnIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgiXFxpdGVyLXN0YXItc2Vwcyhzb3J0KFwiVHlwZUFyZ1wiKSxbbGl0KFwiLFwiKV0pIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihcaXRlci1zdGFyLXNlcHMoc29ydCgiVHlwZUFyZyIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpXSkpKX0p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[4] = new CharStackNode(3413, 4, new int[][]{{0,0}}, null, null); - tmp[3] = new ListStackNode(3412, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(3411, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[2] = new LiteralStackNode(3410, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[0] = new CharStackNode(3408, 0, new int[][]{{0,0}}, null, null); - tmp[1] = new LiteralStackNode(3409, 1, cHJvZChsaXQoIlxcaXRlci1zdGFyLXNlcHMoc29ydChcIlR5cGVBcmdcIiksW2xpdChcIixcIildKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoOTIsOTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ1LDQ1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDUsNDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDg0LDg0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMjEsMTIxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTIsMTEyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg2NSw2NSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAzLDEwMyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NCw0NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTEsOTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDQsNDQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTMsOTMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {92,105,116,101,114,45,115,116,97,114,45,115,101,112,115,40,115,111,114,116,40,34,84,121,112,101,65,114,103,34,41,44,91,108,105,116,40,34,44,34,41,93,41}, null, null); + tmp[4] = new CharStackNode(3403, 4, new int[][]{{0,0}}, null, null); + tmp[3] = new ListStackNode(3402, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(3401, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[2] = new LiteralStackNode(3400, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[0] = new CharStackNode(3398, 0, new int[][]{{0,0}}, null, null); + tmp[1] = new LiteralStackNode(3399, 1, cHJvZChsaXQoIlxcaXRlci1zdGFyLXNlcHMoc29ydChcIlR5cGVBcmdcIiksW2xpdChcIixcIildKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoOTIsOTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ1LDQ1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDUsNDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDg0LDg0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMjEsMTIxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTIsMTEyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg2NSw2NSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAzLDEwMyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NCw0NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTEsOTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDQsNDQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTMsOTMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {92,105,116,101,114,45,115,116,97,114,45,115,101,112,115,40,115,111,114,116,40,34,84,121,112,101,65,114,103,34,41,44,91,108,105,116,40,34,44,34,41,93,41}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJUeXBlQXJnIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgiXFxpdGVyLXN0YXItc2Vwcyhzb3J0KFwiVHlwZUFyZ1wiKSxbbGl0KFwiLFwiKV0pIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihcaXRlci1zdGFyLXNlcHMoc29ydCgiVHlwZUFyZyIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpXSkpKX0p, tmp); } public static void init(ExpectBuilder builder){ @@ -6923,25 +6920,25 @@ protected static class Bound { protected static final void _init_cHJvZChsYWJlbCgiZGVmYXVsdCIsc29ydCgiQm91bmQiKSksW2xpdCgiOyIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgiZXhwcmVzc2lvbiIsc29ydCgiRXhwcmVzc2lvbiIpKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[3]; - tmp[1] = new NonTerminalStackNode(3700, 1, "layouts_LAYOUTLIST", null, null); - tmp[2] = new NonTerminalStackNode(3701, 2, "Expression", null, null); - tmp[0] = new LiteralStackNode(3699, 0, cHJvZChsaXQoIjsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU5LDU5KV0pXSx7fSk00, new int[] {59}, null, null); + tmp[1] = new NonTerminalStackNode(3690, 1, "layouts_LAYOUTLIST", null, null); + tmp[2] = new NonTerminalStackNode(3691, 2, "Expression", null, null); + tmp[0] = new LiteralStackNode(3689, 0, cHJvZChsaXQoIjsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU5LDU5KV0pXSx7fSk00, new int[] {59}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiZGVmYXVsdCIsc29ydCgiQm91bmQiKSksW2xpdCgiOyIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgiZXhwcmVzc2lvbiIsc29ydCgiRXhwcmVzc2lvbiIpKV0se30p, tmp); } protected static final void _init_cHJvZChsYWJlbCgiZW1wdHkiLHNvcnQoIkJvdW5kIikpLFtdLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new EpsilonStackNode(3704, 0); + tmp[0] = new EpsilonStackNode(3694, 0); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiZW1wdHkiLHNvcnQoIkJvdW5kIikpLFtdLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJCb3VuZCIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJCb3VuZFwiKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoc29ydCgiQm91bmQiKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[0] = new CharStackNode(3707, 0, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(3709, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[4] = new CharStackNode(3712, 4, new int[][]{{0,0}}, null, null); - tmp[1] = new LiteralStackNode(3708, 1, cHJvZChsaXQoInNvcnQoXCJCb3VuZFwiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg2Niw2NildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE3LDExNyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAwLDEwMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {115,111,114,116,40,34,66,111,117,110,100,34,41}, null, null); - tmp[3] = new ListStackNode(3711, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(3710, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[0] = new CharStackNode(3697, 0, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(3699, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[4] = new CharStackNode(3702, 4, new int[][]{{0,0}}, null, null); + tmp[1] = new LiteralStackNode(3698, 1, cHJvZChsaXQoInNvcnQoXCJCb3VuZFwiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg2Niw2NildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE3LDExNyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAwLDEwMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {115,111,114,116,40,34,66,111,117,110,100,34,41}, null, null); + tmp[3] = new ListStackNode(3701, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(3700, 0, new int[][]{{48,57}}, null, null), true, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJCb3VuZCIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJCb3VuZFwiKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoc29ydCgiQm91bmQiKSkpfSk00, tmp); } public static void init(ExpectBuilder builder){ @@ -6966,32 +6963,32 @@ protected static class DateAndTime { protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIkRhdGVBbmRUaW1lIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIkRhdGVBbmRUaW1lXCIpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihsZXgoIkRhdGVBbmRUaW1lIikpKX0p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[3] = new ListStackNode(3746, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(3745, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[1] = new LiteralStackNode(3743, 1, cHJvZChsaXQoInNvcnQoXCJEYXRlQW5kVGltZVwiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg2OCw2OCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDY1LDY1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDAsMTAwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4NCw4NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {115,111,114,116,40,34,68,97,116,101,65,110,100,84,105,109,101,34,41}, null, null); - tmp[4] = new CharStackNode(3747, 4, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(3744, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[0] = new CharStackNode(3742, 0, new int[][]{{0,0}}, null, null); + tmp[3] = new ListStackNode(3736, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(3735, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[1] = new LiteralStackNode(3733, 1, cHJvZChsaXQoInNvcnQoXCJEYXRlQW5kVGltZVwiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg2OCw2OCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDY1LDY1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDAsMTAwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4NCw4NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {115,111,114,116,40,34,68,97,116,101,65,110,100,84,105,109,101,34,41}, null, null); + tmp[4] = new CharStackNode(3737, 4, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(3734, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[0] = new CharStackNode(3732, 0, new int[][]{{0,0}}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIkRhdGVBbmRUaW1lIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIkRhdGVBbmRUaW1lXCIpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihsZXgoIkRhdGVBbmRUaW1lIikpKX0p, tmp); } protected static final void _init_cHJvZChsZXgoIkRhdGVBbmRUaW1lIiksW2xpdCgiJCIpLGxleCgiRGF0ZVBhcnQiKSxsaXQoIlQiKSxsZXgoIlRpbWVQYXJ0Tm9UWiIpLGxleCgiVGltZVpvbmVQYXJ0IiksbGl0KCIkIildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[6]; - tmp[3] = new NonTerminalStackNode(3753, 3, "TimePartNoTZ", null, null); - tmp[4] = new NonTerminalStackNode(3754, 4, "TimeZonePart", null, null); - tmp[2] = new LiteralStackNode(3752, 2, cHJvZChsaXQoIlQiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDg0LDg0KV0pXSx7fSk00, new int[] {84}, null, null); - tmp[0] = new LiteralStackNode(3750, 0, cHJvZChsaXQoIiQiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDM2LDM2KV0pXSx7fSk00, new int[] {36}, null, null); - tmp[5] = new LiteralStackNode(3755, 5, cHJvZChsaXQoIiQiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDM2LDM2KV0pXSx7fSk00, new int[] {36}, null, null); - tmp[1] = new NonTerminalStackNode(3751, 1, "DatePart", null, null); + tmp[3] = new NonTerminalStackNode(3743, 3, "TimePartNoTZ", null, null); + tmp[4] = new NonTerminalStackNode(3744, 4, "TimeZonePart", null, null); + tmp[2] = new LiteralStackNode(3742, 2, cHJvZChsaXQoIlQiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDg0LDg0KV0pXSx7fSk00, new int[] {84}, null, null); + tmp[0] = new LiteralStackNode(3740, 0, cHJvZChsaXQoIiQiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDM2LDM2KV0pXSx7fSk00, new int[] {36}, null, null); + tmp[5] = new LiteralStackNode(3745, 5, cHJvZChsaXQoIiQiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDM2LDM2KV0pXSx7fSk00, new int[] {36}, null, null); + tmp[1] = new NonTerminalStackNode(3741, 1, "DatePart", null, null); builder.addAlternative(RascalParser.cHJvZChsZXgoIkRhdGVBbmRUaW1lIiksW2xpdCgiJCIpLGxleCgiRGF0ZVBhcnQiKSxsaXQoIlQiKSxsZXgoIlRpbWVQYXJ0Tm9UWiIpLGxleCgiVGltZVpvbmVQYXJ0IiksbGl0KCIkIildLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsZXgoIkRhdGVBbmRUaW1lIiksW2xpdCgiJCIpLGxleCgiRGF0ZVBhcnQiKSxsaXQoIlQiKSxjb25kaXRpb25hbChsZXgoIlRpbWVQYXJ0Tm9UWiIpLHtcbm90LWZvbGxvdyhcY2hhci1jbGFzcyhbcmFuZ2UoNDMsNDMpLHJhbmdlKDQ1LDQ1KV0pKX0pLGxpdCgiJCIpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[1] = new NonTerminalStackNode(3758, 1, "DatePart", null, null); - tmp[3] = new NonTerminalStackNode(3762, 3, "TimePartNoTZ", null, new ICompletionFilter[] {new CharFollowRestriction(new int[][]{{43,43},{45,45}})}); - tmp[4] = new LiteralStackNode(3763, 4, cHJvZChsaXQoIiQiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDM2LDM2KV0pXSx7fSk00, new int[] {36}, null, null); - tmp[0] = new LiteralStackNode(3757, 0, cHJvZChsaXQoIiQiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDM2LDM2KV0pXSx7fSk00, new int[] {36}, null, null); - tmp[2] = new LiteralStackNode(3759, 2, cHJvZChsaXQoIlQiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDg0LDg0KV0pXSx7fSk00, new int[] {84}, null, null); + tmp[1] = new NonTerminalStackNode(3748, 1, "DatePart", null, null); + tmp[3] = new NonTerminalStackNode(3752, 3, "TimePartNoTZ", null, new ICompletionFilter[] {new CharFollowRestriction(new int[][]{{43,43},{45,45}})}); + tmp[4] = new LiteralStackNode(3753, 4, cHJvZChsaXQoIiQiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDM2LDM2KV0pXSx7fSk00, new int[] {36}, null, null); + tmp[0] = new LiteralStackNode(3747, 0, cHJvZChsaXQoIiQiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDM2LDM2KV0pXSx7fSk00, new int[] {36}, null, null); + tmp[2] = new LiteralStackNode(3749, 2, cHJvZChsaXQoIlQiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDg0LDg0KV0pXSx7fSk00, new int[] {84}, null, null); builder.addAlternative(RascalParser.cHJvZChsZXgoIkRhdGVBbmRUaW1lIiksW2xpdCgiJCIpLGxleCgiRGF0ZVBhcnQiKSxsaXQoIlQiKSxjb25kaXRpb25hbChsZXgoIlRpbWVQYXJ0Tm9UWiIpLHtcbm90LWZvbGxvdyhcY2hhci1jbGFzcyhbcmFuZ2UoNDMsNDMpLHJhbmdlKDQ1LDQ1KV0pKX0pLGxpdCgiJCIpXSx7fSk00, tmp); } public static void init(ExpectBuilder builder){ @@ -7016,37 +7013,37 @@ protected static class StringLiteral { protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJTdHJpbmdMaXRlcmFsIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIlN0cmluZ0xpdGVyYWxcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKHNvcnQoIlN0cmluZ0xpdGVyYWwiKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[1] = new LiteralStackNode(3813, 1, cHJvZChsaXQoInNvcnQoXCJTdHJpbmdMaXRlcmFsXCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDgzLDgzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDMsMTAzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg3Niw3NildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,83,116,114,105,110,103,76,105,116,101,114,97,108,34,41}, null, null); - tmp[3] = new ListStackNode(3816, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(3815, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[4] = new CharStackNode(3817, 4, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(3814, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[0] = new CharStackNode(3812, 0, new int[][]{{0,0}}, null, null); + tmp[1] = new LiteralStackNode(3803, 1, cHJvZChsaXQoInNvcnQoXCJTdHJpbmdMaXRlcmFsXCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDgzLDgzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDMsMTAzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg3Niw3NildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,83,116,114,105,110,103,76,105,116,101,114,97,108,34,41}, null, null); + tmp[3] = new ListStackNode(3806, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(3805, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[4] = new CharStackNode(3807, 4, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(3804, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[0] = new CharStackNode(3802, 0, new int[][]{{0,0}}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJTdHJpbmdMaXRlcmFsIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIlN0cmluZ0xpdGVyYWxcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKHNvcnQoIlN0cmluZ0xpdGVyYWwiKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgibm9uSW50ZXJwb2xhdGVkIixzb3J0KCJTdHJpbmdMaXRlcmFsIikpLFtsYWJlbCgiY29uc3RhbnQiLGxleCgiU3RyaW5nQ29uc3RhbnQiKSldLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new NonTerminalStackNode(3821, 0, "StringConstant", null, null); + tmp[0] = new NonTerminalStackNode(3811, 0, "StringConstant", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgibm9uSW50ZXJwb2xhdGVkIixzb3J0KCJTdHJpbmdMaXRlcmFsIikpLFtsYWJlbCgiY29uc3RhbnQiLGxleCgiU3RyaW5nQ29uc3RhbnQiKSldLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgiaW50ZXJwb2xhdGVkIixzb3J0KCJTdHJpbmdMaXRlcmFsIikpLFtsYWJlbCgicHJlIixsZXgoIlByZVN0cmluZ0NoYXJzIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgiZXhwcmVzc2lvbiIsc29ydCgiRXhwcmVzc2lvbiIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInRhaWwiLHNvcnQoIlN0cmluZ1RhaWwiKSldLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[3] = new NonTerminalStackNode(3830, 3, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(3827, 1, "layouts_LAYOUTLIST", null, null); - tmp[4] = new NonTerminalStackNode(3831, 4, "StringTail", null, null); - tmp[0] = new NonTerminalStackNode(3825, 0, "PreStringChars", null, null); - tmp[2] = new NonTerminalStackNode(3828, 2, "Expression", null, null); + tmp[3] = new NonTerminalStackNode(3820, 3, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(3817, 1, "layouts_LAYOUTLIST", null, null); + tmp[4] = new NonTerminalStackNode(3821, 4, "StringTail", null, null); + tmp[0] = new NonTerminalStackNode(3815, 0, "PreStringChars", null, null); + tmp[2] = new NonTerminalStackNode(3818, 2, "Expression", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiaW50ZXJwb2xhdGVkIixzb3J0KCJTdHJpbmdMaXRlcmFsIikpLFtsYWJlbCgicHJlIixsZXgoIlByZVN0cmluZ0NoYXJzIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgiZXhwcmVzc2lvbiIsc29ydCgiRXhwcmVzc2lvbiIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInRhaWwiLHNvcnQoIlN0cmluZ1RhaWwiKSldLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgidGVtcGxhdGUiLHNvcnQoIlN0cmluZ0xpdGVyYWwiKSksW2xhYmVsKCJwcmUiLGxleCgiUHJlU3RyaW5nQ2hhcnMiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJ0ZW1wbGF0ZSIsc29ydCgiU3RyaW5nVGVtcGxhdGUiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJ0YWlsIixzb3J0KCJTdHJpbmdUYWlsIikpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[0] = new NonTerminalStackNode(3835, 0, "PreStringChars", null, null); - tmp[4] = new NonTerminalStackNode(3841, 4, "StringTail", null, null); - tmp[2] = new NonTerminalStackNode(3838, 2, "StringTemplate", null, null); - tmp[3] = new NonTerminalStackNode(3840, 3, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(3837, 1, "layouts_LAYOUTLIST", null, null); + tmp[0] = new NonTerminalStackNode(3825, 0, "PreStringChars", null, null); + tmp[4] = new NonTerminalStackNode(3831, 4, "StringTail", null, null); + tmp[2] = new NonTerminalStackNode(3828, 2, "StringTemplate", null, null); + tmp[3] = new NonTerminalStackNode(3830, 3, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(3827, 1, "layouts_LAYOUTLIST", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgidGVtcGxhdGUiLHNvcnQoIlN0cmluZ0xpdGVyYWwiKSksW2xhYmVsKCJwcmUiLGxleCgiUHJlU3RyaW5nQ2hhcnMiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJ0ZW1wbGF0ZSIsc29ydCgiU3RyaW5nVGVtcGxhdGUiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJ0YWlsIixzb3J0KCJTdHJpbmdUYWlsIikpXSx7fSk00, tmp); } public static void init(ExpectBuilder builder){ @@ -7073,17 +7070,17 @@ protected static class Backslash { protected static final void _init_cHJvZChsZXgoIkJhY2tzbGFzaCIpLFtjb25kaXRpb25hbChcY2hhci1jbGFzcyhbcmFuZ2UoOTIsOTIpXSkse1xub3QtZm9sbG93KFxjaGFyLWNsYXNzKFtyYW5nZSg0Nyw0NykscmFuZ2UoNjAsNjApLHJhbmdlKDYyLDYyKSxyYW5nZSg5Miw5MildKSl9KV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new CharStackNode(3853, 0, new int[][]{{92,92}}, null, new ICompletionFilter[] {new CharFollowRestriction(new int[][]{{47,47},{60,60},{62,62},{92,92}})}); + tmp[0] = new CharStackNode(3843, 0, new int[][]{{92,92}}, null, new ICompletionFilter[] {new CharFollowRestriction(new int[][]{{47,47},{60,60},{62,62},{92,92}})}); builder.addAlternative(RascalParser.cHJvZChsZXgoIkJhY2tzbGFzaCIpLFtjb25kaXRpb25hbChcY2hhci1jbGFzcyhbcmFuZ2UoOTIsOTIpXSkse1xub3QtZm9sbG93KFxjaGFyLWNsYXNzKFtyYW5nZSg0Nyw0NykscmFuZ2UoNjAsNjApLHJhbmdlKDYyLDYyKSxyYW5nZSg5Miw5MildKSl9KV0se30p, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIkJhY2tzbGFzaCIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJCYWNrc2xhc2hcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKGxleCgiQmFja3NsYXNoIikpKX0p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[1] = new LiteralStackNode(3857, 1, cHJvZChsaXQoInNvcnQoXCJCYWNrc2xhc2hcIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNjYsNjYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5OSw5OSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA3LDEwNyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNCwxMDQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,66,97,99,107,115,108,97,115,104,34,41}, null, null); - tmp[3] = new ListStackNode(3860, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(3859, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[0] = new CharStackNode(3856, 0, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(3858, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[4] = new CharStackNode(3861, 4, new int[][]{{0,0}}, null, null); + tmp[1] = new LiteralStackNode(3847, 1, cHJvZChsaXQoInNvcnQoXCJCYWNrc2xhc2hcIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNjYsNjYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5OSw5OSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA3LDEwNyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNCwxMDQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,66,97,99,107,115,108,97,115,104,34,41}, null, null); + tmp[3] = new ListStackNode(3850, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(3849, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[0] = new CharStackNode(3846, 0, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(3848, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[4] = new CharStackNode(3851, 4, new int[][]{{0,0}}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIkJhY2tzbGFzaCIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJCYWNrc2xhc2hcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKGxleCgiQmFja3NsYXNoIikpKX0p, tmp); } public static void init(ExpectBuilder builder){ @@ -7106,30 +7103,30 @@ protected static class Char { protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIkNoYXIiKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJzb3J0KFwiQ2hhclwiKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIobGV4KCJDaGFyIikpKX0p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[3] = new ListStackNode(3941, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(3940, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[1] = new LiteralStackNode(3938, 1, cHJvZChsaXQoInNvcnQoXCJDaGFyXCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDY3LDY3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDQsMTA0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {115,111,114,116,40,34,67,104,97,114,34,41}, null, null); - tmp[0] = new CharStackNode(3937, 0, new int[][]{{0,0}}, null, null); - tmp[4] = new CharStackNode(3942, 4, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(3939, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[3] = new ListStackNode(3931, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(3930, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[1] = new LiteralStackNode(3928, 1, cHJvZChsaXQoInNvcnQoXCJDaGFyXCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDY3LDY3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDQsMTA0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {115,111,114,116,40,34,67,104,97,114,34,41}, null, null); + tmp[0] = new CharStackNode(3927, 0, new int[][]{{0,0}}, null, null); + tmp[4] = new CharStackNode(3932, 4, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(3929, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIkNoYXIiKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJzb3J0KFwiQ2hhclwiKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIobGV4KCJDaGFyIikpKX0p, tmp); } protected static final void _init_cHJvZChsZXgoIkNoYXIiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEsMzEpLHJhbmdlKDMzLDMzKSxyYW5nZSgzNSwzOCkscmFuZ2UoNDAsNDQpLHJhbmdlKDQ2LDU5KSxyYW5nZSg2MSw2MSkscmFuZ2UoNjMsOTApLHJhbmdlKDk0LDExMTQxMTEpXSldLHt0YWcoImNhdGVnb3J5Iigic3RyaW5nIikpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new CharStackNode(3945, 0, new int[][]{{1,31},{33,33},{35,38},{40,44},{46,59},{61,61},{63,90},{94,1114111}}, null, null); + tmp[0] = new CharStackNode(3935, 0, new int[][]{{1,31},{33,33},{35,38},{40,44},{46,59},{61,61},{63,90},{94,1114111}}, null, null); builder.addAlternative(RascalParser.cHJvZChsZXgoIkNoYXIiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEsMzEpLHJhbmdlKDMzLDMzKSxyYW5nZSgzNSwzOCkscmFuZ2UoNDAsNDQpLHJhbmdlKDQ2LDU5KSxyYW5nZSg2MSw2MSkscmFuZ2UoNjMsOTApLHJhbmdlKDk0LDExMTQxMTEpXSldLHt0YWcoImNhdGVnb3J5Iigic3RyaW5nIikpfSk00, tmp); } protected static final void _init_cHJvZChsZXgoIkNoYXIiKSxbbGl0KCJcXCIpLFxjaGFyLWNsYXNzKFtyYW5nZSgzMiwzMikscmFuZ2UoMzQsMzQpLHJhbmdlKDM5LDM5KSxyYW5nZSg0NSw0NSkscmFuZ2UoNjAsNjApLHJhbmdlKDYyLDYyKSxyYW5nZSg5MSw5MykscmFuZ2UoOTgsOTgpLHJhbmdlKDEwMiwxMDIpLHJhbmdlKDExMCwxMTApLHJhbmdlKDExNCwxMTQpLHJhbmdlKDExNiwxMTYpXSldLHt0YWcoImNhdGVnb3J5Iigic3RyaW5nIikpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[2]; - tmp[0] = new LiteralStackNode(3947, 0, cHJvZChsaXQoIlxcIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg5Miw5MildKV0se30p, new int[] {92}, null, null); - tmp[1] = new CharStackNode(3948, 1, new int[][]{{32,32},{34,34},{39,39},{45,45},{60,60},{62,62},{91,93},{98,98},{102,102},{110,110},{114,114},{116,116}}, null, null); + tmp[0] = new LiteralStackNode(3937, 0, cHJvZChsaXQoIlxcIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg5Miw5MildKV0se30p, new int[] {92}, null, null); + tmp[1] = new CharStackNode(3938, 1, new int[][]{{32,32},{34,34},{39,39},{45,45},{60,60},{62,62},{91,93},{98,98},{102,102},{110,110},{114,114},{116,116}}, null, null); builder.addAlternative(RascalParser.cHJvZChsZXgoIkNoYXIiKSxbbGl0KCJcXCIpLFxjaGFyLWNsYXNzKFtyYW5nZSgzMiwzMikscmFuZ2UoMzQsMzQpLHJhbmdlKDM5LDM5KSxyYW5nZSg0NSw0NSkscmFuZ2UoNjAsNjApLHJhbmdlKDYyLDYyKSxyYW5nZSg5MSw5MykscmFuZ2UoOTgsOTgpLHJhbmdlKDEwMiwxMDIpLHJhbmdlKDExMCwxMTApLHJhbmdlKDExNCwxMTQpLHJhbmdlKDExNiwxMTYpXSldLHt0YWcoImNhdGVnb3J5Iigic3RyaW5nIikpfSk00, tmp); } protected static final void _init_cHJvZChsZXgoIkNoYXIiKSxbbGV4KCJVbmljb2RlRXNjYXBlIildLHt0YWcoImNhdGVnb3J5Iigic3RyaW5nIikpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new NonTerminalStackNode(3950, 0, "UnicodeEscape", null, null); + tmp[0] = new NonTerminalStackNode(3940, 0, "UnicodeEscape", null, null); builder.addAlternative(RascalParser.cHJvZChsZXgoIkNoYXIiKSxbbGV4KCJVbmljb2RlRXNjYXBlIildLHt0YWcoImNhdGVnb3J5Iigic3RyaW5nIikpfSk00, tmp); } public static void init(ExpectBuilder builder){ @@ -7156,9 +7153,9 @@ protected static class start__Commands { protected static final void _init_cHJvZChzdGFydChzb3J0KCJDb21tYW5kcyIpKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJ0b3AiLHNvcnQoIkNvbW1hbmRzIikpLGxheW91dHMoIkxBWU9VVExJU1QiKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[3]; - tmp[0] = new NonTerminalStackNode(3955, 0, "layouts_LAYOUTLIST", null, null); - tmp[2] = new NonTerminalStackNode(3958, 2, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(3956, 1, "Commands", null, null); + tmp[0] = new NonTerminalStackNode(3945, 0, "layouts_LAYOUTLIST", null, null); + tmp[2] = new NonTerminalStackNode(3948, 2, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(3946, 1, "Commands", null, null); builder.addAlternative(RascalParser.cHJvZChzdGFydChzb3J0KCJDb21tYW5kcyIpKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJ0b3AiLHNvcnQoIkNvbW1hbmRzIikpLGxheW91dHMoIkxBWU9VVExJU1QiKV0se30p, tmp); } public static void init(ExpectBuilder builder){ @@ -7179,19 +7176,19 @@ protected static class CaseInsensitiveStringConstant { protected static final void _init_cHJvZChsZXgoIkNhc2VJbnNlbnNpdGl2ZVN0cmluZ0NvbnN0YW50IiksW2xpdCgiXCciKSxsYWJlbCgiY2hhcnMiLFxpdGVyLXN0YXIobGV4KCJTdHJpbmdDaGFyYWN0ZXIiKSkpLGxpdCgiXCciKV0se3RhZygiY2F0ZWdvcnkiKCJzdHJpbmciKSl9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[3]; - tmp[0] = new LiteralStackNode(3985, 0, cHJvZChsaXQoIlwnIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgzOSwzOSldKV0se30p, new int[] {39}, null, null); - tmp[2] = new LiteralStackNode(3989, 2, cHJvZChsaXQoIlwnIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgzOSwzOSldKV0se30p, new int[] {39}, null, null); - tmp[1] = new ListStackNode(3987, 1, cmVndWxhcihcaXRlci1zdGFyKGxleCgiU3RyaW5nQ2hhcmFjdGVyIikpKQ0000, new NonTerminalStackNode(3986, 0, "StringCharacter", null, null), false, null, null); + tmp[0] = new LiteralStackNode(3975, 0, cHJvZChsaXQoIlwnIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgzOSwzOSldKV0se30p, new int[] {39}, null, null); + tmp[2] = new LiteralStackNode(3979, 2, cHJvZChsaXQoIlwnIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgzOSwzOSldKV0se30p, new int[] {39}, null, null); + tmp[1] = new ListStackNode(3977, 1, cmVndWxhcihcaXRlci1zdGFyKGxleCgiU3RyaW5nQ2hhcmFjdGVyIikpKQ0000, new NonTerminalStackNode(3976, 0, "StringCharacter", null, null), false, null, null); builder.addAlternative(RascalParser.cHJvZChsZXgoIkNhc2VJbnNlbnNpdGl2ZVN0cmluZ0NvbnN0YW50IiksW2xpdCgiXCciKSxsYWJlbCgiY2hhcnMiLFxpdGVyLXN0YXIobGV4KCJTdHJpbmdDaGFyYWN0ZXIiKSkpLGxpdCgiXCciKV0se3RhZygiY2F0ZWdvcnkiKCJzdHJpbmciKSl9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIkNhc2VJbnNlbnNpdGl2ZVN0cmluZ0NvbnN0YW50IikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIkNhc2VJbnNlbnNpdGl2ZVN0cmluZ0NvbnN0YW50XCIpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihsZXgoIkNhc2VJbnNlbnNpdGl2ZVN0cmluZ0NvbnN0YW50IikpKX0p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[0] = new CharStackNode(3992, 0, new int[][]{{0,0}}, null, null); - tmp[4] = new CharStackNode(3997, 4, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(3994, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[3] = new ListStackNode(3996, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(3995, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[1] = new LiteralStackNode(3993, 1, cHJvZChsaXQoInNvcnQoXCJDYXNlSW5zZW5zaXRpdmVTdHJpbmdDb25zdGFudFwiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg2Nyw2NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDczLDczKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTgsMTE4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4Myw4MyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAzLDEwMyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNjcsNjcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {115,111,114,116,40,34,67,97,115,101,73,110,115,101,110,115,105,116,105,118,101,83,116,114,105,110,103,67,111,110,115,116,97,110,116,34,41}, null, null); + tmp[0] = new CharStackNode(3982, 0, new int[][]{{0,0}}, null, null); + tmp[4] = new CharStackNode(3987, 4, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(3984, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[3] = new ListStackNode(3986, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(3985, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[1] = new LiteralStackNode(3983, 1, cHJvZChsaXQoInNvcnQoXCJDYXNlSW5zZW5zaXRpdmVTdHJpbmdDb25zdGFudFwiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg2Nyw2NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDczLDczKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTgsMTE4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4Myw4MyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAzLDEwMyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNjcsNjcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {115,111,114,116,40,34,67,97,115,101,73,110,115,101,110,115,105,116,105,118,101,83,116,114,105,110,103,67,111,110,115,116,97,110,116,34,41}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIkNhc2VJbnNlbnNpdGl2ZVN0cmluZ0NvbnN0YW50IikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIkNhc2VJbnNlbnNpdGl2ZVN0cmluZ0NvbnN0YW50XCIpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihsZXgoIkNhc2VJbnNlbnNpdGl2ZVN0cmluZ0NvbnN0YW50IikpKX0p, tmp); } public static void init(ExpectBuilder builder){ @@ -7214,28 +7211,28 @@ protected static class JustTime { protected static final void _init_cHJvZChsZXgoIkp1c3RUaW1lIiksW2xpdCgiJFQiKSxsZXgoIlRpbWVQYXJ0Tm9UWiIpLGxleCgiVGltZVpvbmVQYXJ0IiksbGl0KCIkIildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[4]; - tmp[1] = new NonTerminalStackNode(4098, 1, "TimePartNoTZ", null, null); - tmp[2] = new NonTerminalStackNode(4099, 2, "TimeZonePart", null, null); - tmp[3] = new LiteralStackNode(4100, 3, cHJvZChsaXQoIiQiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDM2LDM2KV0pXSx7fSk00, new int[] {36}, null, null); - tmp[0] = new LiteralStackNode(4097, 0, cHJvZChsaXQoIiRUIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgzNiwzNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoODQsODQpXSldLHt9KQ0000, new int[] {36,84}, null, null); + tmp[1] = new NonTerminalStackNode(4088, 1, "TimePartNoTZ", null, null); + tmp[2] = new NonTerminalStackNode(4089, 2, "TimeZonePart", null, null); + tmp[3] = new LiteralStackNode(4090, 3, cHJvZChsaXQoIiQiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDM2LDM2KV0pXSx7fSk00, new int[] {36}, null, null); + tmp[0] = new LiteralStackNode(4087, 0, cHJvZChsaXQoIiRUIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgzNiwzNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoODQsODQpXSldLHt9KQ0000, new int[] {36,84}, null, null); builder.addAlternative(RascalParser.cHJvZChsZXgoIkp1c3RUaW1lIiksW2xpdCgiJFQiKSxsZXgoIlRpbWVQYXJ0Tm9UWiIpLGxleCgiVGltZVpvbmVQYXJ0IiksbGl0KCIkIildLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsZXgoIkp1c3RUaW1lIiksW2xpdCgiJFQiKSxjb25kaXRpb25hbChsZXgoIlRpbWVQYXJ0Tm9UWiIpLHtcbm90LWZvbGxvdyhcY2hhci1jbGFzcyhbcmFuZ2UoNDMsNDMpLHJhbmdlKDQ1LDQ1KV0pKX0pLGxpdCgiJCIpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[3]; - tmp[1] = new NonTerminalStackNode(4105, 1, "TimePartNoTZ", null, new ICompletionFilter[] {new CharFollowRestriction(new int[][]{{43,43},{45,45}})}); - tmp[2] = new LiteralStackNode(4106, 2, cHJvZChsaXQoIiQiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDM2LDM2KV0pXSx7fSk00, new int[] {36}, null, null); - tmp[0] = new LiteralStackNode(4102, 0, cHJvZChsaXQoIiRUIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgzNiwzNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoODQsODQpXSldLHt9KQ0000, new int[] {36,84}, null, null); + tmp[1] = new NonTerminalStackNode(4095, 1, "TimePartNoTZ", null, new ICompletionFilter[] {new CharFollowRestriction(new int[][]{{43,43},{45,45}})}); + tmp[2] = new LiteralStackNode(4096, 2, cHJvZChsaXQoIiQiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDM2LDM2KV0pXSx7fSk00, new int[] {36}, null, null); + tmp[0] = new LiteralStackNode(4092, 0, cHJvZChsaXQoIiRUIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgzNiwzNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoODQsODQpXSldLHt9KQ0000, new int[] {36,84}, null, null); builder.addAlternative(RascalParser.cHJvZChsZXgoIkp1c3RUaW1lIiksW2xpdCgiJFQiKSxjb25kaXRpb25hbChsZXgoIlRpbWVQYXJ0Tm9UWiIpLHtcbm90LWZvbGxvdyhcY2hhci1jbGFzcyhbcmFuZ2UoNDMsNDMpLHJhbmdlKDQ1LDQ1KV0pKX0pLGxpdCgiJCIpXSx7fSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIkp1c3RUaW1lIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIkp1c3RUaW1lXCIpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihsZXgoIkp1c3RUaW1lIikpKX0p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[2] = new LiteralStackNode(4111, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[4] = new CharStackNode(4114, 4, new int[][]{{0,0}}, null, null); - tmp[1] = new LiteralStackNode(4110, 1, cHJvZChsaXQoInNvcnQoXCJKdXN0VGltZVwiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg3NCw3NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE3LDExNyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoODQsODQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOSwxMDkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,74,117,115,116,84,105,109,101,34,41}, null, null); - tmp[0] = new CharStackNode(4109, 0, new int[][]{{0,0}}, null, null); - tmp[3] = new ListStackNode(4113, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(4112, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[2] = new LiteralStackNode(4101, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[4] = new CharStackNode(4104, 4, new int[][]{{0,0}}, null, null); + tmp[1] = new LiteralStackNode(4100, 1, cHJvZChsaXQoInNvcnQoXCJKdXN0VGltZVwiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg3NCw3NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE3LDExNyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoODQsODQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOSwxMDkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,74,117,115,116,84,105,109,101,34,41}, null, null); + tmp[0] = new CharStackNode(4099, 0, new int[][]{{0,0}}, null, null); + tmp[3] = new ListStackNode(4103, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(4102, 0, new int[][]{{48,57}}, null, null), true, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIkp1c3RUaW1lIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIkp1c3RUaW1lXCIpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihsZXgoIkp1c3RUaW1lIikpKX0p, tmp); } public static void init(ExpectBuilder builder){ @@ -7260,19 +7257,19 @@ protected static class Declarator { protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJEZWNsYXJhdG9yIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIkRlY2xhcmF0b3JcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKHNvcnQoIkRlY2xhcmF0b3IiKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[1] = new LiteralStackNode(4174, 1, cHJvZChsaXQoInNvcnQoXCJEZWNsYXJhdG9yXCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDY4LDY4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5OSw5OSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {115,111,114,116,40,34,68,101,99,108,97,114,97,116,111,114,34,41}, null, null); - tmp[3] = new ListStackNode(4177, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(4176, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[0] = new CharStackNode(4173, 0, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(4175, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[4] = new CharStackNode(4178, 4, new int[][]{{0,0}}, null, null); + tmp[1] = new LiteralStackNode(4164, 1, cHJvZChsaXQoInNvcnQoXCJEZWNsYXJhdG9yXCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDY4LDY4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5OSw5OSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {115,111,114,116,40,34,68,101,99,108,97,114,97,116,111,114,34,41}, null, null); + tmp[3] = new ListStackNode(4167, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(4166, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[0] = new CharStackNode(4163, 0, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(4165, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[4] = new CharStackNode(4168, 4, new int[][]{{0,0}}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJEZWNsYXJhdG9yIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIkRlY2xhcmF0b3JcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKHNvcnQoIkRlY2xhcmF0b3IiKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiZGVmYXVsdCIsc29ydCgiRGVjbGFyYXRvciIpKSxbbGFiZWwoInR5cGUiLHNvcnQoIlR5cGUiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJ2YXJpYWJsZXMiLFxpdGVyLXNlcHMoc29ydCgiVmFyaWFibGUiKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[3]; - tmp[2] = new SeparatedListStackNode(4189, 2, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIlZhcmlhYmxlIiksW2xheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIiwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIildKSk00, new NonTerminalStackNode(4185, 0, "Variable", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(4186, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(4187, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(4188, 3, "layouts_LAYOUTLIST", null, null)}, true, null, null); - tmp[0] = new NonTerminalStackNode(4182, 0, "Type", null, null); - tmp[1] = new NonTerminalStackNode(4184, 1, "layouts_LAYOUTLIST", null, null); + tmp[2] = new SeparatedListStackNode(4179, 2, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIlZhcmlhYmxlIiksW2xheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIiwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIildKSk00, new NonTerminalStackNode(4175, 0, "Variable", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(4176, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(4177, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(4178, 3, "layouts_LAYOUTLIST", null, null)}, true, null, null); + tmp[0] = new NonTerminalStackNode(4172, 0, "Type", null, null); + tmp[1] = new NonTerminalStackNode(4174, 1, "layouts_LAYOUTLIST", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiZGVmYXVsdCIsc29ydCgiRGVjbGFyYXRvciIpKSxbbGFiZWwoInR5cGUiLHNvcnQoIlR5cGUiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJ2YXJpYWJsZXMiLFxpdGVyLXNlcHMoc29ydCgiVmFyaWFibGUiKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKV0se30p, tmp); } public static void init(ExpectBuilder builder){ @@ -7295,23 +7292,23 @@ protected static class Target { protected static final void _init_cHJvZChsYWJlbCgibGFiZWxlZCIsc29ydCgiVGFyZ2V0IikpLFtsYWJlbCgibmFtZSIsbGV4KCJOYW1lIikpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new NonTerminalStackNode(4280, 0, "Name", null, null); + tmp[0] = new NonTerminalStackNode(4270, 0, "Name", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgibGFiZWxlZCIsc29ydCgiVGFyZ2V0IikpLFtsYWJlbCgibmFtZSIsbGV4KCJOYW1lIikpXSx7fSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJUYXJnZXQiKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJzb3J0KFwiVGFyZ2V0XCIpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihzb3J0KCJUYXJnZXQiKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[3] = new ListStackNode(4288, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(4287, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[1] = new LiteralStackNode(4285, 1, cHJvZChsaXQoInNvcnQoXCJUYXJnZXRcIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODQsODQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDMsMTAzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {115,111,114,116,40,34,84,97,114,103,101,116,34,41}, null, null); - tmp[0] = new CharStackNode(4284, 0, new int[][]{{0,0}}, null, null); - tmp[4] = new CharStackNode(4289, 4, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(4286, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[3] = new ListStackNode(4278, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(4277, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[1] = new LiteralStackNode(4275, 1, cHJvZChsaXQoInNvcnQoXCJUYXJnZXRcIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODQsODQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDMsMTAzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {115,111,114,116,40,34,84,97,114,103,101,116,34,41}, null, null); + tmp[0] = new CharStackNode(4274, 0, new int[][]{{0,0}}, null, null); + tmp[4] = new CharStackNode(4279, 4, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(4276, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJUYXJnZXQiKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJzb3J0KFwiVGFyZ2V0XCIpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihzb3J0KCJUYXJnZXQiKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiZW1wdHkiLHNvcnQoIlRhcmdldCIpKSxbXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new EpsilonStackNode(4292, 0); + tmp[0] = new EpsilonStackNode(4282, 0); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiZW1wdHkiLHNvcnQoIlRhcmdldCIpKSxbXSx7fSk00, tmp); } public static void init(ExpectBuilder builder){ @@ -7336,29 +7333,29 @@ protected static class IntegerLiteral { protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJJbnRlZ2VyTGl0ZXJhbCIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJJbnRlZ2VyTGl0ZXJhbFwiKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoc29ydCgiSW50ZWdlckxpdGVyYWwiKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[1] = new LiteralStackNode(4297, 1, cHJvZChsaXQoInNvcnQoXCJJbnRlZ2VyTGl0ZXJhbFwiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg3Myw3MyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAzLDEwMyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNzYsNzYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {115,111,114,116,40,34,73,110,116,101,103,101,114,76,105,116,101,114,97,108,34,41}, null, null); - tmp[3] = new ListStackNode(4300, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(4299, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[0] = new CharStackNode(4296, 0, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(4298, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[4] = new CharStackNode(4301, 4, new int[][]{{0,0}}, null, null); + tmp[1] = new LiteralStackNode(4287, 1, cHJvZChsaXQoInNvcnQoXCJJbnRlZ2VyTGl0ZXJhbFwiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg3Myw3MyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAzLDEwMyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNzYsNzYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {115,111,114,116,40,34,73,110,116,101,103,101,114,76,105,116,101,114,97,108,34,41}, null, null); + tmp[3] = new ListStackNode(4290, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(4289, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[0] = new CharStackNode(4286, 0, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(4288, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[4] = new CharStackNode(4291, 4, new int[][]{{0,0}}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJJbnRlZ2VyTGl0ZXJhbCIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJJbnRlZ2VyTGl0ZXJhbFwiKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoc29ydCgiSW50ZWdlckxpdGVyYWwiKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgib2N0YWxJbnRlZ2VyTGl0ZXJhbCIsc29ydCgiSW50ZWdlckxpdGVyYWwiKSksW2xhYmVsKCJvY3RhbCIsbGV4KCJPY3RhbEludGVnZXJMaXRlcmFsIikpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new NonTerminalStackNode(4305, 0, "OctalIntegerLiteral", null, null); + tmp[0] = new NonTerminalStackNode(4295, 0, "OctalIntegerLiteral", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgib2N0YWxJbnRlZ2VyTGl0ZXJhbCIsc29ydCgiSW50ZWdlckxpdGVyYWwiKSksW2xhYmVsKCJvY3RhbCIsbGV4KCJPY3RhbEludGVnZXJMaXRlcmFsIikpXSx7fSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiZGVjaW1hbEludGVnZXJMaXRlcmFsIixzb3J0KCJJbnRlZ2VyTGl0ZXJhbCIpKSxbbGFiZWwoImRlY2ltYWwiLGxleCgiRGVjaW1hbEludGVnZXJMaXRlcmFsIikpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new NonTerminalStackNode(4309, 0, "DecimalIntegerLiteral", null, null); + tmp[0] = new NonTerminalStackNode(4299, 0, "DecimalIntegerLiteral", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiZGVjaW1hbEludGVnZXJMaXRlcmFsIixzb3J0KCJJbnRlZ2VyTGl0ZXJhbCIpKSxbbGFiZWwoImRlY2ltYWwiLGxleCgiRGVjaW1hbEludGVnZXJMaXRlcmFsIikpXSx7fSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiaGV4SW50ZWdlckxpdGVyYWwiLHNvcnQoIkludGVnZXJMaXRlcmFsIikpLFtsYWJlbCgiaGV4IixsZXgoIkhleEludGVnZXJMaXRlcmFsIikpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new NonTerminalStackNode(4313, 0, "HexIntegerLiteral", null, null); + tmp[0] = new NonTerminalStackNode(4303, 0, "HexIntegerLiteral", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiaGV4SW50ZWdlckxpdGVyYWwiLHNvcnQoIkludGVnZXJMaXRlcmFsIikpLFtsYWJlbCgiaGV4IixsZXgoIkhleEludGVnZXJMaXRlcmFsIikpXSx7fSk00, tmp); } public static void init(ExpectBuilder builder){ @@ -7385,209 +7382,199 @@ protected static class Pattern { protected static final void _init_cHJvZChsYWJlbCgibGlzdCIsc29ydCgiUGF0dGVybiIpKSxbbGl0KCJbIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJlbGVtZW50czAiLFxpdGVyLXN0YXItc2Vwcyhzb3J0KCJQYXR0ZXJuIiksW2xheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIiwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIildKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiXSIpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[0] = new LiteralStackNode(4482, 0, cHJvZChsaXQoIlsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkxLDkxKV0pXSx7fSk00, new int[] {91}, null, null); - tmp[1] = new NonTerminalStackNode(4483, 1, "layouts_LAYOUTLIST", null, null); - tmp[3] = new NonTerminalStackNode(4490, 3, "layouts_LAYOUTLIST", null, null); - tmp[2] = new SeparatedListStackNode(4488, 2, cmVndWxhcihcaXRlci1zdGFyLXNlcHMoc29ydCgiUGF0dGVybiIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpXSkp, new NonTerminalStackNode(4484, 0, "Pattern", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(4485, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(4486, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(4487, 3, "layouts_LAYOUTLIST", null, null)}, false, null, null); - tmp[4] = new LiteralStackNode(4491, 4, cHJvZChsaXQoIl0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkzLDkzKV0pXSx7fSk00, new int[] {93}, null, null); + tmp[0] = new LiteralStackNode(4472, 0, cHJvZChsaXQoIlsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkxLDkxKV0pXSx7fSk00, new int[] {91}, null, null); + tmp[1] = new NonTerminalStackNode(4473, 1, "layouts_LAYOUTLIST", null, null); + tmp[3] = new NonTerminalStackNode(4480, 3, "layouts_LAYOUTLIST", null, null); + tmp[2] = new SeparatedListStackNode(4478, 2, cmVndWxhcihcaXRlci1zdGFyLXNlcHMoc29ydCgiUGF0dGVybiIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpXSkp, new NonTerminalStackNode(4474, 0, "Pattern", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(4475, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(4476, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(4477, 3, "layouts_LAYOUTLIST", null, null)}, false, null, null); + tmp[4] = new LiteralStackNode(4481, 4, cHJvZChsaXQoIl0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkzLDkzKV0pXSx7fSk00, new int[] {93}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgibGlzdCIsc29ydCgiUGF0dGVybiIpKSxbbGl0KCJbIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJlbGVtZW50czAiLFxpdGVyLXN0YXItc2Vwcyhzb3J0KCJQYXR0ZXJuIiksW2xheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIiwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIildKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiXSIpXSx7fSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiY2FsbE9yVHJlZSIsc29ydCgiUGF0dGVybiIpKSxbbGFiZWwoImV4cHJlc3Npb24iLHNvcnQoIlBhdHRlcm4iKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiKCIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgiYXJndW1lbnRzIixcaXRlci1zdGFyLXNlcHMoc29ydCgiUGF0dGVybiIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpXSkpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgia2V5d29yZEFyZ3VtZW50cyIsXHBhcmFtZXRlcml6ZWQtc29ydCgiS2V5d29yZEFyZ3VtZW50cyIsW3NvcnQoIlBhdHRlcm4iKV0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIpIildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[9]; - tmp[0] = new NonTerminalStackNode(4494, 0, "Pattern", null, null); - tmp[3] = new NonTerminalStackNode(4498, 3, "layouts_LAYOUTLIST", null, null); - tmp[7] = new NonTerminalStackNode(4509, 7, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(4496, 1, "layouts_LAYOUTLIST", null, null); - tmp[5] = new NonTerminalStackNode(4505, 5, "layouts_LAYOUTLIST", null, null); - tmp[8] = new LiteralStackNode(4510, 8, cHJvZChsaXQoIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {41}, null, null); - tmp[4] = new SeparatedListStackNode(4503, 4, cmVndWxhcihcaXRlci1zdGFyLXNlcHMoc29ydCgiUGF0dGVybiIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpXSkp, new NonTerminalStackNode(4499, 0, "Pattern", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(4500, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(4501, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(4502, 3, "layouts_LAYOUTLIST", null, null)}, false, null, null); - tmp[6] = new NonTerminalStackNode(4507, 6, "KeywordArguments_W3NvcnQoIlBhdHRlcm4iKV000", null, null); - tmp[2] = new LiteralStackNode(4497, 2, cHJvZChsaXQoIigiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pXSx7fSk00, new int[] {40}, null, null); + tmp[4] = new SeparatedListStackNode(4493, 4, cmVndWxhcihcaXRlci1zdGFyLXNlcHMoc29ydCgiUGF0dGVybiIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpXSkp, new NonTerminalStackNode(4489, 0, "Pattern", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(4490, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(4491, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(4492, 3, "layouts_LAYOUTLIST", null, null)}, false, null, null); + tmp[0] = new NonTerminalStackNode(4484, 0, "Pattern", null, null); + tmp[3] = new NonTerminalStackNode(4488, 3, "layouts_LAYOUTLIST", null, null); + tmp[7] = new NonTerminalStackNode(4499, 7, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(4486, 1, "layouts_LAYOUTLIST", null, null); + tmp[5] = new NonTerminalStackNode(4495, 5, "layouts_LAYOUTLIST", null, null); + tmp[8] = new LiteralStackNode(4500, 8, cHJvZChsaXQoIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {41}, null, null); + tmp[6] = new NonTerminalStackNode(4497, 6, "KeywordArguments_W3NvcnQoIlBhdHRlcm4iKV000", null, null); + tmp[2] = new LiteralStackNode(4487, 2, cHJvZChsaXQoIigiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pXSx7fSk00, new int[] {40}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiY2FsbE9yVHJlZSIsc29ydCgiUGF0dGVybiIpKSxbbGFiZWwoImV4cHJlc3Npb24iLHNvcnQoIlBhdHRlcm4iKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiKCIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgiYXJndW1lbnRzIixcaXRlci1zdGFyLXNlcHMoc29ydCgiUGF0dGVybiIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpXSkpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgia2V5d29yZEFyZ3VtZW50cyIsXHBhcmFtZXRlcml6ZWQtc29ydCgiS2V5d29yZEFyZ3VtZW50cyIsW3NvcnQoIlBhdHRlcm4iKV0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIpIildLHt9KQ0000, tmp); } - protected static final void _init_cHJvZChsYWJlbCgidHVwbGUiLHNvcnQoIlBhdHRlcm4iKSksW2xpdCgiXDwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImVsZW1lbnRzIixcaXRlci1zZXBzKHNvcnQoIlBhdHRlcm4iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJcPiIpXSx7fSk00(ExpectBuilder builder) { + protected static final void _init_cHJvZChsYWJlbCgidHVwbGUiLHNvcnQoIlBhdHRlcm4iKSksW2xpdCgiXDwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImVsZW1lbnRzMCIsXGl0ZXItc3Rhci1zZXBzKHNvcnQoIlBhdHRlcm4iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJcPiIpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[3] = new NonTerminalStackNode(4521, 3, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(4514, 1, "layouts_LAYOUTLIST", null, null); - tmp[4] = new LiteralStackNode(4522, 4, cHJvZChsaXQoIlw11IiksW1xjaGFyLWNsYXNzKFtyYW5nZSg2Miw2MildKV0se30p, new int[] {62}, null, null); - tmp[2] = new SeparatedListStackNode(4519, 2, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIlBhdHRlcm4iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(4515, 0, "Pattern", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(4516, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(4517, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(4518, 3, "layouts_LAYOUTLIST", null, null)}, true, null, null); - tmp[0] = new LiteralStackNode(4513, 0, cHJvZChsaXQoIlw8IiksW1xjaGFyLWNsYXNzKFtyYW5nZSg2MCw2MCldKV0se30p, new int[] {60}, null, null); - builder.addAlternative(RascalParser.cHJvZChsYWJlbCgidHVwbGUiLHNvcnQoIlBhdHRlcm4iKSksW2xpdCgiXDwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImVsZW1lbnRzIixcaXRlci1zZXBzKHNvcnQoIlBhdHRlcm4iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJcPiIpXSx7fSk00, tmp); + tmp[4] = new LiteralStackNode(4512, 4, cHJvZChsaXQoIlw11IiksW1xjaGFyLWNsYXNzKFtyYW5nZSg2Miw2MildKV0se30p, new int[] {62}, null, null); + tmp[3] = new NonTerminalStackNode(4511, 3, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(4504, 1, "layouts_LAYOUTLIST", null, null); + tmp[2] = new SeparatedListStackNode(4509, 2, cmVndWxhcihcaXRlci1zdGFyLXNlcHMoc29ydCgiUGF0dGVybiIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpXSkp, new NonTerminalStackNode(4505, 0, "Pattern", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(4506, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(4507, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(4508, 3, "layouts_LAYOUTLIST", null, null)}, false, null, null); + tmp[0] = new LiteralStackNode(4503, 0, cHJvZChsaXQoIlw8IiksW1xjaGFyLWNsYXNzKFtyYW5nZSg2MCw2MCldKV0se30p, new int[] {60}, null, null); + builder.addAlternative(RascalParser.cHJvZChsYWJlbCgidHVwbGUiLHNvcnQoIlBhdHRlcm4iKSksW2xpdCgiXDwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImVsZW1lbnRzMCIsXGl0ZXItc3Rhci1zZXBzKHNvcnQoIlBhdHRlcm4iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJcPiIpXSx7fSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgibGl0ZXJhbCIsc29ydCgiUGF0dGVybiIpKSxbbGFiZWwoImxpdGVyYWwiLHNvcnQoIkxpdGVyYWwiKSldLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new NonTerminalStackNode(4525, 0, "Literal", null, null); + tmp[0] = new NonTerminalStackNode(4515, 0, "Literal", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgibGl0ZXJhbCIsc29ydCgiUGF0dGVybiIpKSxbbGFiZWwoImxpdGVyYWwiLHNvcnQoIkxpdGVyYWwiKSldLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgic2V0Iixzb3J0KCJQYXR0ZXJuIikpLFtsaXQoInsiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImVsZW1lbnRzMCIsXGl0ZXItc3Rhci1zZXBzKHNvcnQoIlBhdHRlcm4iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJ9IildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[3] = new NonTerminalStackNode(4537, 3, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(4530, 1, "layouts_LAYOUTLIST", null, null); - tmp[0] = new LiteralStackNode(4529, 0, cHJvZChsaXQoInsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyMywxMjMpXSldLHt9KQ0000, new int[] {123}, null, null); - tmp[4] = new LiteralStackNode(4538, 4, cHJvZChsaXQoIn0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyNSwxMjUpXSldLHt9KQ0000, new int[] {125}, null, null); - tmp[2] = new SeparatedListStackNode(4535, 2, cmVndWxhcihcaXRlci1zdGFyLXNlcHMoc29ydCgiUGF0dGVybiIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpXSkp, new NonTerminalStackNode(4531, 0, "Pattern", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(4532, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(4533, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(4534, 3, "layouts_LAYOUTLIST", null, null)}, false, null, null); + tmp[3] = new NonTerminalStackNode(4527, 3, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(4520, 1, "layouts_LAYOUTLIST", null, null); + tmp[0] = new LiteralStackNode(4519, 0, cHJvZChsaXQoInsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyMywxMjMpXSldLHt9KQ0000, new int[] {123}, null, null); + tmp[4] = new LiteralStackNode(4528, 4, cHJvZChsaXQoIn0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyNSwxMjUpXSldLHt9KQ0000, new int[] {125}, null, null); + tmp[2] = new SeparatedListStackNode(4525, 2, cmVndWxhcihcaXRlci1zdGFyLXNlcHMoc29ydCgiUGF0dGVybiIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpXSkp, new NonTerminalStackNode(4521, 0, "Pattern", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(4522, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(4523, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(4524, 3, "layouts_LAYOUTLIST", null, null)}, false, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgic2V0Iixzb3J0KCJQYXR0ZXJuIikpLFtsaXQoInsiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImVsZW1lbnRzMCIsXGl0ZXItc3Rhci1zZXBzKHNvcnQoIlBhdHRlcm4iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJ9IildLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgic3BsaWNlIixzb3J0KCJQYXR0ZXJuIikpLFtsaXQoIioiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImFyZ3VtZW50Iixzb3J0KCJQYXR0ZXJuIikpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[3]; - tmp[2] = new NonTerminalStackNode(4543, 2, "Pattern", null, null); - tmp[0] = new LiteralStackNode(4541, 0, cHJvZChsaXQoIioiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQyLDQyKV0pXSx7fSk00, new int[] {42}, null, null); - tmp[1] = new NonTerminalStackNode(4542, 1, "layouts_LAYOUTLIST", null, null); + tmp[2] = new NonTerminalStackNode(4533, 2, "Pattern", null, null); + tmp[0] = new LiteralStackNode(4531, 0, cHJvZChsaXQoIioiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQyLDQyKV0pXSx7fSk00, new int[] {42}, null, null); + tmp[1] = new NonTerminalStackNode(4532, 1, "layouts_LAYOUTLIST", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgic3BsaWNlIixzb3J0KCJQYXR0ZXJuIikpLFtsaXQoIioiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImFyZ3VtZW50Iixzb3J0KCJQYXR0ZXJuIikpXSx7fSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgicmVpZmllZFR5cGUiLHNvcnQoIlBhdHRlcm4iKSksW2xpdCgidHlwZSIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIigiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInN5bWJvbCIsc29ydCgiUGF0dGVybiIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJkZWZpbml0aW9ucyIsc29ydCgiUGF0dGVybiIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIpIildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[11]; - tmp[2] = new LiteralStackNode(4549, 2, cHJvZChsaXQoIigiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pXSx7fSk00, new int[] {40}, null, null); - tmp[3] = new NonTerminalStackNode(4550, 3, "layouts_LAYOUTLIST", null, null); - tmp[6] = new LiteralStackNode(4554, 6, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null); - tmp[4] = new NonTerminalStackNode(4551, 4, "Pattern", null, null); - tmp[9] = new NonTerminalStackNode(4558, 9, "layouts_LAYOUTLIST", null, null); - tmp[0] = new LiteralStackNode(4547, 0, cHJvZChsaXQoInR5cGUiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEyMSwxMjEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSldLHt9KQ0000, new int[] {116,121,112,101}, null, null); - tmp[10] = new LiteralStackNode(4559, 10, cHJvZChsaXQoIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {41}, null, null); - tmp[1] = new NonTerminalStackNode(4548, 1, "layouts_LAYOUTLIST", null, null); - tmp[5] = new NonTerminalStackNode(4553, 5, "layouts_LAYOUTLIST", null, null); - tmp[7] = new NonTerminalStackNode(4555, 7, "layouts_LAYOUTLIST", null, null); - tmp[8] = new NonTerminalStackNode(4556, 8, "Pattern", null, null); + tmp[6] = new LiteralStackNode(4544, 6, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null); + tmp[2] = new LiteralStackNode(4539, 2, cHJvZChsaXQoIigiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pXSx7fSk00, new int[] {40}, null, null); + tmp[4] = new NonTerminalStackNode(4541, 4, "Pattern", null, null); + tmp[9] = new NonTerminalStackNode(4548, 9, "layouts_LAYOUTLIST", null, null); + tmp[0] = new LiteralStackNode(4537, 0, cHJvZChsaXQoInR5cGUiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEyMSwxMjEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSldLHt9KQ0000, new int[] {116,121,112,101}, null, null); + tmp[10] = new LiteralStackNode(4549, 10, cHJvZChsaXQoIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {41}, null, null); + tmp[1] = new NonTerminalStackNode(4538, 1, "layouts_LAYOUTLIST", null, null); + tmp[5] = new NonTerminalStackNode(4543, 5, "layouts_LAYOUTLIST", null, null); + tmp[7] = new NonTerminalStackNode(4545, 7, "layouts_LAYOUTLIST", null, null); + tmp[3] = new NonTerminalStackNode(4540, 3, "layouts_LAYOUTLIST", null, null); + tmp[8] = new NonTerminalStackNode(4546, 8, "Pattern", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgicmVpZmllZFR5cGUiLHNvcnQoIlBhdHRlcm4iKSksW2xpdCgidHlwZSIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIigiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInN5bWJvbCIsc29ydCgiUGF0dGVybiIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJkZWZpbml0aW9ucyIsc29ydCgiUGF0dGVybiIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIpIildLHt9KQ0000, tmp); } - protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJQYXR0ZXJuIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgiXFxpdGVyLXNlcHMoc29ydChcIlBhdHRlcm5cIiksW2xpdChcIixcIildKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoXGl0ZXItc2Vwcyhzb3J0KCJQYXR0ZXJuIiksW2xheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIiwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIildKSkpfSk00(ExpectBuilder builder) { - AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - - tmp[0] = new CharStackNode(4649, 0, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(4651, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[4] = new CharStackNode(4654, 4, new int[][]{{0,0}}, null, null); - tmp[1] = new LiteralStackNode(4650, 1, cHJvZChsaXQoIlxcaXRlci1zZXBzKHNvcnQoXCJQYXR0ZXJuXCIpLFtsaXQoXCIsXCIpXSkiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkyLDkyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NSw0NSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEyLDExMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODAsODApXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5MSw5MSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NCw0NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Myw5MyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {92,105,116,101,114,45,115,101,112,115,40,115,111,114,116,40,34,80,97,116,116,101,114,110,34,41,44,91,108,105,116,40,34,44,34,41,93,41}, null, null); - tmp[3] = new ListStackNode(4653, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(4652, 0, new int[][]{{48,57}}, null, null), true, null, null); - builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJQYXR0ZXJuIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgiXFxpdGVyLXNlcHMoc29ydChcIlBhdHRlcm5cIiksW2xpdChcIixcIildKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoXGl0ZXItc2Vwcyhzb3J0KCJQYXR0ZXJuIiksW2xheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIiwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIildKSkpfSk00, tmp); - } protected static final void _init_cHJvZChsYWJlbCgiZGVzY2VuZGFudCIsc29ydCgiUGF0dGVybiIpKSxbbGl0KCIvIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJwYXR0ZXJuIixzb3J0KCJQYXR0ZXJuIikpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[3]; - tmp[0] = new LiteralStackNode(4605, 0, cHJvZChsaXQoIi8iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ3LDQ3KV0pXSx7fSk00, new int[] {47}, null, null); - tmp[2] = new NonTerminalStackNode(4607, 2, "Pattern", null, null); - tmp[1] = new NonTerminalStackNode(4606, 1, "layouts_LAYOUTLIST", null, null); + tmp[0] = new LiteralStackNode(4595, 0, cHJvZChsaXQoIi8iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ3LDQ3KV0pXSx7fSk00, new int[] {47}, null, null); + tmp[2] = new NonTerminalStackNode(4597, 2, "Pattern", null, null); + tmp[1] = new NonTerminalStackNode(4596, 1, "layouts_LAYOUTLIST", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiZGVzY2VuZGFudCIsc29ydCgiUGF0dGVybiIpKSxbbGl0KCIvIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJwYXR0ZXJuIixzb3J0KCJQYXR0ZXJuIikpXSx7fSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgidmFyaWFibGVCZWNvbWVzIixzb3J0KCJQYXR0ZXJuIikpLFtsYWJlbCgibmFtZSIsbGV4KCJOYW1lIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIjoiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInBhdHRlcm4iLHNvcnQoIlBhdHRlcm4iKSldLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[3] = new NonTerminalStackNode(4626, 3, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(4624, 1, "layouts_LAYOUTLIST", null, null); - tmp[4] = new NonTerminalStackNode(4627, 4, "Pattern", null, null); - tmp[2] = new LiteralStackNode(4625, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[0] = new NonTerminalStackNode(4622, 0, "Name", null, null); + tmp[3] = new NonTerminalStackNode(4616, 3, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(4614, 1, "layouts_LAYOUTLIST", null, null); + tmp[4] = new NonTerminalStackNode(4617, 4, "Pattern", null, null); + tmp[2] = new LiteralStackNode(4615, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[0] = new NonTerminalStackNode(4612, 0, "Name", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgidmFyaWFibGVCZWNvbWVzIixzb3J0KCJQYXR0ZXJuIikpLFtsYWJlbCgibmFtZSIsbGV4KCJOYW1lIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIjoiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInBhdHRlcm4iLHNvcnQoIlBhdHRlcm4iKSldLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgidHlwZWRWYXJpYWJsZUJlY29tZXMiLHNvcnQoIlBhdHRlcm4iKSksW2xhYmVsKCJ0eXBlIixzb3J0KCJUeXBlIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgibmFtZSIsbGV4KCJOYW1lIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIjoiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInBhdHRlcm4iLHNvcnQoIlBhdHRlcm4iKSldLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[7]; - tmp[3] = new NonTerminalStackNode(4636, 3, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(4633, 1, "layouts_LAYOUTLIST", null, null); - tmp[5] = new NonTerminalStackNode(4638, 5, "layouts_LAYOUTLIST", null, null); - tmp[4] = new LiteralStackNode(4637, 4, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[2] = new NonTerminalStackNode(4634, 2, "Name", null, null); - tmp[6] = new NonTerminalStackNode(4639, 6, "Pattern", null, null); - tmp[0] = new NonTerminalStackNode(4631, 0, "Type", null, null); + tmp[3] = new NonTerminalStackNode(4626, 3, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(4623, 1, "layouts_LAYOUTLIST", null, null); + tmp[5] = new NonTerminalStackNode(4628, 5, "layouts_LAYOUTLIST", null, null); + tmp[4] = new LiteralStackNode(4627, 4, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[2] = new NonTerminalStackNode(4624, 2, "Name", null, null); + tmp[6] = new NonTerminalStackNode(4629, 6, "Pattern", null, null); + tmp[0] = new NonTerminalStackNode(4621, 0, "Type", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgidHlwZWRWYXJpYWJsZUJlY29tZXMiLHNvcnQoIlBhdHRlcm4iKSksW2xhYmVsKCJ0eXBlIixzb3J0KCJUeXBlIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgibmFtZSIsbGV4KCJOYW1lIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIjoiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInBhdHRlcm4iLHNvcnQoIlBhdHRlcm4iKSldLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgiYW50aSIsc29ydCgiUGF0dGVybiIpKSxbbGl0KCIhIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJwYXR0ZXJuIixzb3J0KCJQYXR0ZXJuIikpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[3]; - tmp[1] = new NonTerminalStackNode(4644, 1, "layouts_LAYOUTLIST", null, null); - tmp[2] = new NonTerminalStackNode(4645, 2, "Pattern", null, null); - tmp[0] = new LiteralStackNode(4643, 0, cHJvZChsaXQoIiEiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDMzLDMzKV0pXSx7fSk00, new int[] {33}, null, null); + tmp[1] = new NonTerminalStackNode(4634, 1, "layouts_LAYOUTLIST", null, null); + tmp[2] = new NonTerminalStackNode(4635, 2, "Pattern", null, null); + tmp[0] = new LiteralStackNode(4633, 0, cHJvZChsaXQoIiEiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDMzLDMzKV0pXSx7fSk00, new int[] {33}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiYW50aSIsc29ydCgiUGF0dGVybiIpKSxbbGl0KCIhIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJwYXR0ZXJuIixzb3J0KCJQYXR0ZXJuIikpXSx7fSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgidHlwZWRWYXJpYWJsZSIsc29ydCgiUGF0dGVybiIpKSxbbGFiZWwoInR5cGUiLHNvcnQoIlR5cGUiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJuYW1lIixsZXgoIk5hbWUiKSldLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[3]; - tmp[2] = new NonTerminalStackNode(4565, 2, "Name", null, null); - tmp[0] = new NonTerminalStackNode(4562, 0, "Type", null, null); - tmp[1] = new NonTerminalStackNode(4564, 1, "layouts_LAYOUTLIST", null, null); + tmp[2] = new NonTerminalStackNode(4555, 2, "Name", null, null); + tmp[0] = new NonTerminalStackNode(4552, 0, "Type", null, null); + tmp[1] = new NonTerminalStackNode(4554, 1, "layouts_LAYOUTLIST", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgidHlwZWRWYXJpYWJsZSIsc29ydCgiUGF0dGVybiIpKSxbbGFiZWwoInR5cGUiLHNvcnQoIlR5cGUiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJuYW1lIixsZXgoIk5hbWUiKSldLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgiY29uY3JldGUiLHNvcnQoIlBhdHRlcm4iKSksW2xhYmVsKCJjb25jcmV0ZSIsbGV4KCJDb25jcmV0ZSIpKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new NonTerminalStackNode(4662, 0, "Concrete", null, null); + tmp[0] = new NonTerminalStackNode(4639, 0, "Concrete", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiY29uY3JldGUiLHNvcnQoIlBhdHRlcm4iKSksW2xhYmVsKCJjb25jcmV0ZSIsbGV4KCJDb25jcmV0ZSIpKV0se30p, tmp); } protected static final void _init_cHJvZChsYWJlbCgibXVsdGlWYXJpYWJsZSIsc29ydCgiUGF0dGVybiIpKSxbbGFiZWwoInF1YWxpZmllZE5hbWUiLHNvcnQoIlF1YWxpZmllZE5hbWUiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiKiIpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[3]; - tmp[2] = new LiteralStackNode(4572, 2, cHJvZChsaXQoIioiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQyLDQyKV0pXSx7fSk00, new int[] {42}, null, null); - tmp[0] = new NonTerminalStackNode(4569, 0, "QualifiedName", null, null); - tmp[1] = new NonTerminalStackNode(4571, 1, "layouts_LAYOUTLIST", null, null); + tmp[2] = new LiteralStackNode(4562, 2, cHJvZChsaXQoIioiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQyLDQyKV0pXSx7fSk00, new int[] {42}, null, null); + tmp[0] = new NonTerminalStackNode(4559, 0, "QualifiedName", null, null); + tmp[1] = new NonTerminalStackNode(4561, 1, "layouts_LAYOUTLIST", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgibXVsdGlWYXJpYWJsZSIsc29ydCgiUGF0dGVybiIpKSxbbGFiZWwoInF1YWxpZmllZE5hbWUiLHNvcnQoIlF1YWxpZmllZE5hbWUiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiKiIpXSx7fSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJQYXR0ZXJuIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgiXFxpdGVyLXN0YXItc2Vwcyhzb3J0KFwiUGF0dGVyblwiKSxbbGl0KFwiLFwiKV0pIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihcaXRlci1zdGFyLXNlcHMoc29ydCgiUGF0dGVybiIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpXSkpKX0p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[4] = new CharStackNode(4671, 4, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(4668, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[0] = new CharStackNode(4666, 0, new int[][]{{0,0}}, null, null); - tmp[3] = new ListStackNode(4670, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(4669, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[1] = new LiteralStackNode(4667, 1, cHJvZChsaXQoIlxcaXRlci1zdGFyLXNlcHMoc29ydChcIlBhdHRlcm5cIiksW2xpdChcIixcIildKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoOTIsOTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ1LDQ1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDUsNDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDgwLDgwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NCw0NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTEsOTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDQsNDQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTMsOTMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {92,105,116,101,114,45,115,116,97,114,45,115,101,112,115,40,115,111,114,116,40,34,80,97,116,116,101,114,110,34,41,44,91,108,105,116,40,34,44,34,41,93,41}, null, null); + tmp[4] = new CharStackNode(4648, 4, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(4645, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[0] = new CharStackNode(4643, 0, new int[][]{{0,0}}, null, null); + tmp[3] = new ListStackNode(4647, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(4646, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[1] = new LiteralStackNode(4644, 1, cHJvZChsaXQoIlxcaXRlci1zdGFyLXNlcHMoc29ydChcIlBhdHRlcm5cIiksW2xpdChcIixcIildKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoOTIsOTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ1LDQ1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDUsNDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDgwLDgwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NCw0NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTEsOTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDQsNDQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTMsOTMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {92,105,116,101,114,45,115,116,97,114,45,115,101,112,115,40,115,111,114,116,40,34,80,97,116,116,101,114,110,34,41,44,91,108,105,116,40,34,44,34,41,93,41}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJQYXR0ZXJuIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgiXFxpdGVyLXN0YXItc2Vwcyhzb3J0KFwiUGF0dGVyblwiKSxbbGl0KFwiLFwiKV0pIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihcaXRlci1zdGFyLXNlcHMoc29ydCgiUGF0dGVybiIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpXSkpKX0p, tmp); } protected static final void _init_cHJvZChsYWJlbCgibmVnYXRpdmUiLHNvcnQoIlBhdHRlcm4iKSksW2xpdCgiLSIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgiYXJndW1lbnQiLHNvcnQoIlBhdHRlcm4iKSldLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[3]; - tmp[0] = new LiteralStackNode(4575, 0, cHJvZChsaXQoIi0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ1LDQ1KV0pXSx7fSk00, new int[] {45}, null, null); - tmp[2] = new NonTerminalStackNode(4577, 2, "Pattern", null, null); - tmp[1] = new NonTerminalStackNode(4576, 1, "layouts_LAYOUTLIST", null, null); + tmp[0] = new LiteralStackNode(4565, 0, cHJvZChsaXQoIi0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ1LDQ1KV0pXSx7fSk00, new int[] {45}, null, null); + tmp[2] = new NonTerminalStackNode(4567, 2, "Pattern", null, null); + tmp[1] = new NonTerminalStackNode(4566, 1, "layouts_LAYOUTLIST", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgibmVnYXRpdmUiLHNvcnQoIlBhdHRlcm4iKSksW2xpdCgiLSIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgiYXJndW1lbnQiLHNvcnQoIlBhdHRlcm4iKSldLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgiYXNUeXBlIixzb3J0KCJQYXR0ZXJuIikpLFtsaXQoIlsiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInR5cGUiLHNvcnQoIlR5cGUiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiXSIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgiYXJndW1lbnQiLHNvcnQoIlBhdHRlcm4iKSldLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[7]; - tmp[3] = new NonTerminalStackNode(4615, 3, "layouts_LAYOUTLIST", null, null); - tmp[0] = new LiteralStackNode(4611, 0, cHJvZChsaXQoIlsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkxLDkxKV0pXSx7fSk00, new int[] {91}, null, null); - tmp[6] = new NonTerminalStackNode(4618, 6, "Pattern", null, null); - tmp[2] = new NonTerminalStackNode(4613, 2, "Type", null, null); - tmp[4] = new LiteralStackNode(4616, 4, cHJvZChsaXQoIl0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkzLDkzKV0pXSx7fSk00, new int[] {93}, null, null); - tmp[1] = new NonTerminalStackNode(4612, 1, "layouts_LAYOUTLIST", null, null); - tmp[5] = new NonTerminalStackNode(4617, 5, "layouts_LAYOUTLIST", null, null); + tmp[3] = new NonTerminalStackNode(4605, 3, "layouts_LAYOUTLIST", null, null); + tmp[0] = new LiteralStackNode(4601, 0, cHJvZChsaXQoIlsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkxLDkxKV0pXSx7fSk00, new int[] {91}, null, null); + tmp[6] = new NonTerminalStackNode(4608, 6, "Pattern", null, null); + tmp[2] = new NonTerminalStackNode(4603, 2, "Type", null, null); + tmp[4] = new LiteralStackNode(4606, 4, cHJvZChsaXQoIl0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkzLDkzKV0pXSx7fSk00, new int[] {93}, null, null); + tmp[1] = new NonTerminalStackNode(4602, 1, "layouts_LAYOUTLIST", null, null); + tmp[5] = new NonTerminalStackNode(4607, 5, "layouts_LAYOUTLIST", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiYXNUeXBlIixzb3J0KCJQYXR0ZXJuIikpLFtsaXQoIlsiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInR5cGUiLHNvcnQoIlR5cGUiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiXSIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgiYXJndW1lbnQiLHNvcnQoIlBhdHRlcm4iKSldLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgicXVhbGlmaWVkTmFtZSIsc29ydCgiUGF0dGVybiIpKSxbbGFiZWwoInF1YWxpZmllZE5hbWUiLHNvcnQoIlF1YWxpZmllZE5hbWUiKSldLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new NonTerminalStackNode(4594, 0, "QualifiedName", null, null); + tmp[0] = new NonTerminalStackNode(4584, 0, "QualifiedName", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgicXVhbGlmaWVkTmFtZSIsc29ydCgiUGF0dGVybiIpKSxbbGFiZWwoInF1YWxpZmllZE5hbWUiLHNvcnQoIlF1YWxpZmllZE5hbWUiKSldLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgic3BsaWNlUGx1cyIsc29ydCgiUGF0dGVybiIpKSxbbGl0KCIrIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJhcmd1bWVudCIsc29ydCgiUGF0dGVybiIpKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[3]; - tmp[1] = new NonTerminalStackNode(4599, 1, "layouts_LAYOUTLIST", null, null); - tmp[0] = new LiteralStackNode(4598, 0, cHJvZChsaXQoIisiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQzLDQzKV0pXSx7fSk00, new int[] {43}, null, null); - tmp[2] = new NonTerminalStackNode(4600, 2, "Pattern", null, null); + tmp[0] = new LiteralStackNode(4588, 0, cHJvZChsaXQoIisiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQzLDQzKV0pXSx7fSk00, new int[] {43}, null, null); + tmp[2] = new NonTerminalStackNode(4590, 2, "Pattern", null, null); + tmp[1] = new NonTerminalStackNode(4589, 1, "layouts_LAYOUTLIST", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgic3BsaWNlUGx1cyIsc29ydCgiUGF0dGVybiIpKSxbbGl0KCIrIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJhcmd1bWVudCIsc29ydCgiUGF0dGVybiIpKV0se30p, tmp); } protected static final void _init_cHJvZChsYWJlbCgibWFwIixzb3J0KCJQYXR0ZXJuIikpLFtsaXQoIigiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoIm1hcHBpbmdzIixcaXRlci1zdGFyLXNlcHMoXHBhcmFtZXRlcml6ZWQtc29ydCgiTWFwcGluZyIsW3NvcnQoIlBhdHRlcm4iKV0pLFtsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpXSkpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIikiKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[0] = new LiteralStackNode(4581, 0, cHJvZChsaXQoIigiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pXSx7fSk00, new int[] {40}, null, null); - tmp[4] = new LiteralStackNode(4591, 4, cHJvZChsaXQoIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {41}, null, null); - tmp[2] = new SeparatedListStackNode(4588, 2, cmVndWxhcihcaXRlci1zdGFyLXNlcHMoXHBhcmFtZXRlcml6ZWQtc29ydCgiTWFwcGluZyIsW3NvcnQoIlBhdHRlcm4iKV0pLFtsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpXSkp, new NonTerminalStackNode(4584, 0, "Mapping_W3NvcnQoIlBhdHRlcm4iKV000", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(4585, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(4586, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(4587, 3, "layouts_LAYOUTLIST", null, null)}, false, null, null); - tmp[3] = new NonTerminalStackNode(4590, 3, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(4582, 1, "layouts_LAYOUTLIST", null, null); + tmp[0] = new LiteralStackNode(4571, 0, cHJvZChsaXQoIigiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pXSx7fSk00, new int[] {40}, null, null); + tmp[4] = new LiteralStackNode(4581, 4, cHJvZChsaXQoIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {41}, null, null); + tmp[2] = new SeparatedListStackNode(4578, 2, cmVndWxhcihcaXRlci1zdGFyLXNlcHMoXHBhcmFtZXRlcml6ZWQtc29ydCgiTWFwcGluZyIsW3NvcnQoIlBhdHRlcm4iKV0pLFtsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpXSkp, new NonTerminalStackNode(4574, 0, "Mapping_W3NvcnQoIlBhdHRlcm4iKV000", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(4575, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(4576, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(4577, 3, "layouts_LAYOUTLIST", null, null)}, false, null, null); + tmp[3] = new NonTerminalStackNode(4580, 3, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(4572, 1, "layouts_LAYOUTLIST", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgibWFwIixzb3J0KCJQYXR0ZXJuIikpLFtsaXQoIigiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoIm1hcHBpbmdzIixcaXRlci1zdGFyLXNlcHMoXHBhcmFtZXRlcml6ZWQtc29ydCgiTWFwcGluZyIsW3NvcnQoIlBhdHRlcm4iKV0pLFtsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpXSkpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIikiKV0se30p, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJQYXR0ZXJuIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIlBhdHRlcm5cIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKHNvcnQoIlBhdHRlcm4iKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[0] = new CharStackNode(4679, 0, new int[][]{{0,0}}, null, null); - tmp[4] = new CharStackNode(4684, 4, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(4681, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[3] = new ListStackNode(4683, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(4682, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[1] = new LiteralStackNode(4680, 1, cHJvZChsaXQoInNvcnQoXCJQYXR0ZXJuXCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDgwLDgwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {115,111,114,116,40,34,80,97,116,116,101,114,110,34,41}, null, null); + tmp[0] = new CharStackNode(4656, 0, new int[][]{{0,0}}, null, null); + tmp[4] = new CharStackNode(4661, 4, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(4658, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[3] = new ListStackNode(4660, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(4659, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[1] = new LiteralStackNode(4657, 1, cHJvZChsaXQoInNvcnQoXCJQYXR0ZXJuXCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDgwLDgwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {115,111,114,116,40,34,80,97,116,116,101,114,110,34,41}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJQYXR0ZXJuIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIlBhdHRlcm5cIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKHNvcnQoIlBhdHRlcm4iKSkpfSk00, tmp); } public static void init(ExpectBuilder builder){ @@ -7596,7 +7583,7 @@ public static void init(ExpectBuilder builder){ _init_cHJvZChsYWJlbCgiY2FsbE9yVHJlZSIsc29ydCgiUGF0dGVybiIpKSxbbGFiZWwoImV4cHJlc3Npb24iLHNvcnQoIlBhdHRlcm4iKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiKCIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgiYXJndW1lbnRzIixcaXRlci1zdGFyLXNlcHMoc29ydCgiUGF0dGVybiIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpXSkpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgia2V5d29yZEFyZ3VtZW50cyIsXHBhcmFtZXRlcml6ZWQtc29ydCgiS2V5d29yZEFyZ3VtZW50cyIsW3NvcnQoIlBhdHRlcm4iKV0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIpIildLHt9KQ0000(builder); - _init_cHJvZChsYWJlbCgidHVwbGUiLHNvcnQoIlBhdHRlcm4iKSksW2xpdCgiXDwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImVsZW1lbnRzIixcaXRlci1zZXBzKHNvcnQoIlBhdHRlcm4iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJcPiIpXSx7fSk00(builder); + _init_cHJvZChsYWJlbCgidHVwbGUiLHNvcnQoIlBhdHRlcm4iKSksW2xpdCgiXDwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImVsZW1lbnRzMCIsXGl0ZXItc3Rhci1zZXBzKHNvcnQoIlBhdHRlcm4iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJcPiIpXSx7fSk00(builder); _init_cHJvZChsYWJlbCgibGl0ZXJhbCIsc29ydCgiUGF0dGVybiIpKSxbbGFiZWwoImxpdGVyYWwiLHNvcnQoIkxpdGVyYWwiKSldLHt9KQ0000(builder); @@ -7606,8 +7593,6 @@ public static void init(ExpectBuilder builder){ _init_cHJvZChsYWJlbCgicmVpZmllZFR5cGUiLHNvcnQoIlBhdHRlcm4iKSksW2xpdCgidHlwZSIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIigiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInN5bWJvbCIsc29ydCgiUGF0dGVybiIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJkZWZpbml0aW9ucyIsc29ydCgiUGF0dGVybiIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIpIildLHt9KQ0000(builder); - _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJQYXR0ZXJuIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgiXFxpdGVyLXNlcHMoc29ydChcIlBhdHRlcm5cIiksW2xpdChcIixcIildKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoXGl0ZXItc2Vwcyhzb3J0KCJQYXR0ZXJuIiksW2xheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIiwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIildKSkpfSk00(builder); - _init_cHJvZChsYWJlbCgiZGVzY2VuZGFudCIsc29ydCgiUGF0dGVybiIpKSxbbGl0KCIvIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJwYXR0ZXJuIixzb3J0KCJQYXR0ZXJuIikpXSx7fSk00(builder); _init_cHJvZChsYWJlbCgidmFyaWFibGVCZWNvbWVzIixzb3J0KCJQYXR0ZXJuIikpLFtsYWJlbCgibmFtZSIsbGV4KCJOYW1lIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIjoiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInBhdHRlcm4iLHNvcnQoIlBhdHRlcm4iKSldLHt9KQ0000(builder); @@ -7650,19 +7635,19 @@ protected static class PostPathChars { protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIlBvc3RQYXRoQ2hhcnMiKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJzb3J0KFwiUG9zdFBhdGhDaGFyc1wiKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIobGV4KCJQb3N0UGF0aENoYXJzIikpKX0p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[3] = new ListStackNode(4693, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(4692, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[4] = new CharStackNode(4694, 4, new int[][]{{0,0}}, null, null); - tmp[0] = new CharStackNode(4689, 0, new int[][]{{0,0}}, null, null); - tmp[1] = new LiteralStackNode(4690, 1, cHJvZChsaXQoInNvcnQoXCJQb3N0UGF0aENoYXJzXCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDgwLDgwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4MCw4MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNCwxMDQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDY3LDY3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDQsMTA0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {115,111,114,116,40,34,80,111,115,116,80,97,116,104,67,104,97,114,115,34,41}, null, null); - tmp[2] = new LiteralStackNode(4691, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[3] = new ListStackNode(4670, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(4669, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[4] = new CharStackNode(4671, 4, new int[][]{{0,0}}, null, null); + tmp[0] = new CharStackNode(4666, 0, new int[][]{{0,0}}, null, null); + tmp[1] = new LiteralStackNode(4667, 1, cHJvZChsaXQoInNvcnQoXCJQb3N0UGF0aENoYXJzXCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDgwLDgwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4MCw4MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNCwxMDQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDY3LDY3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDQsMTA0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {115,111,114,116,40,34,80,111,115,116,80,97,116,104,67,104,97,114,115,34,41}, null, null); + tmp[2] = new LiteralStackNode(4668, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIlBvc3RQYXRoQ2hhcnMiKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJzb3J0KFwiUG9zdFBhdGhDaGFyc1wiKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIobGV4KCJQb3N0UGF0aENoYXJzIikpKX0p, tmp); } protected static final void _init_cHJvZChsZXgoIlBvc3RQYXRoQ2hhcnMiKSxbbGl0KCJcPiIpLGxleCgiVVJMQ2hhcnMiKSxsaXQoInwiKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[3]; - tmp[0] = new LiteralStackNode(4697, 0, cHJvZChsaXQoIlw11IiksW1xjaGFyLWNsYXNzKFtyYW5nZSg2Miw2MildKV0se30p, new int[] {62}, null, null); - tmp[2] = new LiteralStackNode(4699, 2, cHJvZChsaXQoInwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyNCwxMjQpXSldLHt9KQ0000, new int[] {124}, null, null); - tmp[1] = new NonTerminalStackNode(4698, 1, "URLChars", null, null); + tmp[0] = new LiteralStackNode(4674, 0, cHJvZChsaXQoIlw11IiksW1xjaGFyLWNsYXNzKFtyYW5nZSg2Miw2MildKV0se30p, new int[] {62}, null, null); + tmp[2] = new LiteralStackNode(4676, 2, cHJvZChsaXQoInwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyNCwxMjQpXSldLHt9KQ0000, new int[] {124}, null, null); + tmp[1] = new NonTerminalStackNode(4675, 1, "URLChars", null, null); builder.addAlternative(RascalParser.cHJvZChsZXgoIlBvc3RQYXRoQ2hhcnMiKSxbbGl0KCJcPiIpLGxleCgiVVJMQ2hhcnMiKSxsaXQoInwiKV0se30p, tmp); } public static void init(ExpectBuilder builder){ @@ -7685,48 +7670,48 @@ protected static class StringCharacter { protected static final void _init_cHJvZChsZXgoIlN0cmluZ0NoYXJhY3RlciIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTAsMTApXSksXGl0ZXItc3RhcihcY2hhci1jbGFzcyhbcmFuZ2UoOSw5KSxyYW5nZSgzMiwzMikscmFuZ2UoMTYwLDE2MCkscmFuZ2UoNTc2MCw1NzYwKSxyYW5nZSg4MTkyLDgyMDIpLHJhbmdlKDgyMzksODIzOSkscmFuZ2UoODI4Nyw4Mjg3KSxyYW5nZSgxMjI4OCwxMjI4OCldKSksXGNoYXItY2xhc3MoW3JhbmdlKDM5LDM5KV0pXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[3]; - tmp[1] = new ListStackNode(4704, 1, cmVndWxhcihcaXRlci1zdGFyKFxjaGFyLWNsYXNzKFtyYW5nZSg5LDkpLHJhbmdlKDMyLDMyKSxyYW5nZSgxNjAsMTYwKSxyYW5nZSg1NzYwLDU3NjApLHJhbmdlKDgxOTIsODIwMikscmFuZ2UoODIzOSw4MjM5KSxyYW5nZSg4Mjg3LDgyODcpLHJhbmdlKDEyMjg4LDEyMjg4KV0pKSk00, new CharStackNode(4703, 0, new int[][]{{9,9},{32,32},{160,160},{5760,5760},{8192,8202},{8239,8239},{8287,8287},{12288,12288}}, null, null), false, null, null); - tmp[2] = new CharStackNode(4705, 2, new int[][]{{39,39}}, null, null); - tmp[0] = new CharStackNode(4702, 0, new int[][]{{10,10}}, null, null); + tmp[1] = new ListStackNode(4681, 1, cmVndWxhcihcaXRlci1zdGFyKFxjaGFyLWNsYXNzKFtyYW5nZSg5LDkpLHJhbmdlKDMyLDMyKSxyYW5nZSgxNjAsMTYwKSxyYW5nZSg1NzYwLDU3NjApLHJhbmdlKDgxOTIsODIwMikscmFuZ2UoODIzOSw4MjM5KSxyYW5nZSg4Mjg3LDgyODcpLHJhbmdlKDEyMjg4LDEyMjg4KV0pKSk00, new CharStackNode(4680, 0, new int[][]{{9,9},{32,32},{160,160},{5760,5760},{8192,8202},{8239,8239},{8287,8287},{12288,12288}}, null, null), false, null, null); + tmp[2] = new CharStackNode(4682, 2, new int[][]{{39,39}}, null, null); + tmp[0] = new CharStackNode(4679, 0, new int[][]{{10,10}}, null, null); builder.addAlternative(RascalParser.cHJvZChsZXgoIlN0cmluZ0NoYXJhY3RlciIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTAsMTApXSksXGl0ZXItc3RhcihcY2hhci1jbGFzcyhbcmFuZ2UoOSw5KSxyYW5nZSgzMiwzMikscmFuZ2UoMTYwLDE2MCkscmFuZ2UoNTc2MCw1NzYwKSxyYW5nZSg4MTkyLDgyMDIpLHJhbmdlKDgyMzksODIzOSkscmFuZ2UoODI4Nyw4Mjg3KSxyYW5nZSgxMjI4OCwxMjI4OCldKSksXGNoYXItY2xhc3MoW3JhbmdlKDM5LDM5KV0pXSx7fSk00, tmp); } protected static final void _init_cHJvZChsZXgoIlN0cmluZ0NoYXJhY3RlciIpLFtsaXQoIlxcIiksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KSxyYW5nZSgzOSwzOSkscmFuZ2UoNjAsNjApLHJhbmdlKDYyLDYyKSxyYW5nZSg5Miw5MikscmFuZ2UoOTgsOTgpLHJhbmdlKDEwMiwxMDIpLHJhbmdlKDExMCwxMTApLHJhbmdlKDExNCwxMTQpLHJhbmdlKDExNiwxMTYpXSldLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[2]; - tmp[0] = new LiteralStackNode(4707, 0, cHJvZChsaXQoIlxcIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg5Miw5MildKV0se30p, new int[] {92}, null, null); - tmp[1] = new CharStackNode(4708, 1, new int[][]{{34,34},{39,39},{60,60},{62,62},{92,92},{98,98},{102,102},{110,110},{114,114},{116,116}}, null, null); + tmp[0] = new LiteralStackNode(4684, 0, cHJvZChsaXQoIlxcIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg5Miw5MildKV0se30p, new int[] {92}, null, null); + tmp[1] = new CharStackNode(4685, 1, new int[][]{{34,34},{39,39},{60,60},{62,62},{92,92},{98,98},{102,102},{110,110},{114,114},{116,116}}, null, null); builder.addAlternative(RascalParser.cHJvZChsZXgoIlN0cmluZ0NoYXJhY3RlciIpLFtsaXQoIlxcIiksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KSxyYW5nZSgzOSwzOSkscmFuZ2UoNjAsNjApLHJhbmdlKDYyLDYyKSxyYW5nZSg5Miw5MikscmFuZ2UoOTgsOTgpLHJhbmdlKDEwMiwxMDIpLHJhbmdlKDExMCwxMTApLHJhbmdlKDExNCwxMTQpLHJhbmdlKDExNiwxMTYpXSldLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIlN0cmluZ0NoYXJhY3RlciIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJTdHJpbmdDaGFyYWN0ZXJcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKGxleCgiU3RyaW5nQ2hhcmFjdGVyIikpKX0p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[1] = new LiteralStackNode(4712, 1, cHJvZChsaXQoInNvcnQoXCJTdHJpbmdDaGFyYWN0ZXJcIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODMsODMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMywxMDMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDY3LDY3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDQsMTA0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk5LDk5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {115,111,114,116,40,34,83,116,114,105,110,103,67,104,97,114,97,99,116,101,114,34,41}, null, null); - tmp[3] = new ListStackNode(4715, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(4714, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[0] = new CharStackNode(4711, 0, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(4713, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[4] = new CharStackNode(4716, 4, new int[][]{{0,0}}, null, null); + tmp[1] = new LiteralStackNode(4689, 1, cHJvZChsaXQoInNvcnQoXCJTdHJpbmdDaGFyYWN0ZXJcIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODMsODMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMywxMDMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDY3LDY3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDQsMTA0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk5LDk5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {115,111,114,116,40,34,83,116,114,105,110,103,67,104,97,114,97,99,116,101,114,34,41}, null, null); + tmp[3] = new ListStackNode(4692, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(4691, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[0] = new CharStackNode(4688, 0, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(4690, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[4] = new CharStackNode(4693, 4, new int[][]{{0,0}}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIlN0cmluZ0NoYXJhY3RlciIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJTdHJpbmdDaGFyYWN0ZXJcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKGxleCgiU3RyaW5nQ2hhcmFjdGVyIikpKX0p, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIlN0cmluZ0NoYXJhY3RlciIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoIlxcaXRlci1zdGFyKHNvcnQoXCJTdHJpbmdDaGFyYWN0ZXJcIikpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihcaXRlci1zdGFyKGxleCgiU3RyaW5nQ2hhcmFjdGVyIikpKSl9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[1] = new LiteralStackNode(4721, 1, cHJvZChsaXQoIlxcaXRlci1zdGFyKHNvcnQoXCJTdHJpbmdDaGFyYWN0ZXJcIikpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg5Miw5MildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDUsNDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4Myw4MyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAzLDEwMyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNjcsNjcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNCwxMDQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTksOTkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {92,105,116,101,114,45,115,116,97,114,40,115,111,114,116,40,34,83,116,114,105,110,103,67,104,97,114,97,99,116,101,114,34,41,41}, null, null); - tmp[3] = new ListStackNode(4724, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(4723, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[4] = new CharStackNode(4725, 4, new int[][]{{0,0}}, null, null); - tmp[0] = new CharStackNode(4720, 0, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(4722, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[1] = new LiteralStackNode(4698, 1, cHJvZChsaXQoIlxcaXRlci1zdGFyKHNvcnQoXCJTdHJpbmdDaGFyYWN0ZXJcIikpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg5Miw5MildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDUsNDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4Myw4MyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAzLDEwMyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNjcsNjcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNCwxMDQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTksOTkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {92,105,116,101,114,45,115,116,97,114,40,115,111,114,116,40,34,83,116,114,105,110,103,67,104,97,114,97,99,116,101,114,34,41,41}, null, null); + tmp[3] = new ListStackNode(4701, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(4700, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[4] = new CharStackNode(4702, 4, new int[][]{{0,0}}, null, null); + tmp[0] = new CharStackNode(4697, 0, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(4699, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIlN0cmluZ0NoYXJhY3RlciIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoIlxcaXRlci1zdGFyKHNvcnQoXCJTdHJpbmdDaGFyYWN0ZXJcIikpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihcaXRlci1zdGFyKGxleCgiU3RyaW5nQ2hhcmFjdGVyIikpKSl9KQ0000, tmp); } protected static final void _init_cHJvZChsZXgoIlN0cmluZ0NoYXJhY3RlciIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMSwzMykscmFuZ2UoMzUsMzgpLHJhbmdlKDQwLDU5KSxyYW5nZSg2MSw2MSkscmFuZ2UoNjMsOTEpLHJhbmdlKDkzLDExMTQxMTEpXSldLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new CharStackNode(4729, 0, new int[][]{{1,33},{35,38},{40,59},{61,61},{63,91},{93,1114111}}, null, null); + tmp[0] = new CharStackNode(4706, 0, new int[][]{{1,33},{35,38},{40,59},{61,61},{63,91},{93,1114111}}, null, null); builder.addAlternative(RascalParser.cHJvZChsZXgoIlN0cmluZ0NoYXJhY3RlciIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMSwzMykscmFuZ2UoMzUsMzgpLHJhbmdlKDQwLDU5KSxyYW5nZSg2MSw2MSkscmFuZ2UoNjMsOTEpLHJhbmdlKDkzLDExMTQxMTEpXSldLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsZXgoIlN0cmluZ0NoYXJhY3RlciIpLFtsZXgoIlVuaWNvZGVFc2NhcGUiKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new NonTerminalStackNode(4731, 0, "UnicodeEscape", null, null); + tmp[0] = new NonTerminalStackNode(4708, 0, "UnicodeEscape", null, null); builder.addAlternative(RascalParser.cHJvZChsZXgoIlN0cmluZ0NoYXJhY3RlciIpLFtsZXgoIlVuaWNvZGVFc2NhcGUiKV0se30p, tmp); } public static void init(ExpectBuilder builder){ @@ -7757,65 +7742,65 @@ protected static class ConcretePart { protected static final void _init_cHJvZChsYWJlbCgibmV3bGluZSIsbGV4KCJDb25jcmV0ZVBhcnQiKSksW2xpdCgiXG4iKSxcaXRlci1zdGFyKFxjaGFyLWNsYXNzKFtyYW5nZSg5LDkpLHJhbmdlKDMyLDMyKSxyYW5nZSgxNjAsMTYwKSxyYW5nZSg1NzYwLDU3NjApLHJhbmdlKDgxOTIsODIwMikscmFuZ2UoODIzOSw4MjM5KSxyYW5nZSg4Mjg3LDgyODcpLHJhbmdlKDEyMjg4LDEyMjg4KV0pKSxsaXQoIlwnIildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[3]; - tmp[1] = new ListStackNode(4999, 1, cmVndWxhcihcaXRlci1zdGFyKFxjaGFyLWNsYXNzKFtyYW5nZSg5LDkpLHJhbmdlKDMyLDMyKSxyYW5nZSgxNjAsMTYwKSxyYW5nZSg1NzYwLDU3NjApLHJhbmdlKDgxOTIsODIwMikscmFuZ2UoODIzOSw4MjM5KSxyYW5nZSg4Mjg3LDgyODcpLHJhbmdlKDEyMjg4LDEyMjg4KV0pKSk00, new CharStackNode(4998, 0, new int[][]{{9,9},{32,32},{160,160},{5760,5760},{8192,8202},{8239,8239},{8287,8287},{12288,12288}}, null, null), false, null, null); - tmp[2] = new LiteralStackNode(5000, 2, cHJvZChsaXQoIlwnIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgzOSwzOSldKV0se30p, new int[] {39}, null, null); - tmp[0] = new LiteralStackNode(4997, 0, cHJvZChsaXQoIlxuIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMCwxMCldKV0se30p, new int[] {10}, null, null); + tmp[1] = new ListStackNode(4976, 1, cmVndWxhcihcaXRlci1zdGFyKFxjaGFyLWNsYXNzKFtyYW5nZSg5LDkpLHJhbmdlKDMyLDMyKSxyYW5nZSgxNjAsMTYwKSxyYW5nZSg1NzYwLDU3NjApLHJhbmdlKDgxOTIsODIwMikscmFuZ2UoODIzOSw4MjM5KSxyYW5nZSg4Mjg3LDgyODcpLHJhbmdlKDEyMjg4LDEyMjg4KV0pKSk00, new CharStackNode(4975, 0, new int[][]{{9,9},{32,32},{160,160},{5760,5760},{8192,8202},{8239,8239},{8287,8287},{12288,12288}}, null, null), false, null, null); + tmp[2] = new LiteralStackNode(4977, 2, cHJvZChsaXQoIlwnIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgzOSwzOSldKV0se30p, new int[] {39}, null, null); + tmp[0] = new LiteralStackNode(4974, 0, cHJvZChsaXQoIlxuIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMCwxMCldKV0se30p, new int[] {10}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgibmV3bGluZSIsbGV4KCJDb25jcmV0ZVBhcnQiKSksW2xpdCgiXG4iKSxcaXRlci1zdGFyKFxjaGFyLWNsYXNzKFtyYW5nZSg5LDkpLHJhbmdlKDMyLDMyKSxyYW5nZSgxNjAsMTYwKSxyYW5nZSg1NzYwLDU3NjApLHJhbmdlKDgxOTIsODIwMikscmFuZ2UoODIzOSw4MjM5KSxyYW5nZSg4Mjg3LDgyODcpLHJhbmdlKDEyMjg4LDEyMjg4KV0pKSxsaXQoIlwnIildLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgiaG9sZSIsbGV4KCJDb25jcmV0ZVBhcnQiKSksW2xhYmVsKCJob2xlIixzb3J0KCJDb25jcmV0ZUhvbGUiKSldLHt0YWcoImNhdGVnb3J5Iigic3RyaW5nIikpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new NonTerminalStackNode(5003, 0, "ConcreteHole", null, null); + tmp[0] = new NonTerminalStackNode(4980, 0, "ConcreteHole", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiaG9sZSIsbGV4KCJDb25jcmV0ZVBhcnQiKSksW2xhYmVsKCJob2xlIixzb3J0KCJDb25jcmV0ZUhvbGUiKSldLHt0YWcoImNhdGVnb3J5Iigic3RyaW5nIikpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIkNvbmNyZXRlUGFydCIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoIlxcaXRlci1zdGFyKHNvcnQoXCJDb25jcmV0ZVBhcnRcIikpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihcaXRlci1zdGFyKGxleCgiQ29uY3JldGVQYXJ0IikpKSl9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[1] = new LiteralStackNode(5008, 1, cHJvZChsaXQoIlxcaXRlci1zdGFyKHNvcnQoXCJDb25jcmV0ZVBhcnRcIikpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg5Miw5MildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDUsNDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg2Nyw2NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTksOTkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDgwLDgwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {92,105,116,101,114,45,115,116,97,114,40,115,111,114,116,40,34,67,111,110,99,114,101,116,101,80,97,114,116,34,41,41}, null, null); - tmp[4] = new CharStackNode(5012, 4, new int[][]{{0,0}}, null, null); - tmp[0] = new CharStackNode(5007, 0, new int[][]{{0,0}}, null, null); - tmp[3] = new ListStackNode(5011, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(5010, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[2] = new LiteralStackNode(5009, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[1] = new LiteralStackNode(4985, 1, cHJvZChsaXQoIlxcaXRlci1zdGFyKHNvcnQoXCJDb25jcmV0ZVBhcnRcIikpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg5Miw5MildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDUsNDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg2Nyw2NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTksOTkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDgwLDgwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {92,105,116,101,114,45,115,116,97,114,40,115,111,114,116,40,34,67,111,110,99,114,101,116,101,80,97,114,116,34,41,41}, null, null); + tmp[4] = new CharStackNode(4989, 4, new int[][]{{0,0}}, null, null); + tmp[0] = new CharStackNode(4984, 0, new int[][]{{0,0}}, null, null); + tmp[3] = new ListStackNode(4988, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(4987, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[2] = new LiteralStackNode(4986, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIkNvbmNyZXRlUGFydCIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoIlxcaXRlci1zdGFyKHNvcnQoXCJDb25jcmV0ZVBhcnRcIikpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihcaXRlci1zdGFyKGxleCgiQ29uY3JldGVQYXJ0IikpKSl9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgiYnMiLGxleCgiQ29uY3JldGVQYXJ0IikpLFtsaXQoIlxcXFwiKV0se3RhZygiY2F0ZWdvcnkiKCJzdHJpbmciKSl9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(5017, 0, cHJvZChsaXQoIlxcXFwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkyLDkyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Miw5MildKV0se30p, new int[] {92,92}, null, null); + tmp[0] = new LiteralStackNode(4994, 0, cHJvZChsaXQoIlxcXFwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkyLDkyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Miw5MildKV0se30p, new int[] {92,92}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiYnMiLGxleCgiQ29uY3JldGVQYXJ0IikpLFtsaXQoIlxcXFwiKV0se3RhZygiY2F0ZWdvcnkiKCJzdHJpbmciKSl9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgiZ3QiLGxleCgiQ29uY3JldGVQYXJ0IikpLFtsaXQoIlxcXD4iKV0se3RhZygiY2F0ZWdvcnkiKCJzdHJpbmciKSl9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(5020, 0, cHJvZChsaXQoIlxcXD4iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkyLDkyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg2Miw2MildKV0se30p, new int[] {92,62}, null, null); + tmp[0] = new LiteralStackNode(4997, 0, cHJvZChsaXQoIlxcXD4iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkyLDkyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg2Miw2MildKV0se30p, new int[] {92,62}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiZ3QiLGxleCgiQ29uY3JldGVQYXJ0IikpLFtsaXQoIlxcXD4iKV0se3RhZygiY2F0ZWdvcnkiKCJzdHJpbmciKSl9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIkNvbmNyZXRlUGFydCIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJDb25jcmV0ZVBhcnRcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKGxleCgiQ29uY3JldGVQYXJ0IikpKX0p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[0] = new CharStackNode(5023, 0, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(5025, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[4] = new CharStackNode(5028, 4, new int[][]{{0,0}}, null, null); - tmp[3] = new ListStackNode(5027, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(5026, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[1] = new LiteralStackNode(5024, 1, cHJvZChsaXQoInNvcnQoXCJDb25jcmV0ZVBhcnRcIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNjcsNjcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDk5LDk5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4MCw4MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,67,111,110,99,114,101,116,101,80,97,114,116,34,41}, null, null); + tmp[0] = new CharStackNode(5000, 0, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(5002, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[4] = new CharStackNode(5005, 4, new int[][]{{0,0}}, null, null); + tmp[3] = new ListStackNode(5004, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(5003, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[1] = new LiteralStackNode(5001, 1, cHJvZChsaXQoInNvcnQoXCJDb25jcmV0ZVBhcnRcIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNjcsNjcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDk5LDk5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4MCw4MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,67,111,110,99,114,101,116,101,80,97,114,116,34,41}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIkNvbmNyZXRlUGFydCIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJDb25jcmV0ZVBhcnRcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKGxleCgiQ29uY3JldGVQYXJ0IikpKX0p, tmp); } protected static final void _init_cHJvZChsYWJlbCgidGV4dCIsbGV4KCJDb25jcmV0ZVBhcnQiKSksW2NvbmRpdGlvbmFsKGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDEsOSkscmFuZ2UoMTEsNTkpLHJhbmdlKDYxLDYxKSxyYW5nZSg2Myw5MSkscmFuZ2UoOTMsOTUpLHJhbmdlKDk3LDExMTQxMTEpXSkpLHtcbm90LWZvbGxvdyhcY2hhci1jbGFzcyhbcmFuZ2UoMSw5KSxyYW5nZSgxMSw1OSkscmFuZ2UoNjEsNjEpLHJhbmdlKDYzLDkxKSxyYW5nZSg5Myw5NSkscmFuZ2UoOTcsMTExNDExMSldKSl9KV0se3RhZygiY2F0ZWdvcnkiKCJzdHJpbmciKSl9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new ListStackNode(5035, 0, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSgxLDkpLHJhbmdlKDExLDU5KSxyYW5nZSg2MSw2MSkscmFuZ2UoNjMsOTEpLHJhbmdlKDkzLDk1KSxyYW5nZSg5NywxMTE0MTExKV0pKSk00, new CharStackNode(5032, 0, new int[][]{{1,9},{11,59},{61,61},{63,91},{93,95},{97,1114111}}, null, null), true, null, new ICompletionFilter[] {new CharFollowRestriction(new int[][]{{1,9},{11,59},{61,61},{63,91},{93,95},{97,1114111}})}); + tmp[0] = new ListStackNode(5012, 0, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSgxLDkpLHJhbmdlKDExLDU5KSxyYW5nZSg2MSw2MSkscmFuZ2UoNjMsOTEpLHJhbmdlKDkzLDk1KSxyYW5nZSg5NywxMTE0MTExKV0pKSk00, new CharStackNode(5009, 0, new int[][]{{1,9},{11,59},{61,61},{63,91},{93,95},{97,1114111}}, null, null), true, null, new ICompletionFilter[] {new CharFollowRestriction(new int[][]{{1,9},{11,59},{61,61},{63,91},{93,95},{97,1114111}})}); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgidGV4dCIsbGV4KCJDb25jcmV0ZVBhcnQiKSksW2NvbmRpdGlvbmFsKGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDEsOSkscmFuZ2UoMTEsNTkpLHJhbmdlKDYxLDYxKSxyYW5nZSg2Myw5MSkscmFuZ2UoOTMsOTUpLHJhbmdlKDk3LDExMTQxMTEpXSkpLHtcbm90LWZvbGxvdyhcY2hhci1jbGFzcyhbcmFuZ2UoMSw5KSxyYW5nZSgxMSw1OSkscmFuZ2UoNjEsNjEpLHJhbmdlKDYzLDkxKSxyYW5nZSg5Myw5NSkscmFuZ2UoOTcsMTExNDExMSldKSl9KV0se3RhZygiY2F0ZWdvcnkiKCJzdHJpbmciKSl9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgibHQiLGxleCgiQ29uY3JldGVQYXJ0IikpLFtsaXQoIlxcXDwiKV0se3RhZygiY2F0ZWdvcnkiKCJzdHJpbmciKSl9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(5038, 0, cHJvZChsaXQoIlxcXDwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkyLDkyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg2MCw2MCldKV0se30p, new int[] {92,60}, null, null); + tmp[0] = new LiteralStackNode(5015, 0, cHJvZChsaXQoIlxcXDwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkyLDkyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg2MCw2MCldKV0se30p, new int[] {92,60}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgibHQiLGxleCgiQ29uY3JldGVQYXJ0IikpLFtsaXQoIlxcXDwiKV0se3RhZygiY2F0ZWdvcnkiKCJzdHJpbmciKSl9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgiYnEiLGxleCgiQ29uY3JldGVQYXJ0IikpLFtsaXQoIlxcYCIpXSx7dGFnKCJjYXRlZ29yeSIoInN0cmluZyIpKX0p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(5041, 0, cHJvZChsaXQoIlxcYCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoOTIsOTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk2LDk2KV0pXSx7fSk00, new int[] {92,96}, null, null); + tmp[0] = new LiteralStackNode(5018, 0, cHJvZChsaXQoIlxcYCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoOTIsOTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk2LDk2KV0pXSx7fSk00, new int[] {92,96}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiYnEiLGxleCgiQ29uY3JldGVQYXJ0IikpLFtsaXQoIlxcYCIpXSx7dGFnKCJjYXRlZ29yeSIoInN0cmluZyIpKX0p, tmp); } public static void init(ExpectBuilder builder){ @@ -7852,43 +7837,43 @@ protected static class ImportedModule { protected static final void _init_cHJvZChsYWJlbCgiYWN0dWFscyIsc29ydCgiSW1wb3J0ZWRNb2R1bGUiKSksW2xhYmVsKCJuYW1lIixzb3J0KCJRdWFsaWZpZWROYW1lIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgiYWN0dWFscyIsc29ydCgiTW9kdWxlQWN0dWFscyIpKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[3]; - tmp[1] = new NonTerminalStackNode(5047, 1, "layouts_LAYOUTLIST", null, null); - tmp[2] = new NonTerminalStackNode(5048, 2, "ModuleActuals", null, null); - tmp[0] = new NonTerminalStackNode(5045, 0, "QualifiedName", null, null); + tmp[1] = new NonTerminalStackNode(5024, 1, "layouts_LAYOUTLIST", null, null); + tmp[2] = new NonTerminalStackNode(5025, 2, "ModuleActuals", null, null); + tmp[0] = new NonTerminalStackNode(5022, 0, "QualifiedName", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiYWN0dWFscyIsc29ydCgiSW1wb3J0ZWRNb2R1bGUiKSksW2xhYmVsKCJuYW1lIixzb3J0KCJRdWFsaWZpZWROYW1lIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgiYWN0dWFscyIsc29ydCgiTW9kdWxlQWN0dWFscyIpKV0se30p, tmp); } protected static final void _init_cHJvZChsYWJlbCgiZGVmYXVsdCIsc29ydCgiSW1wb3J0ZWRNb2R1bGUiKSksW2xhYmVsKCJuYW1lIixzb3J0KCJRdWFsaWZpZWROYW1lIikpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new NonTerminalStackNode(5052, 0, "QualifiedName", null, null); + tmp[0] = new NonTerminalStackNode(5029, 0, "QualifiedName", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiZGVmYXVsdCIsc29ydCgiSW1wb3J0ZWRNb2R1bGUiKSksW2xhYmVsKCJuYW1lIixzb3J0KCJRdWFsaWZpZWROYW1lIikpXSx7fSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJJbXBvcnRlZE1vZHVsZSIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJJbXBvcnRlZE1vZHVsZVwiKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoc29ydCgiSW1wb3J0ZWRNb2R1bGUiKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[0] = new CharStackNode(5056, 0, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(5058, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[4] = new CharStackNode(5061, 4, new int[][]{{0,0}}, null, null); - tmp[1] = new LiteralStackNode(5057, 1, cHJvZChsaXQoInNvcnQoXCJJbXBvcnRlZE1vZHVsZVwiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg3Myw3MyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEyLDExMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAwLDEwMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNzcsNzcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMCwxMDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNywxMTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,73,109,112,111,114,116,101,100,77,111,100,117,108,101,34,41}, null, null); - tmp[3] = new ListStackNode(5060, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(5059, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[0] = new CharStackNode(5033, 0, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(5035, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[4] = new CharStackNode(5038, 4, new int[][]{{0,0}}, null, null); + tmp[1] = new LiteralStackNode(5034, 1, cHJvZChsaXQoInNvcnQoXCJJbXBvcnRlZE1vZHVsZVwiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg3Myw3MyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEyLDExMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAwLDEwMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNzcsNzcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMCwxMDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNywxMTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,73,109,112,111,114,116,101,100,77,111,100,117,108,101,34,41}, null, null); + tmp[3] = new ListStackNode(5037, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(5036, 0, new int[][]{{48,57}}, null, null), true, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJJbXBvcnRlZE1vZHVsZSIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJJbXBvcnRlZE1vZHVsZVwiKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoc29ydCgiSW1wb3J0ZWRNb2R1bGUiKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgicmVuYW1pbmdzIixzb3J0KCJJbXBvcnRlZE1vZHVsZSIpKSxbbGFiZWwoIm5hbWUiLHNvcnQoIlF1YWxpZmllZE5hbWUiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJyZW5hbWluZ3MiLHNvcnQoIlJlbmFtaW5ncyIpKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[3]; - tmp[0] = new NonTerminalStackNode(5065, 0, "QualifiedName", null, null); - tmp[2] = new NonTerminalStackNode(5068, 2, "Renamings", null, null); - tmp[1] = new NonTerminalStackNode(5067, 1, "layouts_LAYOUTLIST", null, null); + tmp[0] = new NonTerminalStackNode(5042, 0, "QualifiedName", null, null); + tmp[2] = new NonTerminalStackNode(5045, 2, "Renamings", null, null); + tmp[1] = new NonTerminalStackNode(5044, 1, "layouts_LAYOUTLIST", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgicmVuYW1pbmdzIixzb3J0KCJJbXBvcnRlZE1vZHVsZSIpKSxbbGFiZWwoIm5hbWUiLHNvcnQoIlF1YWxpZmllZE5hbWUiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJyZW5hbWluZ3MiLHNvcnQoIlJlbmFtaW5ncyIpKV0se30p, tmp); } protected static final void _init_cHJvZChsYWJlbCgiYWN0dWFsc1JlbmFtaW5nIixzb3J0KCJJbXBvcnRlZE1vZHVsZSIpKSxbbGFiZWwoIm5hbWUiLHNvcnQoIlF1YWxpZmllZE5hbWUiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJhY3R1YWxzIixzb3J0KCJNb2R1bGVBY3R1YWxzIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgicmVuYW1pbmdzIixzb3J0KCJSZW5hbWluZ3MiKSldLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[4] = new NonTerminalStackNode(5078, 4, "Renamings", null, null); - tmp[0] = new NonTerminalStackNode(5072, 0, "QualifiedName", null, null); - tmp[2] = new NonTerminalStackNode(5075, 2, "ModuleActuals", null, null); - tmp[3] = new NonTerminalStackNode(5077, 3, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(5074, 1, "layouts_LAYOUTLIST", null, null); + tmp[4] = new NonTerminalStackNode(5055, 4, "Renamings", null, null); + tmp[0] = new NonTerminalStackNode(5049, 0, "QualifiedName", null, null); + tmp[2] = new NonTerminalStackNode(5052, 2, "ModuleActuals", null, null); + tmp[3] = new NonTerminalStackNode(5054, 3, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(5051, 1, "layouts_LAYOUTLIST", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiYWN0dWFsc1JlbmFtaW5nIixzb3J0KCJJbXBvcnRlZE1vZHVsZSIpKSxbbGFiZWwoIm5hbWUiLHNvcnQoIlF1YWxpZmllZE5hbWUiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJhY3R1YWxzIixzb3J0KCJNb2R1bGVBY3R1YWxzIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgicmVuYW1pbmdzIixzb3J0KCJSZW5hbWluZ3MiKSldLHt9KQ0000, tmp); } public static void init(ExpectBuilder builder){ @@ -7917,18 +7902,18 @@ protected static class PathChars { protected static final void _init_cHJvZChsZXgoIlBhdGhDaGFycyIpLFtsZXgoIlVSTENoYXJzIiksXGNoYXItY2xhc3MoW3JhbmdlKDEyNCwxMjQpXSldLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[2]; - tmp[0] = new NonTerminalStackNode(5170, 0, "URLChars", null, null); - tmp[1] = new CharStackNode(5171, 1, new int[][]{{124,124}}, null, null); + tmp[0] = new NonTerminalStackNode(5147, 0, "URLChars", null, null); + tmp[1] = new CharStackNode(5148, 1, new int[][]{{124,124}}, null, null); builder.addAlternative(RascalParser.cHJvZChsZXgoIlBhdGhDaGFycyIpLFtsZXgoIlVSTENoYXJzIiksXGNoYXItY2xhc3MoW3JhbmdlKDEyNCwxMjQpXSldLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIlBhdGhDaGFycyIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJQYXRoQ2hhcnNcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKGxleCgiUGF0aENoYXJzIikpKX0p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[0] = new CharStackNode(5174, 0, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(5176, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[4] = new CharStackNode(5179, 4, new int[][]{{0,0}}, null, null); - tmp[1] = new LiteralStackNode(5175, 1, cHJvZChsaXQoInNvcnQoXCJQYXRoQ2hhcnNcIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODAsODApXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDQsMTA0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg2Nyw2NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA0LDEwNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,80,97,116,104,67,104,97,114,115,34,41}, null, null); - tmp[3] = new ListStackNode(5178, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(5177, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[0] = new CharStackNode(5151, 0, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(5153, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[4] = new CharStackNode(5156, 4, new int[][]{{0,0}}, null, null); + tmp[1] = new LiteralStackNode(5152, 1, cHJvZChsaXQoInNvcnQoXCJQYXRoQ2hhcnNcIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODAsODApXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDQsMTA0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg2Nyw2NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA0LDEwNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,80,97,116,104,67,104,97,114,115,34,41}, null, null); + tmp[3] = new ListStackNode(5155, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(5154, 0, new int[][]{{48,57}}, null, null), true, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIlBhdGhDaGFycyIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJQYXRoQ2hhcnNcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKGxleCgiUGF0aENoYXJzIikpKX0p, tmp); } public static void init(ExpectBuilder builder){ @@ -7951,39 +7936,39 @@ protected static class Case { protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJDYXNlIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgiaXRlcihzb3J0KFwiQ2FzZVwiKSkiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKFxpdGVyLXNlcHMoc29ydCgiQ2FzZSIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIildKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[1] = new LiteralStackNode(5200, 1, cHJvZChsaXQoIml0ZXIoc29ydChcIkNhc2VcIikpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg2Nyw2NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {105,116,101,114,40,115,111,114,116,40,34,67,97,115,101,34,41,41}, null, null); - tmp[3] = new ListStackNode(5203, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(5202, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[2] = new LiteralStackNode(5201, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[4] = new CharStackNode(5204, 4, new int[][]{{0,0}}, null, null); - tmp[0] = new CharStackNode(5199, 0, new int[][]{{0,0}}, null, null); + tmp[1] = new LiteralStackNode(5177, 1, cHJvZChsaXQoIml0ZXIoc29ydChcIkNhc2VcIikpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg2Nyw2NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {105,116,101,114,40,115,111,114,116,40,34,67,97,115,101,34,41,41}, null, null); + tmp[3] = new ListStackNode(5180, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(5179, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[2] = new LiteralStackNode(5178, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[4] = new CharStackNode(5181, 4, new int[][]{{0,0}}, null, null); + tmp[0] = new CharStackNode(5176, 0, new int[][]{{0,0}}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJDYXNlIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgiaXRlcihzb3J0KFwiQ2FzZVwiKSkiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKFxpdGVyLXNlcHMoc29ydCgiQ2FzZSIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIildKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJDYXNlIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIkNhc2VcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKHNvcnQoIkNhc2UiKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[1] = new LiteralStackNode(5211, 1, cHJvZChsaXQoInNvcnQoXCJDYXNlXCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDY3LDY3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {115,111,114,116,40,34,67,97,115,101,34,41}, null, null); - tmp[0] = new CharStackNode(5210, 0, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(5212, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[4] = new CharStackNode(5215, 4, new int[][]{{0,0}}, null, null); - tmp[3] = new ListStackNode(5214, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(5213, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[1] = new LiteralStackNode(5188, 1, cHJvZChsaXQoInNvcnQoXCJDYXNlXCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDY3LDY3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {115,111,114,116,40,34,67,97,115,101,34,41}, null, null); + tmp[0] = new CharStackNode(5187, 0, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(5189, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[4] = new CharStackNode(5192, 4, new int[][]{{0,0}}, null, null); + tmp[3] = new ListStackNode(5191, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(5190, 0, new int[][]{{48,57}}, null, null), true, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJDYXNlIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIkNhc2VcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKHNvcnQoIkNhc2UiKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgicGF0dGVybldpdGhBY3Rpb24iLHNvcnQoIkNhc2UiKSksW2xpdCgiY2FzZSIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgicGF0dGVybldpdGhBY3Rpb24iLHNvcnQoIlBhdHRlcm5XaXRoQWN0aW9uIikpXSx7dGFnKCJGb2xkYWJsZSIoKSl9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[3]; - tmp[0] = new LiteralStackNode(5219, 0, cHJvZChsaXQoImNhc2UiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDk5LDk5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKV0se30p, new int[] {99,97,115,101}, null, null); - tmp[2] = new NonTerminalStackNode(5221, 2, "PatternWithAction", null, null); - tmp[1] = new NonTerminalStackNode(5220, 1, "layouts_LAYOUTLIST", null, null); + tmp[0] = new LiteralStackNode(5196, 0, cHJvZChsaXQoImNhc2UiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDk5LDk5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKV0se30p, new int[] {99,97,115,101}, null, null); + tmp[2] = new NonTerminalStackNode(5198, 2, "PatternWithAction", null, null); + tmp[1] = new NonTerminalStackNode(5197, 1, "layouts_LAYOUTLIST", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgicGF0dGVybldpdGhBY3Rpb24iLHNvcnQoIkNhc2UiKSksW2xpdCgiY2FzZSIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgicGF0dGVybldpdGhBY3Rpb24iLHNvcnQoIlBhdHRlcm5XaXRoQWN0aW9uIikpXSx7dGFnKCJGb2xkYWJsZSIoKSl9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgiZGVmYXVsdCIsc29ydCgiQ2FzZSIpKSxbbGl0KCJkZWZhdWx0IiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiOiIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgic3RhdGVtZW50Iixzb3J0KCJTdGF0ZW1lbnQiKSldLHt0YWcoIkZvbGRhYmxlIigpKX0p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[4] = new NonTerminalStackNode(5229, 4, "Statement", null, null); - tmp[2] = new LiteralStackNode(5227, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[0] = new LiteralStackNode(5225, 0, cHJvZChsaXQoImRlZmF1bHQiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEwMCwxMDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMiwxMDIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTcsMTE3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pXSx7fSk00, new int[] {100,101,102,97,117,108,116}, null, null); - tmp[3] = new NonTerminalStackNode(5228, 3, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(5226, 1, "layouts_LAYOUTLIST", null, null); + tmp[4] = new NonTerminalStackNode(5206, 4, "Statement", null, null); + tmp[2] = new LiteralStackNode(5204, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[0] = new LiteralStackNode(5202, 0, cHJvZChsaXQoImRlZmF1bHQiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEwMCwxMDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMiwxMDIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTcsMTE3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pXSx7fSk00, new int[] {100,101,102,97,117,108,116}, null, null); + tmp[3] = new NonTerminalStackNode(5205, 3, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(5203, 1, "layouts_LAYOUTLIST", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiZGVmYXVsdCIsc29ydCgiQ2FzZSIpKSxbbGl0KCJkZWZhdWx0IiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiOiIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgic3RhdGVtZW50Iixzb3J0KCJTdGF0ZW1lbnQiKSldLHt0YWcoIkZvbGRhYmxlIigpKX0p, tmp); } public static void init(ExpectBuilder builder){ @@ -8010,47 +7995,47 @@ protected static class Strategy { protected static final void _init_cHJvZChsYWJlbCgiaW5uZXJtb3N0Iixzb3J0KCJTdHJhdGVneSIpKSxbbGl0KCJpbm5lcm1vc3QiKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(5627, 0, cHJvZChsaXQoImlubmVybW9zdCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKV0se30p, new int[] {105,110,110,101,114,109,111,115,116}, null, null); + tmp[0] = new LiteralStackNode(5604, 0, cHJvZChsaXQoImlubmVybW9zdCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKV0se30p, new int[] {105,110,110,101,114,109,111,115,116}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiaW5uZXJtb3N0Iixzb3J0KCJTdHJhdGVneSIpKSxbbGl0KCJpbm5lcm1vc3QiKV0se30p, tmp); } protected static final void _init_cHJvZChsYWJlbCgidG9wRG93biIsc29ydCgiU3RyYXRlZ3kiKSksW2xpdCgidG9wLWRvd24iKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(5630, 0, cHJvZChsaXQoInRvcC1kb3duIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTIsMTEyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NSw0NSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAwLDEwMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE5LDExOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKV0se30p, new int[] {116,111,112,45,100,111,119,110}, null, null); + tmp[0] = new LiteralStackNode(5607, 0, cHJvZChsaXQoInRvcC1kb3duIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTIsMTEyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NSw0NSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAwLDEwMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE5LDExOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKV0se30p, new int[] {116,111,112,45,100,111,119,110}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgidG9wRG93biIsc29ydCgiU3RyYXRlZ3kiKSksW2xpdCgidG9wLWRvd24iKV0se30p, tmp); } protected static final void _init_cHJvZChsYWJlbCgiYm90dG9tVXBCcmVhayIsc29ydCgiU3RyYXRlZ3kiKSksW2xpdCgiYm90dG9tLXVwLWJyZWFrIildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(5633, 0, cHJvZChsaXQoImJvdHRvbS11cC1icmVhayIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoOTgsOTgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOSwxMDkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ1LDQ1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTcsMTE3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTIsMTEyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NSw0NSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTgsOTgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDcsMTA3KV0pXSx7fSk00, new int[] {98,111,116,116,111,109,45,117,112,45,98,114,101,97,107}, null, null); + tmp[0] = new LiteralStackNode(5610, 0, cHJvZChsaXQoImJvdHRvbS11cC1icmVhayIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoOTgsOTgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOSwxMDkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ1LDQ1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTcsMTE3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTIsMTEyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NSw0NSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTgsOTgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDcsMTA3KV0pXSx7fSk00, new int[] {98,111,116,116,111,109,45,117,112,45,98,114,101,97,107}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiYm90dG9tVXBCcmVhayIsc29ydCgiU3RyYXRlZ3kiKSksW2xpdCgiYm90dG9tLXVwLWJyZWFrIildLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJTdHJhdGVneSIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJTdHJhdGVneVwiKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoc29ydCgiU3RyYXRlZ3kiKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[2] = new LiteralStackNode(5638, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[4] = new CharStackNode(5641, 4, new int[][]{{0,0}}, null, null); - tmp[0] = new CharStackNode(5636, 0, new int[][]{{0,0}}, null, null); - tmp[1] = new LiteralStackNode(5637, 1, cHJvZChsaXQoInNvcnQoXCJTdHJhdGVneVwiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4Myw4MyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMywxMDMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEyMSwxMjEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,83,116,114,97,116,101,103,121,34,41}, null, null); - tmp[3] = new ListStackNode(5640, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(5639, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[2] = new LiteralStackNode(5615, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[4] = new CharStackNode(5618, 4, new int[][]{{0,0}}, null, null); + tmp[0] = new CharStackNode(5613, 0, new int[][]{{0,0}}, null, null); + tmp[1] = new LiteralStackNode(5614, 1, cHJvZChsaXQoInNvcnQoXCJTdHJhdGVneVwiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4Myw4MyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMywxMDMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEyMSwxMjEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,83,116,114,97,116,101,103,121,34,41}, null, null); + tmp[3] = new ListStackNode(5617, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(5616, 0, new int[][]{{48,57}}, null, null), true, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJTdHJhdGVneSIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJTdHJhdGVneVwiKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoc29ydCgiU3RyYXRlZ3kiKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgidG9wRG93bkJyZWFrIixzb3J0KCJTdHJhdGVneSIpKSxbbGl0KCJ0b3AtZG93bi1icmVhayIpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(5645, 0, cHJvZChsaXQoInRvcC1kb3duLWJyZWFrIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTIsMTEyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NSw0NSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAwLDEwMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE5LDExOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDUsNDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk4LDk4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA3LDEwNyldKV0se30p, new int[] {116,111,112,45,100,111,119,110,45,98,114,101,97,107}, null, null); + tmp[0] = new LiteralStackNode(5622, 0, cHJvZChsaXQoInRvcC1kb3duLWJyZWFrIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTIsMTEyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NSw0NSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAwLDEwMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE5LDExOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDUsNDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk4LDk4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA3LDEwNyldKV0se30p, new int[] {116,111,112,45,100,111,119,110,45,98,114,101,97,107}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgidG9wRG93bkJyZWFrIixzb3J0KCJTdHJhdGVneSIpKSxbbGl0KCJ0b3AtZG93bi1icmVhayIpXSx7fSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgib3V0ZXJtb3N0Iixzb3J0KCJTdHJhdGVneSIpKSxbbGl0KCJvdXRlcm1vc3QiKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(5648, 0, cHJvZChsaXQoIm91dGVybW9zdCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE3LDExNyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKV0se30p, new int[] {111,117,116,101,114,109,111,115,116}, null, null); + tmp[0] = new LiteralStackNode(5625, 0, cHJvZChsaXQoIm91dGVybW9zdCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE3LDExNyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKV0se30p, new int[] {111,117,116,101,114,109,111,115,116}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgib3V0ZXJtb3N0Iixzb3J0KCJTdHJhdGVneSIpKSxbbGl0KCJvdXRlcm1vc3QiKV0se30p, tmp); } protected static final void _init_cHJvZChsYWJlbCgiYm90dG9tVXAiLHNvcnQoIlN0cmF0ZWd5IikpLFtsaXQoImJvdHRvbS11cCIpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(5651, 0, cHJvZChsaXQoImJvdHRvbS11cCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoOTgsOTgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOSwxMDkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ1LDQ1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTcsMTE3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTIsMTEyKV0pXSx7fSk00, new int[] {98,111,116,116,111,109,45,117,112}, null, null); + tmp[0] = new LiteralStackNode(5628, 0, cHJvZChsaXQoImJvdHRvbS11cCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoOTgsOTgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOSwxMDkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ1LDQ1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTcsMTE3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTIsMTEyKV0pXSx7fSk00, new int[] {98,111,116,116,111,109,45,117,112}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiYm90dG9tVXAiLHNvcnQoIlN0cmF0ZWd5IikpLFtsaXQoImJvdHRvbS11cCIpXSx7fSk00, tmp); } public static void init(ExpectBuilder builder){ @@ -8083,25 +8068,25 @@ protected static class LocalVariableDeclaration { protected static final void _init_cHJvZChsYWJlbCgiZGVmYXVsdCIsc29ydCgiTG9jYWxWYXJpYWJsZURlY2xhcmF0aW9uIikpLFtsYWJlbCgiZGVjbGFyYXRvciIsc29ydCgiRGVjbGFyYXRvciIpKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new NonTerminalStackNode(5700, 0, "Declarator", null, null); + tmp[0] = new NonTerminalStackNode(5677, 0, "Declarator", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiZGVmYXVsdCIsc29ydCgiTG9jYWxWYXJpYWJsZURlY2xhcmF0aW9uIikpLFtsYWJlbCgiZGVjbGFyYXRvciIsc29ydCgiRGVjbGFyYXRvciIpKV0se30p, tmp); } protected static final void _init_cHJvZChsYWJlbCgiZHluYW1pYyIsc29ydCgiTG9jYWxWYXJpYWJsZURlY2xhcmF0aW9uIikpLFtsaXQoImR5bmFtaWMiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImRlY2xhcmF0b3IiLHNvcnQoIkRlY2xhcmF0b3IiKSldLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[3]; - tmp[2] = new NonTerminalStackNode(5706, 2, "Declarator", null, null); - tmp[1] = new NonTerminalStackNode(5705, 1, "layouts_LAYOUTLIST", null, null); - tmp[0] = new LiteralStackNode(5704, 0, cHJvZChsaXQoImR5bmFtaWMiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEwMCwxMDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDEyMSwxMjEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDksMTA5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5OSw5OSldKV0se30p, new int[] {100,121,110,97,109,105,99}, null, null); + tmp[2] = new NonTerminalStackNode(5683, 2, "Declarator", null, null); + tmp[1] = new NonTerminalStackNode(5682, 1, "layouts_LAYOUTLIST", null, null); + tmp[0] = new LiteralStackNode(5681, 0, cHJvZChsaXQoImR5bmFtaWMiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEwMCwxMDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDEyMSwxMjEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDksMTA5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5OSw5OSldKV0se30p, new int[] {100,121,110,97,109,105,99}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiZHluYW1pYyIsc29ydCgiTG9jYWxWYXJpYWJsZURlY2xhcmF0aW9uIikpLFtsaXQoImR5bmFtaWMiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImRlY2xhcmF0b3IiLHNvcnQoIkRlY2xhcmF0b3IiKSldLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJMb2NhbFZhcmlhYmxlRGVjbGFyYXRpb24iKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJzb3J0KFwiTG9jYWxWYXJpYWJsZURlY2xhcmF0aW9uXCIpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihzb3J0KCJMb2NhbFZhcmlhYmxlRGVjbGFyYXRpb24iKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[4] = new CharStackNode(5715, 4, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(5712, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[3] = new ListStackNode(5714, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(5713, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[0] = new CharStackNode(5710, 0, new int[][]{{0,0}}, null, null); - tmp[1] = new LiteralStackNode(5711, 1, cHJvZChsaXQoInNvcnQoXCJMb2NhbFZhcmlhYmxlRGVjbGFyYXRpb25cIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNzYsNzYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk5LDk5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODYsODYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTgsOTgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDY4LDY4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5OSw5OSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {115,111,114,116,40,34,76,111,99,97,108,86,97,114,105,97,98,108,101,68,101,99,108,97,114,97,116,105,111,110,34,41}, null, null); + tmp[4] = new CharStackNode(5692, 4, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(5689, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[3] = new ListStackNode(5691, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(5690, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[0] = new CharStackNode(5687, 0, new int[][]{{0,0}}, null, null); + tmp[1] = new LiteralStackNode(5688, 1, cHJvZChsaXQoInNvcnQoXCJMb2NhbFZhcmlhYmxlRGVjbGFyYXRpb25cIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNzYsNzYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk5LDk5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODYsODYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTgsOTgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDY4LDY4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5OSw5OSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {115,111,114,116,40,34,76,111,99,97,108,86,97,114,105,97,98,108,101,68,101,99,108,97,114,97,116,105,111,110,34,41}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJMb2NhbFZhcmlhYmxlRGVjbGFyYXRpb24iKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJzb3J0KFwiTG9jYWxWYXJpYWJsZURlY2xhcmF0aW9uXCIpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihzb3J0KCJMb2NhbFZhcmlhYmxlRGVjbGFyYXRpb24iKSkpfSk00, tmp); } public static void init(ExpectBuilder builder){ @@ -8126,29 +8111,29 @@ protected static class Visibility { protected static final void _init_cHJvZChsYWJlbCgicHJpdmF0ZSIsc29ydCgiVmlzaWJpbGl0eSIpKSxbbGl0KCJwcml2YXRlIildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(5767, 0, cHJvZChsaXQoInByaXZhdGUiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExOCwxMTgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pXSx7fSk00, new int[] {112,114,105,118,97,116,101}, null, null); + tmp[0] = new LiteralStackNode(5744, 0, cHJvZChsaXQoInByaXZhdGUiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExOCwxMTgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pXSx7fSk00, new int[] {112,114,105,118,97,116,101}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgicHJpdmF0ZSIsc29ydCgiVmlzaWJpbGl0eSIpKSxbbGl0KCJwcml2YXRlIildLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJWaXNpYmlsaXR5IikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIlZpc2liaWxpdHlcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKHNvcnQoIlZpc2liaWxpdHkiKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[2] = new LiteralStackNode(5772, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[4] = new CharStackNode(5775, 4, new int[][]{{0,0}}, null, null); - tmp[0] = new CharStackNode(5770, 0, new int[][]{{0,0}}, null, null); - tmp[1] = new LiteralStackNode(5771, 1, cHJvZChsaXQoInNvcnQoXCJWaXNpYmlsaXR5XCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDg2LDg2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5OCw5OCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTIxLDEyMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {115,111,114,116,40,34,86,105,115,105,98,105,108,105,116,121,34,41}, null, null); - tmp[3] = new ListStackNode(5774, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(5773, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[2] = new LiteralStackNode(5749, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[4] = new CharStackNode(5752, 4, new int[][]{{0,0}}, null, null); + tmp[0] = new CharStackNode(5747, 0, new int[][]{{0,0}}, null, null); + tmp[1] = new LiteralStackNode(5748, 1, cHJvZChsaXQoInNvcnQoXCJWaXNpYmlsaXR5XCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDg2LDg2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5OCw5OCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTIxLDEyMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {115,111,114,116,40,34,86,105,115,105,98,105,108,105,116,121,34,41}, null, null); + tmp[3] = new ListStackNode(5751, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(5750, 0, new int[][]{{48,57}}, null, null), true, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJWaXNpYmlsaXR5IikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIlZpc2liaWxpdHlcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKHNvcnQoIlZpc2liaWxpdHkiKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgicHVibGljIixzb3J0KCJWaXNpYmlsaXR5IikpLFtsaXQoInB1YmxpYyIpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(5779, 0, cHJvZChsaXQoInB1YmxpYyIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTEyLDExMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE3LDExNyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTgsOTgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk5LDk5KV0pXSx7fSk00, new int[] {112,117,98,108,105,99}, null, null); + tmp[0] = new LiteralStackNode(5756, 0, cHJvZChsaXQoInB1YmxpYyIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTEyLDExMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE3LDExNyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTgsOTgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk5LDk5KV0pXSx7fSk00, new int[] {112,117,98,108,105,99}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgicHVibGljIixzb3J0KCJWaXNpYmlsaXR5IikpLFtsaXQoInB1YmxpYyIpXSx7fSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiZGVmYXVsdCIsc29ydCgiVmlzaWJpbGl0eSIpKSxbXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new EpsilonStackNode(5781, 0); + tmp[0] = new EpsilonStackNode(5758, 0); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiZGVmYXVsdCIsc29ydCgiVmlzaWJpbGl0eSIpKSxbXSx7fSk00, tmp); } public static void init(ExpectBuilder builder){ @@ -8175,19 +8160,19 @@ protected static class JustDate { protected static final void _init_cHJvZChsZXgoIkp1c3REYXRlIiksW2xpdCgiJCIpLGxleCgiRGF0ZVBhcnQiKSxsaXQoIiQiKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[3]; - tmp[1] = new NonTerminalStackNode(5809, 1, "DatePart", null, null); - tmp[2] = new LiteralStackNode(5810, 2, cHJvZChsaXQoIiQiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDM2LDM2KV0pXSx7fSk00, new int[] {36}, null, null); - tmp[0] = new LiteralStackNode(5808, 0, cHJvZChsaXQoIiQiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDM2LDM2KV0pXSx7fSk00, new int[] {36}, null, null); + tmp[1] = new NonTerminalStackNode(5786, 1, "DatePart", null, null); + tmp[2] = new LiteralStackNode(5787, 2, cHJvZChsaXQoIiQiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDM2LDM2KV0pXSx7fSk00, new int[] {36}, null, null); + tmp[0] = new LiteralStackNode(5785, 0, cHJvZChsaXQoIiQiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDM2LDM2KV0pXSx7fSk00, new int[] {36}, null, null); builder.addAlternative(RascalParser.cHJvZChsZXgoIkp1c3REYXRlIiksW2xpdCgiJCIpLGxleCgiRGF0ZVBhcnQiKSxsaXQoIiQiKV0se30p, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIkp1c3REYXRlIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIkp1c3REYXRlXCIpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihsZXgoIkp1c3REYXRlIikpKX0p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[1] = new LiteralStackNode(5814, 1, cHJvZChsaXQoInNvcnQoXCJKdXN0RGF0ZVwiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg3NCw3NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE3LDExNyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNjgsNjgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {115,111,114,116,40,34,74,117,115,116,68,97,116,101,34,41}, null, null); - tmp[3] = new ListStackNode(5817, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(5816, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[2] = new LiteralStackNode(5815, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[4] = new CharStackNode(5818, 4, new int[][]{{0,0}}, null, null); - tmp[0] = new CharStackNode(5813, 0, new int[][]{{0,0}}, null, null); + tmp[1] = new LiteralStackNode(5791, 1, cHJvZChsaXQoInNvcnQoXCJKdXN0RGF0ZVwiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg3NCw3NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE3LDExNyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNjgsNjgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {115,111,114,116,40,34,74,117,115,116,68,97,116,101,34,41}, null, null); + tmp[3] = new ListStackNode(5794, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(5793, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[2] = new LiteralStackNode(5792, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[4] = new CharStackNode(5795, 4, new int[][]{{0,0}}, null, null); + tmp[0] = new CharStackNode(5790, 0, new int[][]{{0,0}}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIkp1c3REYXRlIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIkp1c3REYXRlXCIpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihsZXgoIkp1c3REYXRlIikpKX0p, tmp); } public static void init(ExpectBuilder builder){ @@ -8210,23 +8195,23 @@ protected static class FunctionType { protected static final void _init_cHJvZChsYWJlbCgidHlwZUFyZ3VtZW50cyIsc29ydCgiRnVuY3Rpb25UeXBlIikpLFtsYWJlbCgidHlwZSIsc29ydCgiVHlwZSIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIoIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJhcmd1bWVudHMiLFxpdGVyLXN0YXItc2Vwcyhzb3J0KCJUeXBlQXJnIiksW2xheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIiwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIildKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiKSIpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[7]; - tmp[3] = new NonTerminalStackNode(5852, 3, "layouts_LAYOUTLIST", null, null); - tmp[0] = new NonTerminalStackNode(5848, 0, "Type", null, null); - tmp[4] = new SeparatedListStackNode(5857, 4, cmVndWxhcihcaXRlci1zdGFyLXNlcHMoc29ydCgiVHlwZUFyZyIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpXSkp, new NonTerminalStackNode(5853, 0, "TypeArg", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(5854, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(5855, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(5856, 3, "layouts_LAYOUTLIST", null, null)}, false, null, null); - tmp[2] = new LiteralStackNode(5851, 2, cHJvZChsaXQoIigiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pXSx7fSk00, new int[] {40}, null, null); - tmp[6] = new LiteralStackNode(5860, 6, cHJvZChsaXQoIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {41}, null, null); - tmp[1] = new NonTerminalStackNode(5850, 1, "layouts_LAYOUTLIST", null, null); - tmp[5] = new NonTerminalStackNode(5859, 5, "layouts_LAYOUTLIST", null, null); + tmp[3] = new NonTerminalStackNode(5829, 3, "layouts_LAYOUTLIST", null, null); + tmp[0] = new NonTerminalStackNode(5825, 0, "Type", null, null); + tmp[4] = new SeparatedListStackNode(5834, 4, cmVndWxhcihcaXRlci1zdGFyLXNlcHMoc29ydCgiVHlwZUFyZyIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpXSkp, new NonTerminalStackNode(5830, 0, "TypeArg", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(5831, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(5832, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(5833, 3, "layouts_LAYOUTLIST", null, null)}, false, null, null); + tmp[2] = new LiteralStackNode(5828, 2, cHJvZChsaXQoIigiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pXSx7fSk00, new int[] {40}, null, null); + tmp[6] = new LiteralStackNode(5837, 6, cHJvZChsaXQoIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {41}, null, null); + tmp[1] = new NonTerminalStackNode(5827, 1, "layouts_LAYOUTLIST", null, null); + tmp[5] = new NonTerminalStackNode(5836, 5, "layouts_LAYOUTLIST", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgidHlwZUFyZ3VtZW50cyIsc29ydCgiRnVuY3Rpb25UeXBlIikpLFtsYWJlbCgidHlwZSIsc29ydCgiVHlwZSIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIoIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJhcmd1bWVudHMiLFxpdGVyLXN0YXItc2Vwcyhzb3J0KCJUeXBlQXJnIiksW2xheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIiwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIildKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiKSIpXSx7fSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJGdW5jdGlvblR5cGUiKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJzb3J0KFwiRnVuY3Rpb25UeXBlXCIpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihzb3J0KCJGdW5jdGlvblR5cGUiKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[2] = new LiteralStackNode(5865, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[4] = new CharStackNode(5868, 4, new int[][]{{0,0}}, null, null); - tmp[0] = new CharStackNode(5863, 0, new int[][]{{0,0}}, null, null); - tmp[1] = new LiteralStackNode(5864, 1, cHJvZChsaXQoInNvcnQoXCJGdW5jdGlvblR5cGVcIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNzAsNzApXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNywxMTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDk5LDk5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4NCw4NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTIxLDEyMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEyLDExMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {115,111,114,116,40,34,70,117,110,99,116,105,111,110,84,121,112,101,34,41}, null, null); - tmp[3] = new ListStackNode(5867, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(5866, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[2] = new LiteralStackNode(5842, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[4] = new CharStackNode(5845, 4, new int[][]{{0,0}}, null, null); + tmp[0] = new CharStackNode(5840, 0, new int[][]{{0,0}}, null, null); + tmp[1] = new LiteralStackNode(5841, 1, cHJvZChsaXQoInNvcnQoXCJGdW5jdGlvblR5cGVcIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNzAsNzApXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNywxMTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDk5LDk5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4NCw4NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTIxLDEyMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEyLDExMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {115,111,114,116,40,34,70,117,110,99,116,105,111,110,84,121,112,101,34,41}, null, null); + tmp[3] = new ListStackNode(5844, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(5843, 0, new int[][]{{48,57}}, null, null), true, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJGdW5jdGlvblR5cGUiKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJzb3J0KFwiRnVuY3Rpb25UeXBlXCIpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihzb3J0KCJGdW5jdGlvblR5cGUiKSkpfSk00, tmp); } public static void init(ExpectBuilder builder){ @@ -8249,27 +8234,27 @@ protected static class Replacement { protected static final void _init_cHJvZChsYWJlbCgiY29uZGl0aW9uYWwiLHNvcnQoIlJlcGxhY2VtZW50IikpLFtsYWJlbCgicmVwbGFjZW1lbnRFeHByZXNzaW9uIixzb3J0KCJFeHByZXNzaW9uIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIndoZW4iKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImNvbmRpdGlvbnMiLFxpdGVyLXNlcHMoc29ydCgiRXhwcmVzc2lvbiIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpXSkpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[3] = new NonTerminalStackNode(6110, 3, "layouts_LAYOUTLIST", null, null); - tmp[0] = new NonTerminalStackNode(6106, 0, "Expression", null, null); - tmp[2] = new LiteralStackNode(6109, 2, cHJvZChsaXQoIndoZW4iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExOSwxMTkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNCwxMDQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSldLHt9KQ0000, new int[] {119,104,101,110}, null, null); - tmp[1] = new NonTerminalStackNode(6108, 1, "layouts_LAYOUTLIST", null, null); - tmp[4] = new SeparatedListStackNode(6115, 4, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIkV4cHJlc3Npb24iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(6111, 0, "Expression", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(6112, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(6113, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(6114, 3, "layouts_LAYOUTLIST", null, null)}, true, null, null); + tmp[3] = new NonTerminalStackNode(6087, 3, "layouts_LAYOUTLIST", null, null); + tmp[0] = new NonTerminalStackNode(6083, 0, "Expression", null, null); + tmp[2] = new LiteralStackNode(6086, 2, cHJvZChsaXQoIndoZW4iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExOSwxMTkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNCwxMDQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSldLHt9KQ0000, new int[] {119,104,101,110}, null, null); + tmp[1] = new NonTerminalStackNode(6085, 1, "layouts_LAYOUTLIST", null, null); + tmp[4] = new SeparatedListStackNode(6092, 4, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIkV4cHJlc3Npb24iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(6088, 0, "Expression", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(6089, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(6090, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(6091, 3, "layouts_LAYOUTLIST", null, null)}, true, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiY29uZGl0aW9uYWwiLHNvcnQoIlJlcGxhY2VtZW50IikpLFtsYWJlbCgicmVwbGFjZW1lbnRFeHByZXNzaW9uIixzb3J0KCJFeHByZXNzaW9uIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIndoZW4iKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImNvbmRpdGlvbnMiLFxpdGVyLXNlcHMoc29ydCgiRXhwcmVzc2lvbiIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpXSkpXSx7fSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJSZXBsYWNlbWVudCIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJSZXBsYWNlbWVudFwiKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoc29ydCgiUmVwbGFjZW1lbnQiKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[0] = new CharStackNode(6119, 0, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(6121, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[3] = new ListStackNode(6123, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(6122, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[4] = new CharStackNode(6124, 4, new int[][]{{0,0}}, null, null); - tmp[1] = new LiteralStackNode(6120, 1, cHJvZChsaXQoInNvcnQoXCJSZXBsYWNlbWVudFwiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4Miw4MildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEyLDExMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk5LDk5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDksMTA5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {115,111,114,116,40,34,82,101,112,108,97,99,101,109,101,110,116,34,41}, null, null); + tmp[0] = new CharStackNode(6096, 0, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(6098, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[3] = new ListStackNode(6100, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(6099, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[4] = new CharStackNode(6101, 4, new int[][]{{0,0}}, null, null); + tmp[1] = new LiteralStackNode(6097, 1, cHJvZChsaXQoInNvcnQoXCJSZXBsYWNlbWVudFwiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4Miw4MildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEyLDExMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk5LDk5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDksMTA5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {115,111,114,116,40,34,82,101,112,108,97,99,101,109,101,110,116,34,41}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJSZXBsYWNlbWVudCIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJSZXBsYWNlbWVudFwiKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoc29ydCgiUmVwbGFjZW1lbnQiKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgidW5jb25kaXRpb25hbCIsc29ydCgiUmVwbGFjZW1lbnQiKSksW2xhYmVsKCJyZXBsYWNlbWVudEV4cHJlc3Npb24iLHNvcnQoIkV4cHJlc3Npb24iKSldLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new NonTerminalStackNode(6128, 0, "Expression", null, null); + tmp[0] = new NonTerminalStackNode(6105, 0, "Expression", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgidW5jb25kaXRpb25hbCIsc29ydCgiUmVwbGFjZW1lbnQiKSksW2xhYmVsKCJyZXBsYWNlbWVudEV4cHJlc3Npb24iLHNvcnQoIkV4cHJlc3Npb24iKSldLHt9KQ0000, tmp); } public static void init(ExpectBuilder builder){ @@ -8294,17 +8279,17 @@ protected static class NamedBackslash { protected static final void _init_cHJvZChsZXgoIk5hbWVkQmFja3NsYXNoIiksW2NvbmRpdGlvbmFsKFxjaGFyLWNsYXNzKFtyYW5nZSg5Miw5MildKSx7XG5vdC1mb2xsb3coXGNoYXItY2xhc3MoW3JhbmdlKDYwLDYwKSxyYW5nZSg2Miw2MikscmFuZ2UoOTIsOTIpXSkpfSldLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new CharStackNode(6162, 0, new int[][]{{92,92}}, null, new ICompletionFilter[] {new CharFollowRestriction(new int[][]{{60,60},{62,62},{92,92}})}); + tmp[0] = new CharStackNode(6139, 0, new int[][]{{92,92}}, null, new ICompletionFilter[] {new CharFollowRestriction(new int[][]{{60,60},{62,62},{92,92}})}); builder.addAlternative(RascalParser.cHJvZChsZXgoIk5hbWVkQmFja3NsYXNoIiksW2NvbmRpdGlvbmFsKFxjaGFyLWNsYXNzKFtyYW5nZSg5Miw5MildKSx7XG5vdC1mb2xsb3coXGNoYXItY2xhc3MoW3JhbmdlKDYwLDYwKSxyYW5nZSg2Miw2MikscmFuZ2UoOTIsOTIpXSkpfSldLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIk5hbWVkQmFja3NsYXNoIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIk5hbWVkQmFja3NsYXNoXCIpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihsZXgoIk5hbWVkQmFja3NsYXNoIikpKX0p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[0] = new CharStackNode(6165, 0, new int[][]{{0,0}}, null, null); - tmp[4] = new CharStackNode(6170, 4, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(6167, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[3] = new ListStackNode(6169, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(6168, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[1] = new LiteralStackNode(6166, 1, cHJvZChsaXQoInNvcnQoXCJOYW1lZEJhY2tzbGFzaFwiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg3OCw3OCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOSwxMDkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMCwxMDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDY2LDY2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTksOTkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNywxMDcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDQsMTA0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {115,111,114,116,40,34,78,97,109,101,100,66,97,99,107,115,108,97,115,104,34,41}, null, null); + tmp[0] = new CharStackNode(6142, 0, new int[][]{{0,0}}, null, null); + tmp[4] = new CharStackNode(6147, 4, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(6144, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[3] = new ListStackNode(6146, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(6145, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[1] = new LiteralStackNode(6143, 1, cHJvZChsaXQoInNvcnQoXCJOYW1lZEJhY2tzbGFzaFwiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg3OCw3OCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOSwxMDkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMCwxMDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDY2LDY2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTksOTkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNywxMDcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDQsMTA0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {115,111,114,116,40,34,78,97,109,101,100,66,97,99,107,115,108,97,115,104,34,41}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIk5hbWVkQmFja3NsYXNoIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIk5hbWVkQmFja3NsYXNoXCIpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihsZXgoIk5hbWVkQmFja3NsYXNoIikpKX0p, tmp); } public static void init(ExpectBuilder builder){ @@ -8327,35 +8312,35 @@ protected static class Assoc { protected static final void _init_cHJvZChsYWJlbCgibGVmdCIsc29ydCgiQXNzb2MiKSksW2xpdCgibGVmdCIpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6175, 0, cHJvZChsaXQoImxlZnQiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMiwxMDIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSldLHt9KQ0000, new int[] {108,101,102,116}, null, null); + tmp[0] = new LiteralStackNode(6152, 0, cHJvZChsaXQoImxlZnQiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMiwxMDIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSldLHt9KQ0000, new int[] {108,101,102,116}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgibGVmdCIsc29ydCgiQXNzb2MiKSksW2xpdCgibGVmdCIpXSx7fSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJBc3NvYyIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJBc3NvY1wiKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoc29ydCgiQXNzb2MiKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[0] = new CharStackNode(6178, 0, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(6180, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[4] = new CharStackNode(6183, 4, new int[][]{{0,0}}, null, null); - tmp[1] = new LiteralStackNode(6179, 1, cHJvZChsaXQoInNvcnQoXCJBc3NvY1wiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg2NSw2NSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTksOTkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,65,115,115,111,99,34,41}, null, null); - tmp[3] = new ListStackNode(6182, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(6181, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[0] = new CharStackNode(6155, 0, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(6157, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[4] = new CharStackNode(6160, 4, new int[][]{{0,0}}, null, null); + tmp[1] = new LiteralStackNode(6156, 1, cHJvZChsaXQoInNvcnQoXCJBc3NvY1wiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg2NSw2NSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTksOTkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,65,115,115,111,99,34,41}, null, null); + tmp[3] = new ListStackNode(6159, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(6158, 0, new int[][]{{48,57}}, null, null), true, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJBc3NvYyIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJBc3NvY1wiKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoc29ydCgiQXNzb2MiKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiYXNzb2NpYXRpdmUiLHNvcnQoIkFzc29jIikpLFtsaXQoImFzc29jIildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6187, 0, cHJvZChsaXQoImFzc29jIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTksOTkpXSldLHt9KQ0000, new int[] {97,115,115,111,99}, null, null); + tmp[0] = new LiteralStackNode(6164, 0, cHJvZChsaXQoImFzc29jIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTksOTkpXSldLHt9KQ0000, new int[] {97,115,115,111,99}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiYXNzb2NpYXRpdmUiLHNvcnQoIkFzc29jIikpLFtsaXQoImFzc29jIildLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgicmlnaHQiLHNvcnQoIkFzc29jIikpLFtsaXQoInJpZ2h0IildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6190, 0, cHJvZChsaXQoInJpZ2h0IiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDMsMTAzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDQsMTA0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pXSx7fSk00, new int[] {114,105,103,104,116}, null, null); + tmp[0] = new LiteralStackNode(6167, 0, cHJvZChsaXQoInJpZ2h0IiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDMsMTAzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDQsMTA0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pXSx7fSk00, new int[] {114,105,103,104,116}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgicmlnaHQiLHNvcnQoIkFzc29jIikpLFtsaXQoInJpZ2h0IildLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgibm9uQXNzb2NpYXRpdmUiLHNvcnQoIkFzc29jIikpLFtsaXQoIm5vbi1hc3NvYyIpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6193, 0, cHJvZChsaXQoIm5vbi1hc3NvYyIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDUsNDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5OSw5OSldKV0se30p, new int[] {110,111,110,45,97,115,115,111,99}, null, null); + tmp[0] = new LiteralStackNode(6170, 0, cHJvZChsaXQoIm5vbi1hc3NvYyIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDUsNDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5OSw5OSldKV0se30p, new int[] {110,111,110,45,97,115,115,111,99}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgibm9uQXNzb2NpYXRpdmUiLHNvcnQoIkFzc29jIikpLFtsaXQoIm5vbi1hc3NvYyIpXSx7fSk00, tmp); } public static void init(ExpectBuilder builder){ @@ -8384,27 +8369,27 @@ protected static class PathTail { protected static final void _init_cHJvZChsYWJlbCgibWlkIixzb3J0KCJQYXRoVGFpbCIpKSxbbGFiZWwoIm1pZCIsbGV4KCJNaWRQYXRoQ2hhcnMiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJleHByZXNzaW9uIixzb3J0KCJFeHByZXNzaW9uIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgidGFpbCIsc29ydCgiUGF0aFRhaWwiKSldLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[1] = new NonTerminalStackNode(6218, 1, "layouts_LAYOUTLIST", null, null); - tmp[3] = new NonTerminalStackNode(6221, 3, "layouts_LAYOUTLIST", null, null); - tmp[0] = new NonTerminalStackNode(6216, 0, "MidPathChars", null, null); - tmp[2] = new NonTerminalStackNode(6219, 2, "Expression", null, null); - tmp[4] = new NonTerminalStackNode(6222, 4, "PathTail", null, null); + tmp[1] = new NonTerminalStackNode(6195, 1, "layouts_LAYOUTLIST", null, null); + tmp[3] = new NonTerminalStackNode(6198, 3, "layouts_LAYOUTLIST", null, null); + tmp[0] = new NonTerminalStackNode(6193, 0, "MidPathChars", null, null); + tmp[2] = new NonTerminalStackNode(6196, 2, "Expression", null, null); + tmp[4] = new NonTerminalStackNode(6199, 4, "PathTail", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgibWlkIixzb3J0KCJQYXRoVGFpbCIpKSxbbGFiZWwoIm1pZCIsbGV4KCJNaWRQYXRoQ2hhcnMiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJleHByZXNzaW9uIixzb3J0KCJFeHByZXNzaW9uIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgidGFpbCIsc29ydCgiUGF0aFRhaWwiKSldLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJQYXRoVGFpbCIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJQYXRoVGFpbFwiKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoc29ydCgiUGF0aFRhaWwiKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[2] = new LiteralStackNode(6228, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[4] = new CharStackNode(6231, 4, new int[][]{{0,0}}, null, null); - tmp[0] = new CharStackNode(6226, 0, new int[][]{{0,0}}, null, null); - tmp[1] = new LiteralStackNode(6227, 1, cHJvZChsaXQoInNvcnQoXCJQYXRoVGFpbFwiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4MCw4MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNCwxMDQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDg0LDg0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {115,111,114,116,40,34,80,97,116,104,84,97,105,108,34,41}, null, null); - tmp[3] = new ListStackNode(6230, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(6229, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[2] = new LiteralStackNode(6205, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[4] = new CharStackNode(6208, 4, new int[][]{{0,0}}, null, null); + tmp[0] = new CharStackNode(6203, 0, new int[][]{{0,0}}, null, null); + tmp[1] = new LiteralStackNode(6204, 1, cHJvZChsaXQoInNvcnQoXCJQYXRoVGFpbFwiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4MCw4MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNCwxMDQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDg0LDg0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {115,111,114,116,40,34,80,97,116,104,84,97,105,108,34,41}, null, null); + tmp[3] = new ListStackNode(6207, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(6206, 0, new int[][]{{48,57}}, null, null), true, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJQYXRoVGFpbCIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJQYXRoVGFpbFwiKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoc29ydCgiUGF0aFRhaWwiKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgicG9zdCIsc29ydCgiUGF0aFRhaWwiKSksW2xhYmVsKCJwb3N0IixsZXgoIlBvc3RQYXRoQ2hhcnMiKSldLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new NonTerminalStackNode(6235, 0, "PostPathChars", null, null); + tmp[0] = new NonTerminalStackNode(6212, 0, "PostPathChars", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgicG9zdCIsc29ydCgiUGF0aFRhaWwiKSksW2xhYmVsKCJwb3N0IixsZXgoIlBvc3RQYXRoQ2hhcnMiKSldLHt9KQ0000, tmp); } public static void init(ExpectBuilder builder){ @@ -8429,19 +8414,19 @@ protected static class MidProtocolChars { protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIk1pZFByb3RvY29sQ2hhcnMiKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJzb3J0KFwiTWlkUHJvdG9jb2xDaGFyc1wiKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIobGV4KCJNaWRQcm90b2NvbENoYXJzIikpKX0p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[4] = new CharStackNode(6295, 4, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(6292, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[0] = new CharStackNode(6290, 0, new int[][]{{0,0}}, null, null); - tmp[3] = new ListStackNode(6294, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(6293, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[1] = new LiteralStackNode(6291, 1, cHJvZChsaXQoInNvcnQoXCJNaWRQcm90b2NvbENoYXJzXCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDc3LDc3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDAsMTAwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4MCw4MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTksOTkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDY3LDY3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDQsMTA0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {115,111,114,116,40,34,77,105,100,80,114,111,116,111,99,111,108,67,104,97,114,115,34,41}, null, null); + tmp[4] = new CharStackNode(6272, 4, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(6269, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[0] = new CharStackNode(6267, 0, new int[][]{{0,0}}, null, null); + tmp[3] = new ListStackNode(6271, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(6270, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[1] = new LiteralStackNode(6268, 1, cHJvZChsaXQoInNvcnQoXCJNaWRQcm90b2NvbENoYXJzXCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDc3LDc3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDAsMTAwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4MCw4MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTksOTkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDY3LDY3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDQsMTA0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {115,111,114,116,40,34,77,105,100,80,114,111,116,111,99,111,108,67,104,97,114,115,34,41}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIk1pZFByb3RvY29sQ2hhcnMiKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJzb3J0KFwiTWlkUHJvdG9jb2xDaGFyc1wiKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIobGV4KCJNaWRQcm90b2NvbENoYXJzIikpKX0p, tmp); } protected static final void _init_cHJvZChsZXgoIk1pZFByb3RvY29sQ2hhcnMiKSxbbGl0KCJcPiIpLGxleCgiVVJMQ2hhcnMiKSxsaXQoIlw8IildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[3]; - tmp[2] = new LiteralStackNode(6300, 2, cHJvZChsaXQoIlw8IiksW1xjaGFyLWNsYXNzKFtyYW5nZSg2MCw2MCldKV0se30p, new int[] {60}, null, null); - tmp[0] = new LiteralStackNode(6298, 0, cHJvZChsaXQoIlw11IiksW1xjaGFyLWNsYXNzKFtyYW5nZSg2Miw2MildKV0se30p, new int[] {62}, null, null); - tmp[1] = new NonTerminalStackNode(6299, 1, "URLChars", null, null); + tmp[2] = new LiteralStackNode(6277, 2, cHJvZChsaXQoIlw8IiksW1xjaGFyLWNsYXNzKFtyYW5nZSg2MCw2MCldKV0se30p, new int[] {60}, null, null); + tmp[0] = new LiteralStackNode(6275, 0, cHJvZChsaXQoIlw11IiksW1xjaGFyLWNsYXNzKFtyYW5nZSg2Miw2MildKV0se30p, new int[] {62}, null, null); + tmp[1] = new NonTerminalStackNode(6276, 1, "URLChars", null, null); builder.addAlternative(RascalParser.cHJvZChsZXgoIk1pZFByb3RvY29sQ2hhcnMiKSxbbGl0KCJcPiIpLGxleCgiVVJMQ2hhcnMiKSxsaXQoIlw8IildLHt9KQ0000, tmp); } public static void init(ExpectBuilder builder){ @@ -8464,18 +8449,18 @@ protected static class OctalIntegerLiteral { protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIk9jdGFsSW50ZWdlckxpdGVyYWwiKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJzb3J0KFwiT2N0YWxJbnRlZ2VyTGl0ZXJhbFwiKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIobGV4KCJPY3RhbEludGVnZXJMaXRlcmFsIikpKX0p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[0] = new CharStackNode(6414, 0, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(6416, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[4] = new CharStackNode(6419, 4, new int[][]{{0,0}}, null, null); - tmp[1] = new LiteralStackNode(6415, 1, cHJvZChsaXQoInNvcnQoXCJPY3RhbEludGVnZXJMaXRlcmFsXCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDc5LDc5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5OSw5OSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDczLDczKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDMsMTAzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg3Niw3NildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,79,99,116,97,108,73,110,116,101,103,101,114,76,105,116,101,114,97,108,34,41}, null, null); - tmp[3] = new ListStackNode(6418, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(6417, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[0] = new CharStackNode(6391, 0, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(6393, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[4] = new CharStackNode(6396, 4, new int[][]{{0,0}}, null, null); + tmp[1] = new LiteralStackNode(6392, 1, cHJvZChsaXQoInNvcnQoXCJPY3RhbEludGVnZXJMaXRlcmFsXCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDc5LDc5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5OSw5OSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDczLDczKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDMsMTAzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg3Niw3NildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,79,99,116,97,108,73,110,116,101,103,101,114,76,105,116,101,114,97,108,34,41}, null, null); + tmp[3] = new ListStackNode(6395, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(6394, 0, new int[][]{{48,57}}, null, null), true, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIk9jdGFsSW50ZWdlckxpdGVyYWwiKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJzb3J0KFwiT2N0YWxJbnRlZ2VyTGl0ZXJhbFwiKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIobGV4KCJPY3RhbEludGVnZXJMaXRlcmFsIikpKX0p, tmp); } protected static final void _init_cHJvZChsZXgoIk9jdGFsSW50ZWdlckxpdGVyYWwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDQ4KV0pLGNvbmRpdGlvbmFsKGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU1KV0pKSx7XG5vdC1mb2xsb3coXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KSxyYW5nZSg2NSw5MCkscmFuZ2UoOTUsOTUpLHJhbmdlKDk3LDEyMildKSl9KV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[2]; - tmp[0] = new CharStackNode(6422, 0, new int[][]{{48,48}}, null, null); - tmp[1] = new ListStackNode(6426, 1, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NSldKSkp, new CharStackNode(6423, 0, new int[][]{{48,55}}, null, null), true, null, new ICompletionFilter[] {new CharFollowRestriction(new int[][]{{48,57},{65,90},{95,95},{97,122}})}); + tmp[0] = new CharStackNode(6399, 0, new int[][]{{48,48}}, null, null); + tmp[1] = new ListStackNode(6403, 1, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NSldKSkp, new CharStackNode(6400, 0, new int[][]{{48,55}}, null, null), true, null, new ICompletionFilter[] {new CharFollowRestriction(new int[][]{{48,57},{65,90},{95,95},{97,122}})}); builder.addAlternative(RascalParser.cHJvZChsZXgoIk9jdGFsSW50ZWdlckxpdGVyYWwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDQ4KV0pLGNvbmRpdGlvbmFsKGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU1KV0pKSx7XG5vdC1mb2xsb3coXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KSxyYW5nZSg2NSw5MCkscmFuZ2UoOTUsOTUpLHJhbmdlKDk3LDEyMildKSl9KV0se30p, tmp); } public static void init(ExpectBuilder builder){ @@ -8498,29 +8483,29 @@ protected static class DateTimeLiteral { protected static final void _init_cHJvZChsYWJlbCgiZGF0ZUxpdGVyYWwiLHNvcnQoIkRhdGVUaW1lTGl0ZXJhbCIpKSxbbGFiZWwoImRhdGUiLGxleCgiSnVzdERhdGUiKSldLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new NonTerminalStackNode(6455, 0, "JustDate", null, null); + tmp[0] = new NonTerminalStackNode(6432, 0, "JustDate", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiZGF0ZUxpdGVyYWwiLHNvcnQoIkRhdGVUaW1lTGl0ZXJhbCIpKSxbbGFiZWwoImRhdGUiLGxleCgiSnVzdERhdGUiKSldLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgidGltZUxpdGVyYWwiLHNvcnQoIkRhdGVUaW1lTGl0ZXJhbCIpKSxbbGFiZWwoInRpbWUiLGxleCgiSnVzdFRpbWUiKSldLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new NonTerminalStackNode(6459, 0, "JustTime", null, null); + tmp[0] = new NonTerminalStackNode(6436, 0, "JustTime", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgidGltZUxpdGVyYWwiLHNvcnQoIkRhdGVUaW1lTGl0ZXJhbCIpKSxbbGFiZWwoInRpbWUiLGxleCgiSnVzdFRpbWUiKSldLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJEYXRlVGltZUxpdGVyYWwiKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJzb3J0KFwiRGF0ZVRpbWVMaXRlcmFsXCIpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihzb3J0KCJEYXRlVGltZUxpdGVyYWwiKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[1] = new LiteralStackNode(6464, 1, cHJvZChsaXQoInNvcnQoXCJEYXRlVGltZUxpdGVyYWxcIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNjgsNjgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4NCw4NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNzYsNzYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {115,111,114,116,40,34,68,97,116,101,84,105,109,101,76,105,116,101,114,97,108,34,41}, null, null); - tmp[3] = new ListStackNode(6467, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(6466, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[0] = new CharStackNode(6463, 0, new int[][]{{0,0}}, null, null); - tmp[4] = new CharStackNode(6468, 4, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(6465, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[1] = new LiteralStackNode(6441, 1, cHJvZChsaXQoInNvcnQoXCJEYXRlVGltZUxpdGVyYWxcIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNjgsNjgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4NCw4NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNzYsNzYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {115,111,114,116,40,34,68,97,116,101,84,105,109,101,76,105,116,101,114,97,108,34,41}, null, null); + tmp[3] = new ListStackNode(6444, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(6443, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[0] = new CharStackNode(6440, 0, new int[][]{{0,0}}, null, null); + tmp[4] = new CharStackNode(6445, 4, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(6442, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJEYXRlVGltZUxpdGVyYWwiKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJzb3J0KFwiRGF0ZVRpbWVMaXRlcmFsXCIpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihzb3J0KCJEYXRlVGltZUxpdGVyYWwiKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiZGF0ZUFuZFRpbWVMaXRlcmFsIixzb3J0KCJEYXRlVGltZUxpdGVyYWwiKSksW2xhYmVsKCJkYXRlQW5kVGltZSIsbGV4KCJEYXRlQW5kVGltZSIpKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new NonTerminalStackNode(6472, 0, "DateAndTime", null, null); + tmp[0] = new NonTerminalStackNode(6449, 0, "DateAndTime", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiZGF0ZUFuZFRpbWVMaXRlcmFsIixzb3J0KCJEYXRlVGltZUxpdGVyYWwiKSksW2xhYmVsKCJkYXRlQW5kVGltZSIsbGV4KCJEYXRlQW5kVGltZSIpKV0se30p, tmp); } public static void init(ExpectBuilder builder){ @@ -8547,65 +8532,65 @@ protected static class Kind { protected static final void _init_cHJvZChsYWJlbCgiYWxsIixzb3J0KCJLaW5kIikpLFtsaXQoImFsbCIpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6537, 0, cHJvZChsaXQoImFsbCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSldLHt9KQ0000, new int[] {97,108,108}, null, null); + tmp[0] = new LiteralStackNode(6514, 0, cHJvZChsaXQoImFsbCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSldLHt9KQ0000, new int[] {97,108,108}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiYWxsIixzb3J0KCJLaW5kIikpLFtsaXQoImFsbCIpXSx7fSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgidmFyaWFibGUiLHNvcnQoIktpbmQiKSksW2xpdCgidmFyaWFibGUiKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6540, 0, cHJvZChsaXQoInZhcmlhYmxlIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTgsMTE4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk4LDk4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pXSx7fSk00, new int[] {118,97,114,105,97,98,108,101}, null, null); + tmp[0] = new LiteralStackNode(6517, 0, cHJvZChsaXQoInZhcmlhYmxlIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTgsMTE4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk4LDk4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pXSx7fSk00, new int[] {118,97,114,105,97,98,108,101}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgidmFyaWFibGUiLHNvcnQoIktpbmQiKSksW2xpdCgidmFyaWFibGUiKV0se30p, tmp); } protected static final void _init_cHJvZChsYWJlbCgiYWxpYXMiLHNvcnQoIktpbmQiKSksW2xpdCgiYWxpYXMiKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6543, 0, cHJvZChsaXQoImFsaWFzIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSldLHt9KQ0000, new int[] {97,108,105,97,115}, null, null); + tmp[0] = new LiteralStackNode(6520, 0, cHJvZChsaXQoImFsaWFzIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSldLHt9KQ0000, new int[] {97,108,105,97,115}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiYWxpYXMiLHNvcnQoIktpbmQiKSksW2xpdCgiYWxpYXMiKV0se30p, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJLaW5kIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIktpbmRcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKHNvcnQoIktpbmQiKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[4] = new CharStackNode(6551, 4, new int[][]{{0,0}}, null, null); - tmp[0] = new CharStackNode(6546, 0, new int[][]{{0,0}}, null, null); - tmp[1] = new LiteralStackNode(6547, 1, cHJvZChsaXQoInNvcnQoXCJLaW5kXCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDc1LDc1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDAsMTAwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {115,111,114,116,40,34,75,105,110,100,34,41}, null, null); - tmp[3] = new ListStackNode(6550, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(6549, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[2] = new LiteralStackNode(6548, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[4] = new CharStackNode(6528, 4, new int[][]{{0,0}}, null, null); + tmp[0] = new CharStackNode(6523, 0, new int[][]{{0,0}}, null, null); + tmp[1] = new LiteralStackNode(6524, 1, cHJvZChsaXQoInNvcnQoXCJLaW5kXCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDc1LDc1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDAsMTAwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {115,111,114,116,40,34,75,105,110,100,34,41}, null, null); + tmp[3] = new ListStackNode(6527, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(6526, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[2] = new LiteralStackNode(6525, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJLaW5kIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIktpbmRcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKHNvcnQoIktpbmQiKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgibW9kdWxlIixzb3J0KCJLaW5kIikpLFtsaXQoIm1vZHVsZSIpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6555, 0, cHJvZChsaXQoIm1vZHVsZSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAwLDEwMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE3LDExNyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKV0se30p, new int[] {109,111,100,117,108,101}, null, null); + tmp[0] = new LiteralStackNode(6532, 0, cHJvZChsaXQoIm1vZHVsZSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAwLDEwMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE3LDExNyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKV0se30p, new int[] {109,111,100,117,108,101}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgibW9kdWxlIixzb3J0KCJLaW5kIikpLFtsaXQoIm1vZHVsZSIpXSx7fSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiYW5ubyIsc29ydCgiS2luZCIpKSxbbGl0KCJhbm5vIildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6558, 0, cHJvZChsaXQoImFubm8iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pXSx7fSk00, new int[] {97,110,110,111}, null, null); + tmp[0] = new LiteralStackNode(6535, 0, cHJvZChsaXQoImFubm8iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pXSx7fSk00, new int[] {97,110,110,111}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiYW5ubyIsc29ydCgiS2luZCIpKSxbbGl0KCJhbm5vIildLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgiZGF0YSIsc29ydCgiS2luZCIpKSxbbGl0KCJkYXRhIildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6561, 0, cHJvZChsaXQoImRhdGEiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEwMCwxMDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKV0se30p, new int[] {100,97,116,97}, null, null); + tmp[0] = new LiteralStackNode(6538, 0, cHJvZChsaXQoImRhdGEiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEwMCwxMDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKV0se30p, new int[] {100,97,116,97}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiZGF0YSIsc29ydCgiS2luZCIpKSxbbGl0KCJkYXRhIildLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgidmlldyIsc29ydCgiS2luZCIpKSxbbGl0KCJ2aWV3IildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6564, 0, cHJvZChsaXQoInZpZXciKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExOCwxMTgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExOSwxMTkpXSldLHt9KQ0000, new int[] {118,105,101,119}, null, null); + tmp[0] = new LiteralStackNode(6541, 0, cHJvZChsaXQoInZpZXciKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExOCwxMTgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExOSwxMTkpXSldLHt9KQ0000, new int[] {118,105,101,119}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgidmlldyIsc29ydCgiS2luZCIpKSxbbGl0KCJ2aWV3IildLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgidGFnIixzb3J0KCJLaW5kIikpLFtsaXQoInRhZyIpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6567, 0, cHJvZChsaXQoInRhZyIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMywxMDMpXSldLHt9KQ0000, new int[] {116,97,103}, null, null); + tmp[0] = new LiteralStackNode(6544, 0, cHJvZChsaXQoInRhZyIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMywxMDMpXSldLHt9KQ0000, new int[] {116,97,103}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgidGFnIixzb3J0KCJLaW5kIikpLFtsaXQoInRhZyIpXSx7fSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiZnVuY3Rpb24iLHNvcnQoIktpbmQiKSksW2xpdCgiZnVuY3Rpb24iKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6570, 0, cHJvZChsaXQoImZ1bmN0aW9uIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMDIsMTAyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTcsMTE3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5OSw5OSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKV0se30p, new int[] {102,117,110,99,116,105,111,110}, null, null); + tmp[0] = new LiteralStackNode(6547, 0, cHJvZChsaXQoImZ1bmN0aW9uIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMDIsMTAyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTcsMTE3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5OSw5OSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKV0se30p, new int[] {102,117,110,99,116,105,111,110}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiZnVuY3Rpb24iLHNvcnQoIktpbmQiKSksW2xpdCgiZnVuY3Rpb24iKV0se30p, tmp); } public static void init(ExpectBuilder builder){ @@ -8644,433 +8629,433 @@ protected static class RascalKeywords { protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJicmVhayIpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6577, 0, cHJvZChsaXQoImJyZWFrIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg5OCw5OCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNywxMDcpXSldLHt9KQ0000, new int[] {98,114,101,97,107}, null, null); + tmp[0] = new LiteralStackNode(6554, 0, cHJvZChsaXQoImJyZWFrIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg5OCw5OCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNywxMDcpXSldLHt9KQ0000, new int[] {98,114,101,97,107}, null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJicmVhayIpXSx7fSk00, tmp); } protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJmb3IiKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6579, 0, cHJvZChsaXQoImZvciIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTAyLDEwMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKV0se30p, new int[] {102,111,114}, null, null); + tmp[0] = new LiteralStackNode(6556, 0, cHJvZChsaXQoImZvciIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTAyLDEwMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKV0se30p, new int[] {102,111,114}, null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJmb3IiKV0se30p, tmp); } protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJzdHIiKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6581, 0, cHJvZChsaXQoInN0ciIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKV0se30p, new int[] {115,116,114}, null, null); + tmp[0] = new LiteralStackNode(6558, 0, cHJvZChsaXQoInN0ciIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKV0se30p, new int[] {115,116,114}, null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJzdHIiKV0se30p, tmp); } protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJub2RlIildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6583, 0, cHJvZChsaXQoIm5vZGUiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMCwxMDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSldLHt9KQ0000, new int[] {110,111,100,101}, null, null); + tmp[0] = new LiteralStackNode(6560, 0, cHJvZChsaXQoIm5vZGUiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMCwxMDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSldLHt9KQ0000, new int[] {110,111,100,101}, null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJub2RlIildLHt9KQ0000, tmp); } protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJ0dXBsZSIpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6585, 0, cHJvZChsaXQoInR1cGxlIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTcsMTE3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTIsMTEyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pXSx7fSk00, new int[] {116,117,112,108,101}, null, null); + tmp[0] = new LiteralStackNode(6562, 0, cHJvZChsaXQoInR1cGxlIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTcsMTE3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTIsMTEyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pXSx7fSk00, new int[] {116,117,112,108,101}, null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJ0dXBsZSIpXSx7fSk00, tmp); } protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJzb2x2ZSIpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6587, 0, cHJvZChsaXQoInNvbHZlIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTgsMTE4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pXSx7fSk00, new int[] {115,111,108,118,101}, null, null); + tmp[0] = new LiteralStackNode(6564, 0, cHJvZChsaXQoInNvbHZlIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTgsMTE4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pXSx7fSk00, new int[] {115,111,108,118,101}, null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJzb2x2ZSIpXSx7fSk00, tmp); } protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJyYXQiKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6589, 0, cHJvZChsaXQoInJhdCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSldLHt9KQ0000, new int[] {114,97,116}, null, null); + tmp[0] = new LiteralStackNode(6566, 0, cHJvZChsaXQoInJhdCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSldLHt9KQ0000, new int[] {114,97,116}, null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJyYXQiKV0se30p, tmp); } protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJkeW5hbWljIildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6591, 0, cHJvZChsaXQoImR5bmFtaWMiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEwMCwxMDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDEyMSwxMjEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDksMTA5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5OSw5OSldKV0se30p, new int[] {100,121,110,97,109,105,99}, null, null); + tmp[0] = new LiteralStackNode(6568, 0, cHJvZChsaXQoImR5bmFtaWMiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEwMCwxMDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDEyMSwxMjEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDksMTA5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5OSw5OSldKV0se30p, new int[] {100,121,110,97,109,105,99}, null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJkeW5hbWljIildLHt9KQ0000, tmp); } protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJhc3NvYyIpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6593, 0, cHJvZChsaXQoImFzc29jIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTksOTkpXSldLHt9KQ0000, new int[] {97,115,115,111,99}, null, null); + tmp[0] = new LiteralStackNode(6570, 0, cHJvZChsaXQoImFzc29jIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTksOTkpXSldLHt9KQ0000, new int[] {97,115,115,111,99}, null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJhc3NvYyIpXSx7fSk00, tmp); } protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJiYWciKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6595, 0, cHJvZChsaXQoImJhZyIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoOTgsOTgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDMsMTAzKV0pXSx7fSk00, new int[] {98,97,103}, null, null); + tmp[0] = new LiteralStackNode(6572, 0, cHJvZChsaXQoImJhZyIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoOTgsOTgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDMsMTAzKV0pXSx7fSk00, new int[] {98,97,103}, null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJiYWciKV0se30p, tmp); } protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJzZXQiKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6597, 0, cHJvZChsaXQoInNldCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKV0se30p, new int[] {115,101,116}, null, null); + tmp[0] = new LiteralStackNode(6574, 0, cHJvZChsaXQoInNldCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKV0se30p, new int[] {115,101,116}, null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJzZXQiKV0se30p, tmp); } protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJvIildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6599, 0, cHJvZChsaXQoIm8iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSldLHt9KQ0000, new int[] {111}, null, null); + tmp[0] = new LiteralStackNode(6576, 0, cHJvZChsaXQoIm8iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSldLHt9KQ0000, new int[] {111}, null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJvIildLHt9KQ0000, tmp); } protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJzdGFydCIpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6601, 0, cHJvZChsaXQoInN0YXJ0IiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKV0se30p, new int[] {115,116,97,114,116}, null, null); + tmp[0] = new LiteralStackNode(6578, 0, cHJvZChsaXQoInN0YXJ0IiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKV0se30p, new int[] {115,116,97,114,116}, null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJzdGFydCIpXSx7fSk00, tmp); } protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbc29ydCgiQmFzaWNUeXBlIildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new NonTerminalStackNode(6603, 0, "BasicType", null, null); + tmp[0] = new NonTerminalStackNode(6580, 0, "BasicType", null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbc29ydCgiQmFzaWNUeXBlIildLHt9KQ0000, tmp); } protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJscmVsIildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6605, 0, cHJvZChsaXQoImxyZWwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSldLHt9KQ0000, new int[] {108,114,101,108}, null, null); + tmp[0] = new LiteralStackNode(6582, 0, cHJvZChsaXQoImxyZWwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSldLHt9KQ0000, new int[] {108,114,101,108}, null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJscmVsIildLHt9KQ0000, tmp); } protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJjb250aW51ZSIpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6607, 0, cHJvZChsaXQoImNvbnRpbnVlIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg5OSw5OSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE3LDExNyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKV0se30p, new int[] {99,111,110,116,105,110,117,101}, null, null); + tmp[0] = new LiteralStackNode(6584, 0, cHJvZChsaXQoImNvbnRpbnVlIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg5OSw5OSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE3LDExNyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKV0se30p, new int[] {99,111,110,116,105,110,117,101}, null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJjb250aW51ZSIpXSx7fSk00, tmp); } protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJicmFja2V0IildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6609, 0, cHJvZChsaXQoImJyYWNrZXQiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDk4LDk4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTksOTkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNywxMDcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSldLHt9KQ0000, new int[] {98,114,97,99,107,101,116}, null, null); + tmp[0] = new LiteralStackNode(6586, 0, cHJvZChsaXQoImJyYWNrZXQiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDk4LDk4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTksOTkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNywxMDcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSldLHt9KQ0000, new int[] {98,114,97,99,107,101,116}, null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJicmFja2V0IildLHt9KQ0000, tmp); } protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJyZWwiKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6611, 0, cHJvZChsaXQoInJlbCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKV0se30p, new int[] {114,101,108}, null, null); + tmp[0] = new LiteralStackNode(6588, 0, cHJvZChsaXQoInJlbCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKV0se30p, new int[] {114,101,108}, null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJyZWwiKV0se30p, tmp); } protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJsaXN0IildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6613, 0, cHJvZChsaXQoImxpc3QiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSldLHt9KQ0000, new int[] {108,105,115,116}, null, null); + tmp[0] = new LiteralStackNode(6590, 0, cHJvZChsaXQoImxpc3QiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSldLHt9KQ0000, new int[] {108,105,115,116}, null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJsaXN0IildLHt9KQ0000, tmp); } protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJ0ZXN0IildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6615, 0, cHJvZChsaXQoInRlc3QiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSldLHt9KQ0000, new int[] {116,101,115,116}, null, null); + tmp[0] = new LiteralStackNode(6592, 0, cHJvZChsaXQoInRlc3QiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSldLHt9KQ0000, new int[] {116,101,115,116}, null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJ0ZXN0IildLHt9KQ0000, tmp); } protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJyZXR1cm4iKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6617, 0, cHJvZChsaXQoInJldHVybiIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE3LDExNyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKV0se30p, new int[] {114,101,116,117,114,110}, null, null); + tmp[0] = new LiteralStackNode(6594, 0, cHJvZChsaXQoInJldHVybiIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE3LDExNyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKV0se30p, new int[] {114,101,116,117,114,110}, null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJyZXR1cm4iKV0se30p, tmp); } protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJmYWxzZSIpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6619, 0, cHJvZChsaXQoImZhbHNlIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMDIsMTAyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKV0se30p, new int[] {102,97,108,115,101}, null, null); + tmp[0] = new LiteralStackNode(6596, 0, cHJvZChsaXQoImZhbHNlIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMDIsMTAyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKV0se30p, new int[] {102,97,108,115,101}, null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJmYWxzZSIpXSx7fSk00, tmp); } protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJqb2luIildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6621, 0, cHJvZChsaXQoImpvaW4iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEwNiwxMDYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSldLHt9KQ0000, new int[] {106,111,105,110}, null, null); + tmp[0] = new LiteralStackNode(6598, 0, cHJvZChsaXQoImpvaW4iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEwNiwxMDYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSldLHt9KQ0000, new int[] {106,111,105,110}, null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJqb2luIildLHt9KQ0000, tmp); } protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJlbHNlIildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6623, 0, cHJvZChsaXQoImVsc2UiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSldLHt9KQ0000, new int[] {101,108,115,101}, null, null); + tmp[0] = new LiteralStackNode(6600, 0, cHJvZChsaXQoImVsc2UiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSldLHt9KQ0000, new int[] {101,108,115,101}, null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJlbHNlIildLHt9KQ0000, tmp); } protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJpdCIpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6625, 0, cHJvZChsaXQoIml0IiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pXSx7fSk00, new int[] {105,116}, null, null); + tmp[0] = new LiteralStackNode(6602, 0, cHJvZChsaXQoIml0IiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pXSx7fSk00, new int[] {105,116}, null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJpdCIpXSx7fSk00, tmp); } protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJpbiIpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6627, 0, cHJvZChsaXQoImluIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pXSx7fSk00, new int[] {105,110}, null, null); + tmp[0] = new LiteralStackNode(6604, 0, cHJvZChsaXQoImluIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pXSx7fSk00, new int[] {105,110}, null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJpbiIpXSx7fSk00, tmp); } protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJpZiIpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6629, 0, cHJvZChsaXQoImlmIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDIsMTAyKV0pXSx7fSk00, new int[] {105,102}, null, null); + tmp[0] = new LiteralStackNode(6606, 0, cHJvZChsaXQoImlmIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDIsMTAyKV0pXSx7fSk00, new int[] {105,102}, null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJpZiIpXSx7fSk00, tmp); } protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJub24tYXNzb2MiKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6631, 0, cHJvZChsaXQoIm5vbi1hc3NvYyIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDUsNDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5OSw5OSldKV0se30p, new int[] {110,111,110,45,97,115,115,111,99}, null, null); + tmp[0] = new LiteralStackNode(6608, 0, cHJvZChsaXQoIm5vbi1hc3NvYyIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDUsNDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5OSw5OSldKV0se30p, new int[] {110,111,110,45,97,115,115,111,99}, null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJub24tYXNzb2MiKV0se30p, tmp); } protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJsZXhpY2FsIildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6633, 0, cHJvZChsaXQoImxleGljYWwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEyMCwxMjApXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk5LDk5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKV0se30p, new int[] {108,101,120,105,99,97,108}, null, null); + tmp[0] = new LiteralStackNode(6610, 0, cHJvZChsaXQoImxleGljYWwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEyMCwxMjApXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk5LDk5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKV0se30p, new int[] {108,101,120,105,99,97,108}, null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJsZXhpY2FsIildLHt9KQ0000, tmp); } protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJ2YWx1ZSIpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6635, 0, cHJvZChsaXQoInZhbHVlIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTgsMTE4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE3LDExNyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKV0se30p, new int[] {118,97,108,117,101}, null, null); + tmp[0] = new LiteralStackNode(6612, 0, cHJvZChsaXQoInZhbHVlIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTgsMTE4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE3LDExNyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKV0se30p, new int[] {118,97,108,117,101}, null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJ2YWx1ZSIpXSx7fSk00, tmp); } protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJtYXAiKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6637, 0, cHJvZChsaXQoIm1hcCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSldLHt9KQ0000, new int[] {109,97,112}, null, null); + tmp[0] = new LiteralStackNode(6614, 0, cHJvZChsaXQoIm1hcCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSldLHt9KQ0000, new int[] {109,97,112}, null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJtYXAiKV0se30p, tmp); } protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJ2aXNpdCIpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6639, 0, cHJvZChsaXQoInZpc2l0IiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTgsMTE4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pXSx7fSk00, new int[] {118,105,115,105,116}, null, null); + tmp[0] = new LiteralStackNode(6616, 0, cHJvZChsaXQoInZpc2l0IiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTgsMTE4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pXSx7fSk00, new int[] {118,105,115,105,116}, null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJ2aXNpdCIpXSx7fSk00, tmp); } protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJhbGwiKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6641, 0, cHJvZChsaXQoImFsbCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSldLHt9KQ0000, new int[] {97,108,108}, null, null); + tmp[0] = new LiteralStackNode(6618, 0, cHJvZChsaXQoImFsbCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSldLHt9KQ0000, new int[] {97,108,108}, null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJhbGwiKV0se30p, tmp); } protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJ0cnkiKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6643, 0, cHJvZChsaXQoInRyeSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTIxLDEyMSldKV0se30p, new int[] {116,114,121}, null, null); + tmp[0] = new LiteralStackNode(6620, 0, cHJvZChsaXQoInRyeSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTIxLDEyMSldKV0se30p, new int[] {116,114,121}, null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJ0cnkiKV0se30p, tmp); } protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJwcml2YXRlIildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6645, 0, cHJvZChsaXQoInByaXZhdGUiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExOCwxMTgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pXSx7fSk00, new int[] {112,114,105,118,97,116,101}, null, null); + tmp[0] = new LiteralStackNode(6622, 0, cHJvZChsaXQoInByaXZhdGUiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExOCwxMTgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pXSx7fSk00, new int[] {112,114,105,118,97,116,101}, null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJwcml2YXRlIildLHt9KQ0000, tmp); } protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJ0cnVlIildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6647, 0, cHJvZChsaXQoInRydWUiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNywxMTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSldLHt9KQ0000, new int[] {116,114,117,101}, null, null); + tmp[0] = new LiteralStackNode(6624, 0, cHJvZChsaXQoInRydWUiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNywxMTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSldLHt9KQ0000, new int[] {116,114,117,101}, null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJ0cnVlIildLHt9KQ0000, tmp); } protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJmaW5hbGx5IildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6649, 0, cHJvZChsaXQoImZpbmFsbHkiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEwMiwxMDIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMjEsMTIxKV0pXSx7fSk00, new int[] {102,105,110,97,108,108,121}, null, null); + tmp[0] = new LiteralStackNode(6626, 0, cHJvZChsaXQoImZpbmFsbHkiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEwMiwxMDIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMjEsMTIxKV0pXSx7fSk00, new int[] {102,105,110,97,108,108,121}, null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJmaW5hbGx5IildLHt9KQ0000, tmp); } protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJyZWFsIildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6651, 0, cHJvZChsaXQoInJlYWwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pXSx7fSk00, new int[] {114,101,97,108}, null, null); + tmp[0] = new LiteralStackNode(6628, 0, cHJvZChsaXQoInJlYWwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pXSx7fSk00, new int[] {114,101,97,108}, null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJyZWFsIildLHt9KQ0000, tmp); } protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJ2b2lkIildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6653, 0, cHJvZChsaXQoInZvaWQiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExOCwxMTgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMCwxMDApXSldLHt9KQ0000, new int[] {118,111,105,100}, null, null); + tmp[0] = new LiteralStackNode(6630, 0, cHJvZChsaXQoInZvaWQiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExOCwxMTgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMCwxMDApXSldLHt9KQ0000, new int[] {118,111,105,100}, null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJ2b2lkIildLHt9KQ0000, tmp); } protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJrZXl3b3JkIildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6655, 0, cHJvZChsaXQoImtleXdvcmQiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEwNywxMDcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEyMSwxMjEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExOSwxMTkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMCwxMDApXSldLHt9KQ0000, new int[] {107,101,121,119,111,114,100}, null, null); + tmp[0] = new LiteralStackNode(6632, 0, cHJvZChsaXQoImtleXdvcmQiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEwNywxMDcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEyMSwxMjEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExOSwxMTkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMCwxMDApXSldLHt9KQ0000, new int[] {107,101,121,119,111,114,100}, null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJrZXl3b3JkIildLHt9KQ0000, tmp); } protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJhbnkiKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6657, 0, cHJvZChsaXQoImFueSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDEyMSwxMjEpXSldLHt9KQ0000, new int[] {97,110,121}, null, null); + tmp[0] = new LiteralStackNode(6634, 0, cHJvZChsaXQoImFueSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDEyMSwxMjEpXSldLHt9KQ0000, new int[] {97,110,121}, null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJhbnkiKV0se30p, tmp); } protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJvbmUiKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6659, 0, cHJvZChsaXQoIm9uZSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKV0se30p, new int[] {111,110,101}, null, null); + tmp[0] = new LiteralStackNode(6636, 0, cHJvZChsaXQoIm9uZSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKV0se30p, new int[] {111,110,101}, null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJvbmUiKV0se30p, tmp); } protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJtb2R1bGUiKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6661, 0, cHJvZChsaXQoIm1vZHVsZSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAwLDEwMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE3LDExNyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKV0se30p, new int[] {109,111,100,117,108,101}, null, null); + tmp[0] = new LiteralStackNode(6638, 0, cHJvZChsaXQoIm1vZHVsZSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAwLDEwMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE3LDExNyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKV0se30p, new int[] {109,111,100,117,108,101}, null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJtb2R1bGUiKV0se30p, tmp); } protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJwdWJsaWMiKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6663, 0, cHJvZChsaXQoInB1YmxpYyIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTEyLDExMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE3LDExNyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTgsOTgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk5LDk5KV0pXSx7fSk00, new int[] {112,117,98,108,105,99}, null, null); + tmp[0] = new LiteralStackNode(6640, 0, cHJvZChsaXQoInB1YmxpYyIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTEyLDExMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE3LDExNyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTgsOTgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk5LDk5KV0pXSx7fSk00, new int[] {112,117,98,108,105,99}, null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJwdWJsaWMiKV0se30p, tmp); } protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJ0aHJvd3MiKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6665, 0, cHJvZChsaXQoInRocm93cyIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA0LDEwNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE5LDExOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKV0se30p, new int[] {116,104,114,111,119,115}, null, null); + tmp[0] = new LiteralStackNode(6642, 0, cHJvZChsaXQoInRocm93cyIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA0LDEwNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE5LDExOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKV0se30p, new int[] {116,104,114,111,119,115}, null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJ0aHJvd3MiKV0se30p, tmp); } protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJhbGlhcyIpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6667, 0, cHJvZChsaXQoImFsaWFzIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSldLHt9KQ0000, new int[] {97,108,105,97,115}, null, null); + tmp[0] = new LiteralStackNode(6644, 0, cHJvZChsaXQoImFsaWFzIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSldLHt9KQ0000, new int[] {97,108,105,97,115}, null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJhbGlhcyIpXSx7fSk00, tmp); } protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJkZWZhdWx0IildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6669, 0, cHJvZChsaXQoImRlZmF1bHQiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEwMCwxMDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMiwxMDIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTcsMTE3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pXSx7fSk00, new int[] {100,101,102,97,117,108,116}, null, null); + tmp[0] = new LiteralStackNode(6646, 0, cHJvZChsaXQoImRlZmF1bHQiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEwMCwxMDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMiwxMDIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTcsMTE3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pXSx7fSk00, new int[] {100,101,102,97,117,108,116}, null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJkZWZhdWx0IildLHt9KQ0000, tmp); } protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJjYXRjaCIpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6671, 0, cHJvZChsaXQoImNhdGNoIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg5OSw5OSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk5LDk5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDQsMTA0KV0pXSx7fSk00, new int[] {99,97,116,99,104}, null, null); + tmp[0] = new LiteralStackNode(6648, 0, cHJvZChsaXQoImNhdGNoIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg5OSw5OSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk5LDk5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDQsMTA0KV0pXSx7fSk00, new int[] {99,97,116,99,104}, null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJjYXRjaCIpXSx7fSk00, tmp); } protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJpbnNlcnQiKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6673, 0, cHJvZChsaXQoImluc2VydCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKV0se30p, new int[] {105,110,115,101,114,116}, null, null); + tmp[0] = new LiteralStackNode(6650, 0, cHJvZChsaXQoImluc2VydCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKV0se30p, new int[] {105,110,115,101,114,116}, null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJpbnNlcnQiKV0se30p, tmp); } protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJhbm5vIildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6675, 0, cHJvZChsaXQoImFubm8iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pXSx7fSk00, new int[] {97,110,110,111}, null, null); + tmp[0] = new LiteralStackNode(6652, 0, cHJvZChsaXQoImFubm8iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pXSx7fSk00, new int[] {97,110,110,111}, null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJhbm5vIildLHt9KQ0000, tmp); } protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJ0aHJvdyIpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6677, 0, cHJvZChsaXQoInRocm93IiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDQsMTA0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTksMTE5KV0pXSx7fSk00, new int[] {116,104,114,111,119}, null, null); + tmp[0] = new LiteralStackNode(6654, 0, cHJvZChsaXQoInRocm93IiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDQsMTA0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTksMTE5KV0pXSx7fSk00, new int[] {116,104,114,111,119}, null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJ0aHJvdyIpXSx7fSk00, tmp); } protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJib29sIildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6679, 0, cHJvZChsaXQoImJvb2wiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDk4LDk4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pXSx7fSk00, new int[] {98,111,111,108}, null, null); + tmp[0] = new LiteralStackNode(6656, 0, cHJvZChsaXQoImJvb2wiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDk4LDk4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pXSx7fSk00, new int[] {98,111,111,108}, null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJib29sIildLHt9KQ0000, tmp); } protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJzd2l0Y2giKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6681, 0, cHJvZChsaXQoInN3aXRjaCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE5LDExOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTksOTkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNCwxMDQpXSldLHt9KQ0000, new int[] {115,119,105,116,99,104}, null, null); + tmp[0] = new LiteralStackNode(6658, 0, cHJvZChsaXQoInN3aXRjaCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE5LDExOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTksOTkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNCwxMDQpXSldLHt9KQ0000, new int[] {115,119,105,116,99,104}, null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJzd2l0Y2giKV0se30p, tmp); } protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJ0eXBlIildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6683, 0, cHJvZChsaXQoInR5cGUiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEyMSwxMjEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSldLHt9KQ0000, new int[] {116,121,112,101}, null, null); + tmp[0] = new LiteralStackNode(6660, 0, cHJvZChsaXQoInR5cGUiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEyMSwxMjEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSldLHt9KQ0000, new int[] {116,121,112,101}, null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJ0eXBlIildLHt9KQ0000, tmp); } protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJ3aGlsZSIpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6685, 0, cHJvZChsaXQoIndoaWxlIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTksMTE5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDQsMTA0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pXSx7fSk00, new int[] {119,104,105,108,101}, null, null); + tmp[0] = new LiteralStackNode(6662, 0, cHJvZChsaXQoIndoaWxlIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTksMTE5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDQsMTA0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pXSx7fSk00, new int[] {119,104,105,108,101}, null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJ3aGlsZSIpXSx7fSk00, tmp); } protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJub3RpbiIpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6687, 0, cHJvZChsaXQoIm5vdGluIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pXSx7fSk00, new int[] {110,111,116,105,110}, null, null); + tmp[0] = new LiteralStackNode(6664, 0, cHJvZChsaXQoIm5vdGluIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pXSx7fSk00, new int[] {110,111,116,105,110}, null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJub3RpbiIpXSx7fSk00, tmp); } protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJjYXNlIildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6689, 0, cHJvZChsaXQoImNhc2UiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDk5LDk5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKV0se30p, new int[] {99,97,115,101}, null, null); + tmp[0] = new LiteralStackNode(6666, 0, cHJvZChsaXQoImNhc2UiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDk5LDk5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKV0se30p, new int[] {99,97,115,101}, null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJjYXNlIildLHt9KQ0000, tmp); } protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJsYXlvdXQiKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6691, 0, cHJvZChsaXQoImxheW91dCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEyMSwxMjEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNywxMTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSldLHt9KQ0000, new int[] {108,97,121,111,117,116}, null, null); + tmp[0] = new LiteralStackNode(6668, 0, cHJvZChsaXQoImxheW91dCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEyMSwxMjEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNywxMTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSldLHt9KQ0000, new int[] {108,97,121,111,117,116}, null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJsYXlvdXQiKV0se30p, tmp); } protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJtb2QiKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6693, 0, cHJvZChsaXQoIm1vZCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAwLDEwMCldKV0se30p, new int[] {109,111,100}, null, null); + tmp[0] = new LiteralStackNode(6670, 0, cHJvZChsaXQoIm1vZCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAwLDEwMCldKV0se30p, new int[] {109,111,100}, null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJtb2QiKV0se30p, tmp); } protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJleHRlbmQiKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6695, 0, cHJvZChsaXQoImV4dGVuZCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTIwLDEyMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAwLDEwMCldKV0se30p, new int[] {101,120,116,101,110,100}, null, null); + tmp[0] = new LiteralStackNode(6672, 0, cHJvZChsaXQoImV4dGVuZCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTIwLDEyMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAwLDEwMCldKV0se30p, new int[] {101,120,116,101,110,100}, null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJleHRlbmQiKV0se30p, tmp); } protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJhcHBlbmQiKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6697, 0, cHJvZChsaXQoImFwcGVuZCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMCwxMDApXSldLHt9KQ0000, new int[] {97,112,112,101,110,100}, null, null); + tmp[0] = new LiteralStackNode(6674, 0, cHJvZChsaXQoImFwcGVuZCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMCwxMDApXSldLHt9KQ0000, new int[] {97,112,112,101,110,100}, null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJhcHBlbmQiKV0se30p, tmp); } protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJmYWlsIildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6699, 0, cHJvZChsaXQoImZhaWwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEwMiwxMDIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pXSx7fSk00, new int[] {102,97,105,108}, null, null); + tmp[0] = new LiteralStackNode(6676, 0, cHJvZChsaXQoImZhaWwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEwMiwxMDIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pXSx7fSk00, new int[] {102,97,105,108}, null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJmYWlsIildLHt9KQ0000, tmp); } protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJkYXRldGltZSIpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6701, 0, cHJvZChsaXQoImRhdGV0aW1lIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMDAsMTAwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKV0se30p, new int[] {100,97,116,101,116,105,109,101}, null, null); + tmp[0] = new LiteralStackNode(6678, 0, cHJvZChsaXQoImRhdGV0aW1lIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMDAsMTAwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKV0se30p, new int[] {100,97,116,101,116,105,109,101}, null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJkYXRldGltZSIpXSx7fSk00, tmp); } protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJmaWx0ZXIiKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6703, 0, cHJvZChsaXQoImZpbHRlciIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTAyLDEwMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKV0se30p, new int[] {102,105,108,116,101,114}, null, null); + tmp[0] = new LiteralStackNode(6680, 0, cHJvZChsaXQoImZpbHRlciIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTAyLDEwMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKV0se30p, new int[] {102,105,108,116,101,114}, null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJmaWx0ZXIiKV0se30p, tmp); } protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJsb2MiKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6705, 0, cHJvZChsaXQoImxvYyIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTksOTkpXSldLHt9KQ0000, new int[] {108,111,99}, null, null); + tmp[0] = new LiteralStackNode(6682, 0, cHJvZChsaXQoImxvYyIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTksOTkpXSldLHt9KQ0000, new int[] {108,111,99}, null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJsb2MiKV0se30p, tmp); } protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJhc3NlcnQiKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6707, 0, cHJvZChsaXQoImFzc2VydCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSldLHt9KQ0000, new int[] {97,115,115,101,114,116}, null, null); + tmp[0] = new LiteralStackNode(6684, 0, cHJvZChsaXQoImFzc2VydCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSldLHt9KQ0000, new int[] {97,115,115,101,114,116}, null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJhc3NlcnQiKV0se30p, tmp); } protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJkYXRhIildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6709, 0, cHJvZChsaXQoImRhdGEiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEwMCwxMDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKV0se30p, new int[] {100,97,116,97}, null, null); + tmp[0] = new LiteralStackNode(6686, 0, cHJvZChsaXQoImRhdGEiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEwMCwxMDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKV0se30p, new int[] {100,97,116,97}, null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJkYXRhIildLHt9KQ0000, tmp); } protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJpbXBvcnQiKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6711, 0, cHJvZChsaXQoImltcG9ydCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEyLDExMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKV0se30p, new int[] {105,109,112,111,114,116}, null, null); + tmp[0] = new LiteralStackNode(6688, 0, cHJvZChsaXQoImltcG9ydCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEyLDExMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKV0se30p, new int[] {105,109,112,111,114,116}, null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJpbXBvcnQiKV0se30p, tmp); } protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJudW0iKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6713, 0, cHJvZChsaXQoIm51bSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE3LDExNyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKV0se30p, new int[] {110,117,109}, null, null); + tmp[0] = new LiteralStackNode(6690, 0, cHJvZChsaXQoIm51bSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE3LDExNyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKV0se30p, new int[] {110,117,109}, null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJudW0iKV0se30p, tmp); } protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJ0YWciKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6715, 0, cHJvZChsaXQoInRhZyIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMywxMDMpXSldLHt9KQ0000, new int[] {116,97,103}, null, null); + tmp[0] = new LiteralStackNode(6692, 0, cHJvZChsaXQoInRhZyIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMywxMDMpXSldLHt9KQ0000, new int[] {116,97,103}, null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJ0YWciKV0se30p, tmp); } protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJzeW50YXgiKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6717, 0, cHJvZChsaXQoInN5bnRheCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTIxLDEyMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEyMCwxMjApXSldLHt9KQ0000, new int[] {115,121,110,116,97,120}, null, null); + tmp[0] = new LiteralStackNode(6694, 0, cHJvZChsaXQoInN5bnRheCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTIxLDEyMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEyMCwxMjApXSldLHt9KQ0000, new int[] {115,121,110,116,97,120}, null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJzeW50YXgiKV0se30p, tmp); } protected static final void _init_cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJpbnQiKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(6719, 0, cHJvZChsaXQoImludCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKV0se30p, new int[] {105,110,116}, null, null); + tmp[0] = new LiteralStackNode(6696, 0, cHJvZChsaXQoImludCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKV0se30p, new int[] {105,110,116}, null, null); builder.addAlternative(RascalParser.cHJvZChrZXl3b3JkcygiUmFzY2FsS2V5d29yZHMiKSxbbGl0KCJpbnQiKV0se30p, tmp); } public static void init(ExpectBuilder builder){ @@ -9233,25 +9218,25 @@ protected static class Label { protected static final void _init_cHJvZChsYWJlbCgiZGVmYXVsdCIsc29ydCgiTGFiZWwiKSksW2xhYmVsKCJuYW1lIixsZXgoIk5hbWUiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiOiIpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[3]; - tmp[1] = new NonTerminalStackNode(6816, 1, "layouts_LAYOUTLIST", null, null); - tmp[2] = new LiteralStackNode(6817, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[0] = new NonTerminalStackNode(6814, 0, "Name", null, null); + tmp[1] = new NonTerminalStackNode(6793, 1, "layouts_LAYOUTLIST", null, null); + tmp[2] = new LiteralStackNode(6794, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[0] = new NonTerminalStackNode(6791, 0, "Name", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiZGVmYXVsdCIsc29ydCgiTGFiZWwiKSksW2xhYmVsKCJuYW1lIixsZXgoIk5hbWUiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiOiIpXSx7fSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiZW1wdHkiLHNvcnQoIkxhYmVsIikpLFtdLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new EpsilonStackNode(6819, 0); + tmp[0] = new EpsilonStackNode(6796, 0); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiZW1wdHkiLHNvcnQoIkxhYmVsIikpLFtdLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJMYWJlbCIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJMYWJlbFwiKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoc29ydCgiTGFiZWwiKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[4] = new CharStackNode(6827, 4, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(6824, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[0] = new CharStackNode(6822, 0, new int[][]{{0,0}}, null, null); - tmp[1] = new LiteralStackNode(6823, 1, cHJvZChsaXQoInNvcnQoXCJMYWJlbFwiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg3Niw3NildKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk4LDk4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {115,111,114,116,40,34,76,97,98,101,108,34,41}, null, null); - tmp[3] = new ListStackNode(6826, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(6825, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[4] = new CharStackNode(6804, 4, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(6801, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[0] = new CharStackNode(6799, 0, new int[][]{{0,0}}, null, null); + tmp[1] = new LiteralStackNode(6800, 1, cHJvZChsaXQoInNvcnQoXCJMYWJlbFwiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg3Niw3NildKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk4LDk4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {115,111,114,116,40,34,76,97,98,101,108,34,41}, null, null); + tmp[3] = new ListStackNode(6803, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(6802, 0, new int[][]{{48,57}}, null, null), true, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJMYWJlbCIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJMYWJlbFwiKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoc29ydCgiTGFiZWwiKSkpfSk00, tmp); } public static void init(ExpectBuilder builder){ @@ -9276,71 +9261,71 @@ protected static class Prod { protected static final void _init_cHJvZChsYWJlbCgiYXNzb2NpYXRpdml0eUdyb3VwIixzb3J0KCJQcm9kIikpLFtsYWJlbCgiYXNzb2NpYXRpdml0eSIsc29ydCgiQXNzb2MiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiKCIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgiZ3JvdXAiLHNvcnQoIlByb2QiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiKSIpXSx7dGFnKCJGb2xkYWJsZSIoKSl9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[7]; - tmp[0] = new NonTerminalStackNode(7063, 0, "Assoc", null, null); - tmp[2] = new LiteralStackNode(7066, 2, cHJvZChsaXQoIigiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pXSx7fSk00, new int[] {40}, null, null); - tmp[5] = new NonTerminalStackNode(7070, 5, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(7065, 1, "layouts_LAYOUTLIST", null, null); - tmp[3] = new NonTerminalStackNode(7067, 3, "layouts_LAYOUTLIST", null, null); - tmp[6] = new LiteralStackNode(7071, 6, cHJvZChsaXQoIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {41}, null, null); - tmp[4] = new NonTerminalStackNode(7068, 4, "Prod", null, null); + tmp[0] = new NonTerminalStackNode(7040, 0, "Assoc", null, null); + tmp[2] = new LiteralStackNode(7043, 2, cHJvZChsaXQoIigiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pXSx7fSk00, new int[] {40}, null, null); + tmp[5] = new NonTerminalStackNode(7047, 5, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(7042, 1, "layouts_LAYOUTLIST", null, null); + tmp[3] = new NonTerminalStackNode(7044, 3, "layouts_LAYOUTLIST", null, null); + tmp[6] = new LiteralStackNode(7048, 6, cHJvZChsaXQoIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {41}, null, null); + tmp[4] = new NonTerminalStackNode(7045, 4, "Prod", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiYXNzb2NpYXRpdml0eUdyb3VwIixzb3J0KCJQcm9kIikpLFtsYWJlbCgiYXNzb2NpYXRpdml0eSIsc29ydCgiQXNzb2MiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiKCIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgiZ3JvdXAiLHNvcnQoIlByb2QiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiKSIpXSx7dGFnKCJGb2xkYWJsZSIoKSl9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgicmVmZXJlbmNlIixzb3J0KCJQcm9kIikpLFtsaXQoIjoiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInJlZmVyZW5jZWQiLGxleCgiTmFtZSIpKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[3]; - tmp[0] = new LiteralStackNode(7074, 0, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[2] = new NonTerminalStackNode(7076, 2, "Name", null, null); - tmp[1] = new NonTerminalStackNode(7075, 1, "layouts_LAYOUTLIST", null, null); + tmp[0] = new LiteralStackNode(7051, 0, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[2] = new NonTerminalStackNode(7053, 2, "Name", null, null); + tmp[1] = new NonTerminalStackNode(7052, 1, "layouts_LAYOUTLIST", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgicmVmZXJlbmNlIixzb3J0KCJQcm9kIikpLFtsaXQoIjoiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInJlZmVyZW5jZWQiLGxleCgiTmFtZSIpKV0se30p, tmp); } protected static final void _init_cHJvZChsYWJlbCgiYWxsIixzb3J0KCJQcm9kIikpLFtsYWJlbCgibGhzIixzb3J0KCJQcm9kIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoInwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInJocyIsc29ydCgiUHJvZCIpKV0se2Fzc29jKGxlZnQoKSl9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[2] = new LiteralStackNode(7111, 2, cHJvZChsaXQoInwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyNCwxMjQpXSldLHt9KQ0000, new int[] {124}, null, null); - tmp[4] = new NonTerminalStackNode(7113, 4, "Prod", null, null); - tmp[0] = new NonTerminalStackNode(7108, 0, "Prod", null, null); - tmp[1] = new NonTerminalStackNode(7110, 1, "layouts_LAYOUTLIST", null, null); - tmp[3] = new NonTerminalStackNode(7112, 3, "layouts_LAYOUTLIST", null, null); + tmp[2] = new LiteralStackNode(7088, 2, cHJvZChsaXQoInwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyNCwxMjQpXSldLHt9KQ0000, new int[] {124}, null, null); + tmp[4] = new NonTerminalStackNode(7090, 4, "Prod", null, null); + tmp[0] = new NonTerminalStackNode(7085, 0, "Prod", null, null); + tmp[1] = new NonTerminalStackNode(7087, 1, "layouts_LAYOUTLIST", null, null); + tmp[3] = new NonTerminalStackNode(7089, 3, "layouts_LAYOUTLIST", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiYWxsIixzb3J0KCJQcm9kIikpLFtsYWJlbCgibGhzIixzb3J0KCJQcm9kIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoInwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInJocyIsc29ydCgiUHJvZCIpKV0se2Fzc29jKGxlZnQoKSl9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgidW5sYWJlbGVkIixzb3J0KCJQcm9kIikpLFtsYWJlbCgibW9kaWZpZXJzIixcaXRlci1zdGFyLXNlcHMoc29ydCgiUHJvZE1vZGlmaWVyIiksW2xheW91dHMoIkxBWU9VVExJU1QiKV0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInN5bXMiLFxpdGVyLXN0YXItc2Vwcyhzb3J0KCJTeW0iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpXSkpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[3]; - tmp[2] = new SeparatedListStackNode(7087, 2, cmVndWxhcihcaXRlci1zdGFyLXNlcHMoc29ydCgiU3ltIiksW2xheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(7085, 0, "Sym", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(7086, 1, "layouts_LAYOUTLIST", null, null)}, false, null, null); - tmp[0] = new SeparatedListStackNode(7082, 0, cmVndWxhcihcaXRlci1zdGFyLXNlcHMoc29ydCgiUHJvZE1vZGlmaWVyIiksW2xheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(7080, 0, "ProdModifier", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(7081, 1, "layouts_LAYOUTLIST", null, null)}, false, null, null); - tmp[1] = new NonTerminalStackNode(7084, 1, "layouts_LAYOUTLIST", null, null); + tmp[2] = new SeparatedListStackNode(7064, 2, cmVndWxhcihcaXRlci1zdGFyLXNlcHMoc29ydCgiU3ltIiksW2xheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(7062, 0, "Sym", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(7063, 1, "layouts_LAYOUTLIST", null, null)}, false, null, null); + tmp[0] = new SeparatedListStackNode(7059, 0, cmVndWxhcihcaXRlci1zdGFyLXNlcHMoc29ydCgiUHJvZE1vZGlmaWVyIiksW2xheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(7057, 0, "ProdModifier", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(7058, 1, "layouts_LAYOUTLIST", null, null)}, false, null, null); + tmp[1] = new NonTerminalStackNode(7061, 1, "layouts_LAYOUTLIST", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgidW5sYWJlbGVkIixzb3J0KCJQcm9kIikpLFtsYWJlbCgibW9kaWZpZXJzIixcaXRlci1zdGFyLXNlcHMoc29ydCgiUHJvZE1vZGlmaWVyIiksW2xheW91dHMoIkxBWU9VVExJU1QiKV0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInN5bXMiLFxpdGVyLXN0YXItc2Vwcyhzb3J0KCJTeW0iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpXSkpXSx7fSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJQcm9kIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIlByb2RcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKHNvcnQoIlByb2QiKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[1] = new LiteralStackNode(7053, 1, cHJvZChsaXQoInNvcnQoXCJQcm9kXCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDgwLDgwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDAsMTAwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {115,111,114,116,40,34,80,114,111,100,34,41}, null, null); - tmp[3] = new ListStackNode(7056, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(7055, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[0] = new CharStackNode(7052, 0, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(7054, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[4] = new CharStackNode(7057, 4, new int[][]{{0,0}}, null, null); + tmp[1] = new LiteralStackNode(7030, 1, cHJvZChsaXQoInNvcnQoXCJQcm9kXCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDgwLDgwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDAsMTAwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {115,111,114,116,40,34,80,114,111,100,34,41}, null, null); + tmp[3] = new ListStackNode(7033, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(7032, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[0] = new CharStackNode(7029, 0, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(7031, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[4] = new CharStackNode(7034, 4, new int[][]{{0,0}}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJQcm9kIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIlByb2RcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKHNvcnQoIlByb2QiKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiZmlyc3QiLHNvcnQoIlByb2QiKSksW2xhYmVsKCJsaHMiLHNvcnQoIlByb2QiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGNvbmRpdGlvbmFsKGxpdCgiXD4iKSx7XG5vdC1mb2xsb3cobGl0KCJcPiIpKX0pLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgicmhzIixzb3J0KCJQcm9kIikpXSx7YXNzb2MobGVmdCgpKX0p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[0] = new NonTerminalStackNode(7118, 0, "Prod", null, null); - tmp[2] = new LiteralStackNode(7123, 2, cHJvZChsaXQoIlw11IiksW1xjaGFyLWNsYXNzKFtyYW5nZSg2Miw2MildKV0se30p, new int[] {62}, null, new ICompletionFilter[] {new StringFollowRestriction(new int[] {62})}); - tmp[4] = new NonTerminalStackNode(7125, 4, "Prod", null, null); - tmp[1] = new NonTerminalStackNode(7120, 1, "layouts_LAYOUTLIST", null, null); - tmp[3] = new NonTerminalStackNode(7124, 3, "layouts_LAYOUTLIST", null, null); + tmp[0] = new NonTerminalStackNode(7095, 0, "Prod", null, null); + tmp[2] = new LiteralStackNode(7100, 2, cHJvZChsaXQoIlw11IiksW1xjaGFyLWNsYXNzKFtyYW5nZSg2Miw2MildKV0se30p, new int[] {62}, null, new ICompletionFilter[] {new StringFollowRestriction(new int[] {62})}); + tmp[4] = new NonTerminalStackNode(7102, 4, "Prod", null, null); + tmp[1] = new NonTerminalStackNode(7097, 1, "layouts_LAYOUTLIST", null, null); + tmp[3] = new NonTerminalStackNode(7101, 3, "layouts_LAYOUTLIST", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiZmlyc3QiLHNvcnQoIlByb2QiKSksW2xhYmVsKCJsaHMiLHNvcnQoIlByb2QiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGNvbmRpdGlvbmFsKGxpdCgiXD4iKSx7XG5vdC1mb2xsb3cobGl0KCJcPiIpKX0pLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgicmhzIixzb3J0KCJQcm9kIikpXSx7YXNzb2MobGVmdCgpKX0p, tmp); } protected static final void _init_cHJvZChsYWJlbCgibGFiZWxlZCIsc29ydCgiUHJvZCIpKSxbbGFiZWwoIm1vZGlmaWVycyIsXGl0ZXItc3Rhci1zZXBzKHNvcnQoIlByb2RNb2RpZmllciIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIildKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJuYW1lIixsZXgoIk5hbWUiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiOiIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgic3ltcyIsXGl0ZXItc3Rhci1zZXBzKHNvcnQoIlN5bSIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIildKSldLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[7]; - tmp[0] = new SeparatedListStackNode(7093, 0, cmVndWxhcihcaXRlci1zdGFyLXNlcHMoc29ydCgiUHJvZE1vZGlmaWVyIiksW2xheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(7091, 0, "ProdModifier", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(7092, 1, "layouts_LAYOUTLIST", null, null)}, false, null, null); - tmp[2] = new NonTerminalStackNode(7096, 2, "Name", null, null); - tmp[4] = new LiteralStackNode(7099, 4, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[6] = new SeparatedListStackNode(7103, 6, cmVndWxhcihcaXRlci1zdGFyLXNlcHMoc29ydCgiU3ltIiksW2xheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(7101, 0, "Sym", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(7102, 1, "layouts_LAYOUTLIST", null, null)}, false, null, null); - tmp[3] = new NonTerminalStackNode(7098, 3, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(7095, 1, "layouts_LAYOUTLIST", null, null); - tmp[5] = new NonTerminalStackNode(7100, 5, "layouts_LAYOUTLIST", null, null); + tmp[0] = new SeparatedListStackNode(7070, 0, cmVndWxhcihcaXRlci1zdGFyLXNlcHMoc29ydCgiUHJvZE1vZGlmaWVyIiksW2xheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(7068, 0, "ProdModifier", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(7069, 1, "layouts_LAYOUTLIST", null, null)}, false, null, null); + tmp[2] = new NonTerminalStackNode(7073, 2, "Name", null, null); + tmp[4] = new LiteralStackNode(7076, 4, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[6] = new SeparatedListStackNode(7080, 6, cmVndWxhcihcaXRlci1zdGFyLXNlcHMoc29ydCgiU3ltIiksW2xheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(7078, 0, "Sym", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(7079, 1, "layouts_LAYOUTLIST", null, null)}, false, null, null); + tmp[3] = new NonTerminalStackNode(7075, 3, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(7072, 1, "layouts_LAYOUTLIST", null, null); + tmp[5] = new NonTerminalStackNode(7077, 5, "layouts_LAYOUTLIST", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgibGFiZWxlZCIsc29ydCgiUHJvZCIpKSxbbGFiZWwoIm1vZGlmaWVycyIsXGl0ZXItc3Rhci1zZXBzKHNvcnQoIlByb2RNb2RpZmllciIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIildKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJuYW1lIixsZXgoIk5hbWUiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiOiIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgic3ltcyIsXGl0ZXItc3Rhci1zZXBzKHNvcnQoIlN5bSIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIildKSldLHt9KQ0000, tmp); } public static void init(ExpectBuilder builder){ @@ -9373,7 +9358,7 @@ protected static class layouts_LAYOUTLIST { protected static final void _init_cHJvZChsYXlvdXRzKCJMQVlPVVRMSVNUIiksW2NvbmRpdGlvbmFsKFxpdGVyLXN0YXIobGV4KCJMQVlPVVQiKSkse1xub3QtZm9sbG93KFxjaGFyLWNsYXNzKFtyYW5nZSg5LDEzKSxyYW5nZSgzMiwzMikscmFuZ2UoMTMzLDEzMykscmFuZ2UoMTYwLDE2MCkscmFuZ2UoNTc2MCw1NzYwKSxyYW5nZSg2MTU4LDYxNTgpLHJhbmdlKDgxOTIsODIwMikscmFuZ2UoODIzMiw4MjMzKSxyYW5nZSg4MjM5LDgyMzkpLHJhbmdlKDgyODcsODI4NykscmFuZ2UoMTIyODgsMTIyODgpXSkpLFxub3QtZm9sbG93KGxpdCgiLy8iKSksXG5vdC1mb2xsb3cobGl0KCIvKiIpKX0pXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new ListStackNode(7226, 0, cmVndWxhcihcaXRlci1zdGFyKGxleCgiTEFZT1VUIikpKQ0000, new NonTerminalStackNode(7221, 0, "LAYOUT", null, null), false, null, new ICompletionFilter[] {new CharFollowRestriction(new int[][]{{9,13},{32,32},{133,133},{160,160},{5760,5760},{6158,6158},{8192,8202},{8232,8233},{8239,8239},{8287,8287},{12288,12288}}), new StringFollowRestriction(new int[] {47,47}), new StringFollowRestriction(new int[] {47,42})}); + tmp[0] = new ListStackNode(7203, 0, cmVndWxhcihcaXRlci1zdGFyKGxleCgiTEFZT1VUIikpKQ0000, new NonTerminalStackNode(7198, 0, "LAYOUT", null, null), false, null, new ICompletionFilter[] {new CharFollowRestriction(new int[][]{{9,13},{32,32},{133,133},{160,160},{5760,5760},{6158,6158},{8192,8202},{8232,8233},{8239,8239},{8287,8287},{12288,12288}}), new StringFollowRestriction(new int[] {47,47}), new StringFollowRestriction(new int[] {47,42})}); builder.addAlternative(RascalParser.cHJvZChsYXlvdXRzKCJMQVlPVVRMSVNUIiksW2NvbmRpdGlvbmFsKFxpdGVyLXN0YXIobGV4KCJMQVlPVVQiKSkse1xub3QtZm9sbG93KFxjaGFyLWNsYXNzKFtyYW5nZSg5LDEzKSxyYW5nZSgzMiwzMikscmFuZ2UoMTMzLDEzMykscmFuZ2UoMTYwLDE2MCkscmFuZ2UoNTc2MCw1NzYwKSxyYW5nZSg2MTU4LDYxNTgpLHJhbmdlKDgxOTIsODIwMikscmFuZ2UoODIzMiw4MjMzKSxyYW5nZSg4MjM5LDgyMzkpLHJhbmdlKDgyODcsODI4NykscmFuZ2UoMTIyODgsMTIyODgpXSkpLFxub3QtZm9sbG93KGxpdCgiLy8iKSksXG5vdC1mb2xsb3cobGl0KCIvKiIpKX0pXSx7fSk00, tmp); } public static void init(ExpectBuilder builder){ @@ -9394,26 +9379,26 @@ protected static class Comment { protected static final void _init_cHJvZChsZXgoIkNvbW1lbnQiKSxbbGl0KCIvLyIpLGNvbmRpdGlvbmFsKFxpdGVyLXN0YXIoXGNoYXItY2xhc3MoW3JhbmdlKDEsOSkscmFuZ2UoMTEsMTExNDExMSldKSkse1xub3QtZm9sbG93KFxjaGFyLWNsYXNzKFtyYW5nZSg5LDkpLHJhbmdlKDEzLDEzKSxyYW5nZSgzMiwzMikscmFuZ2UoMTYwLDE2MCkscmFuZ2UoNTc2MCw1NzYwKSxyYW5nZSg4MTkyLDgyMDIpLHJhbmdlKDgyMzksODIzOSkscmFuZ2UoODI4Nyw4Mjg3KSxyYW5nZSgxMjI4OCwxMjI4OCldKSksXGVuZC1vZi1saW5lKCl9KV0se3RhZygiY2F0ZWdvcnkiKCJjb21tZW50IikpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[2]; - tmp[1] = new ListStackNode(7377, 1, cmVndWxhcihcaXRlci1zdGFyKFxjaGFyLWNsYXNzKFtyYW5nZSgxLDkpLHJhbmdlKDExLDExMTQxMTEpXSkpKQ0000, new CharStackNode(7374, 0, new int[][]{{1,9},{11,1114111}}, null, null), false, null, new ICompletionFilter[] {new CharFollowRestriction(new int[][]{{9,9},{13,13},{32,32},{160,160},{5760,5760},{8192,8202},{8239,8239},{8287,8287},{12288,12288}}), new AtEndOfLineRequirement()}); - tmp[0] = new LiteralStackNode(7373, 0, cHJvZChsaXQoIi8vIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg0Nyw0NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDcsNDcpXSldLHt9KQ0000, new int[] {47,47}, null, null); + tmp[1] = new ListStackNode(7354, 1, cmVndWxhcihcaXRlci1zdGFyKFxjaGFyLWNsYXNzKFtyYW5nZSgxLDkpLHJhbmdlKDExLDExMTQxMTEpXSkpKQ0000, new CharStackNode(7351, 0, new int[][]{{1,9},{11,1114111}}, null, null), false, null, new ICompletionFilter[] {new CharFollowRestriction(new int[][]{{9,9},{13,13},{32,32},{160,160},{5760,5760},{8192,8202},{8239,8239},{8287,8287},{12288,12288}}), new AtEndOfLineRequirement()}); + tmp[0] = new LiteralStackNode(7350, 0, cHJvZChsaXQoIi8vIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg0Nyw0NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDcsNDcpXSldLHt9KQ0000, new int[] {47,47}, null, null); builder.addAlternative(RascalParser.cHJvZChsZXgoIkNvbW1lbnQiKSxbbGl0KCIvLyIpLGNvbmRpdGlvbmFsKFxpdGVyLXN0YXIoXGNoYXItY2xhc3MoW3JhbmdlKDEsOSkscmFuZ2UoMTEsMTExNDExMSldKSkse1xub3QtZm9sbG93KFxjaGFyLWNsYXNzKFtyYW5nZSg5LDkpLHJhbmdlKDEzLDEzKSxyYW5nZSgzMiwzMikscmFuZ2UoMTYwLDE2MCkscmFuZ2UoNTc2MCw1NzYwKSxyYW5nZSg4MTkyLDgyMDIpLHJhbmdlKDgyMzksODIzOSkscmFuZ2UoODI4Nyw4Mjg3KSxyYW5nZSgxMjI4OCwxMjI4OCldKSksXGVuZC1vZi1saW5lKCl9KV0se3RhZygiY2F0ZWdvcnkiKCJjb21tZW50IikpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIkNvbW1lbnQiKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJzb3J0KFwiQ29tbWVudFwiKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIobGV4KCJDb21tZW50IikpKX0p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[0] = new CharStackNode(7380, 0, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(7382, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[1] = new LiteralStackNode(7381, 1, cHJvZChsaXQoInNvcnQoXCJDb21tZW50XCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDY3LDY3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDksMTA5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDksMTA5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {115,111,114,116,40,34,67,111,109,109,101,110,116,34,41}, null, null); - tmp[3] = new ListStackNode(7384, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(7383, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[4] = new CharStackNode(7385, 4, new int[][]{{0,0}}, null, null); + tmp[0] = new CharStackNode(7357, 0, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(7359, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[1] = new LiteralStackNode(7358, 1, cHJvZChsaXQoInNvcnQoXCJDb21tZW50XCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDY3LDY3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDksMTA5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDksMTA5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {115,111,114,116,40,34,67,111,109,109,101,110,116,34,41}, null, null); + tmp[3] = new ListStackNode(7361, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(7360, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[4] = new CharStackNode(7362, 4, new int[][]{{0,0}}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIkNvbW1lbnQiKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJzb3J0KFwiQ29tbWVudFwiKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIobGV4KCJDb21tZW50IikpKX0p, tmp); } protected static final void _init_cHJvZChsZXgoIkNvbW1lbnQiKSxbbGl0KCIvKiIpLFxpdGVyLXN0YXIoYWx0KHtjb25kaXRpb25hbChcY2hhci1jbGFzcyhbcmFuZ2UoNDIsNDIpXSkse1xub3QtZm9sbG93KFxjaGFyLWNsYXNzKFtyYW5nZSg0Nyw0NyldKSl9KSxcY2hhci1jbGFzcyhbcmFuZ2UoMSw0MSkscmFuZ2UoNDMsMTExNDExMSldKX0pKSxsaXQoIiovIildLHt0YWcoImNhdGVnb3J5IigiY29tbWVudCIpKX0p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[3]; - tmp[0] = new LiteralStackNode(7388, 0, cHJvZChsaXQoIi8qIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg0Nyw0NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDIsNDIpXSldLHt9KQ0000, new int[] {47,42}, null, null); - tmp[1] = new ListStackNode(7394, 1, cmVndWxhcihcaXRlci1zdGFyKGFsdCh7Y29uZGl0aW9uYWwoXGNoYXItY2xhc3MoW3JhbmdlKDQyLDQyKV0pLHtcbm90LWZvbGxvdyhcY2hhci1jbGFzcyhbcmFuZ2UoNDcsNDcpXSkpfSksXGNoYXItY2xhc3MoW3JhbmdlKDEsNDEpLHJhbmdlKDQzLDExMTQxMTEpXSl9KSkp, new AlternativeStackNode(7393, 0, cmVndWxhcihhbHQoe2NvbmRpdGlvbmFsKFxjaGFyLWNsYXNzKFtyYW5nZSg0Miw0MildKSx7XG5vdC1mb2xsb3coXGNoYXItY2xhc3MoW3JhbmdlKDQ3LDQ3KV0pKX0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxLDQxKSxyYW5nZSg0MywxMTE0MTExKV0pfSkp, (AbstractStackNode[]) new AbstractStackNode[]{new CharStackNode(7391, 0, new int[][]{{42,42}}, null, new ICompletionFilter[] {new CharFollowRestriction(new int[][]{{47,47}})}), new CharStackNode(7392, 0, new int[][]{{1,41},{43,1114111}}, null, null)}, null, null), false, null, null); - tmp[2] = new LiteralStackNode(7395, 2, cHJvZChsaXQoIiovIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg0Miw0MildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDcsNDcpXSldLHt9KQ0000, new int[] {42,47}, null, null); + tmp[0] = new LiteralStackNode(7365, 0, cHJvZChsaXQoIi8qIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg0Nyw0NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDIsNDIpXSldLHt9KQ0000, new int[] {47,42}, null, null); + tmp[1] = new ListStackNode(7371, 1, cmVndWxhcihcaXRlci1zdGFyKGFsdCh7Y29uZGl0aW9uYWwoXGNoYXItY2xhc3MoW3JhbmdlKDQyLDQyKV0pLHtcbm90LWZvbGxvdyhcY2hhci1jbGFzcyhbcmFuZ2UoNDcsNDcpXSkpfSksXGNoYXItY2xhc3MoW3JhbmdlKDEsNDEpLHJhbmdlKDQzLDExMTQxMTEpXSl9KSkp, new AlternativeStackNode(7370, 0, cmVndWxhcihhbHQoe2NvbmRpdGlvbmFsKFxjaGFyLWNsYXNzKFtyYW5nZSg0Miw0MildKSx7XG5vdC1mb2xsb3coXGNoYXItY2xhc3MoW3JhbmdlKDQ3LDQ3KV0pKX0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxLDQxKSxyYW5nZSg0MywxMTE0MTExKV0pfSkp, (AbstractStackNode[]) new AbstractStackNode[]{new CharStackNode(7369, 0, new int[][]{{1,41},{43,1114111}}, null, null), new CharStackNode(7368, 0, new int[][]{{42,42}}, null, new ICompletionFilter[] {new CharFollowRestriction(new int[][]{{47,47}})})}, null, null), false, null, null); + tmp[2] = new LiteralStackNode(7372, 2, cHJvZChsaXQoIiovIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg0Miw0MildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDcsNDcpXSldLHt9KQ0000, new int[] {42,47}, null, null); builder.addAlternative(RascalParser.cHJvZChsZXgoIkNvbW1lbnQiKSxbbGl0KCIvKiIpLFxpdGVyLXN0YXIoYWx0KHtjb25kaXRpb25hbChcY2hhci1jbGFzcyhbcmFuZ2UoNDIsNDIpXSkse1xub3QtZm9sbG93KFxjaGFyLWNsYXNzKFtyYW5nZSg0Nyw0NyldKSl9KSxcY2hhci1jbGFzcyhbcmFuZ2UoMSw0MSkscmFuZ2UoNDMsMTExNDExMSldKX0pKSxsaXQoIiovIildLHt0YWcoImNhdGVnb3J5IigiY29tbWVudCIpKX0p, tmp); } public static void init(ExpectBuilder builder){ @@ -9438,43 +9423,43 @@ protected static class UnicodeEscape { protected static final void _init_cHJvZChsYWJlbCgidXRmMzIiLGxleCgiVW5pY29kZUVzY2FwZSIpKSxbbGl0KCJcXCIpLFxjaGFyLWNsYXNzKFtyYW5nZSg4NSw4NSldKSxhbHQoe2xpdCgiMTAiKSxzZXEoW2xpdCgiMCIpLFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NykscmFuZ2UoNjUsNzApLHJhbmdlKDk3LDEwMildKV0pfSksXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KSxyYW5nZSg2NSw3MCkscmFuZ2UoOTcsMTAyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NykscmFuZ2UoNjUsNzApLHJhbmdlKDk3LDEwMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpLHJhbmdlKDY1LDcwKSxyYW5nZSg5NywxMDIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KSxyYW5nZSg2NSw3MCkscmFuZ2UoOTcsMTAyKV0pXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[7]; - tmp[0] = new LiteralStackNode(7399, 0, cHJvZChsaXQoIlxcIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg5Miw5MildKV0se30p, new int[] {92}, null, null); - tmp[5] = new CharStackNode(7408, 5, new int[][]{{48,57},{65,70},{97,102}}, null, null); - tmp[1] = new CharStackNode(7400, 1, new int[][]{{85,85}}, null, null); - tmp[3] = new CharStackNode(7406, 3, new int[][]{{48,57},{65,70},{97,102}}, null, null); - tmp[2] = new AlternativeStackNode(7405, 2, cmVndWxhcihhbHQoe2xpdCgiMTAiKSxzZXEoW2xpdCgiMCIpLFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NykscmFuZ2UoNjUsNzApLHJhbmdlKDk3LDEwMildKV0pfSkp, (AbstractStackNode[]) new AbstractStackNode[]{new SequenceStackNode(7404, 0, cmVndWxhcihzZXEoW2xpdCgiMCIpLFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NykscmFuZ2UoNjUsNzApLHJhbmdlKDk3LDEwMildKV0pKQ0000, (AbstractStackNode[]) new AbstractStackNode[]{new LiteralStackNode(7402, 0, cHJvZChsaXQoIjAiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDQ4KV0pXSx7fSk00, new int[] {48}, null, null), new CharStackNode(7403, 1, new int[][]{{48,57},{65,70},{97,102}}, null, null)}, null, null), new LiteralStackNode(7401, 0, cHJvZChsaXQoIjEwIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg0OSw0OSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNDgpXSldLHt9KQ0000, new int[] {49,48}, null, null)}, null, null); - tmp[6] = new CharStackNode(7409, 6, new int[][]{{48,57},{65,70},{97,102}}, null, null); - tmp[4] = new CharStackNode(7407, 4, new int[][]{{48,57},{65,70},{97,102}}, null, null); + tmp[0] = new LiteralStackNode(7376, 0, cHJvZChsaXQoIlxcIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg5Miw5MildKV0se30p, new int[] {92}, null, null); + tmp[5] = new CharStackNode(7385, 5, new int[][]{{48,57},{65,70},{97,102}}, null, null); + tmp[1] = new CharStackNode(7377, 1, new int[][]{{85,85}}, null, null); + tmp[3] = new CharStackNode(7383, 3, new int[][]{{48,57},{65,70},{97,102}}, null, null); + tmp[2] = new AlternativeStackNode(7382, 2, cmVndWxhcihhbHQoe2xpdCgiMTAiKSxzZXEoW2xpdCgiMCIpLFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NykscmFuZ2UoNjUsNzApLHJhbmdlKDk3LDEwMildKV0pfSkp, (AbstractStackNode[]) new AbstractStackNode[]{new SequenceStackNode(7381, 0, cmVndWxhcihzZXEoW2xpdCgiMCIpLFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NykscmFuZ2UoNjUsNzApLHJhbmdlKDk3LDEwMildKV0pKQ0000, (AbstractStackNode[]) new AbstractStackNode[]{new LiteralStackNode(7379, 0, cHJvZChsaXQoIjAiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDQ4KV0pXSx7fSk00, new int[] {48}, null, null), new CharStackNode(7380, 1, new int[][]{{48,57},{65,70},{97,102}}, null, null)}, null, null), new LiteralStackNode(7378, 0, cHJvZChsaXQoIjEwIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg0OSw0OSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNDgpXSldLHt9KQ0000, new int[] {49,48}, null, null)}, null, null); + tmp[6] = new CharStackNode(7386, 6, new int[][]{{48,57},{65,70},{97,102}}, null, null); + tmp[4] = new CharStackNode(7384, 4, new int[][]{{48,57},{65,70},{97,102}}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgidXRmMzIiLGxleCgiVW5pY29kZUVzY2FwZSIpKSxbbGl0KCJcXCIpLFxjaGFyLWNsYXNzKFtyYW5nZSg4NSw4NSldKSxhbHQoe2xpdCgiMTAiKSxzZXEoW2xpdCgiMCIpLFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NykscmFuZ2UoNjUsNzApLHJhbmdlKDk3LDEwMildKV0pfSksXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KSxyYW5nZSg2NSw3MCkscmFuZ2UoOTcsMTAyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NykscmFuZ2UoNjUsNzApLHJhbmdlKDk3LDEwMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpLHJhbmdlKDY1LDcwKSxyYW5nZSg5NywxMDIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KSxyYW5nZSg2NSw3MCkscmFuZ2UoOTcsMTAyKV0pXSx7fSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgidXRmMTYiLGxleCgiVW5pY29kZUVzY2FwZSIpKSxbbGl0KCJcXCIpLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTcsMTE3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NykscmFuZ2UoNjUsNzApLHJhbmdlKDk3LDEwMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpLHJhbmdlKDY1LDcwKSxyYW5nZSg5NywxMDIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KSxyYW5nZSg2NSw3MCkscmFuZ2UoOTcsMTAyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NykscmFuZ2UoNjUsNzApLHJhbmdlKDk3LDEwMildKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[6]; - tmp[3] = new CharStackNode(7415, 3, new int[][]{{48,57},{65,70},{97,102}}, null, null); - tmp[4] = new CharStackNode(7416, 4, new int[][]{{48,57},{65,70},{97,102}}, null, null); - tmp[2] = new CharStackNode(7414, 2, new int[][]{{48,57},{65,70},{97,102}}, null, null); - tmp[0] = new LiteralStackNode(7412, 0, cHJvZChsaXQoIlxcIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg5Miw5MildKV0se30p, new int[] {92}, null, null); - tmp[5] = new CharStackNode(7417, 5, new int[][]{{48,57},{65,70},{97,102}}, null, null); - tmp[1] = new CharStackNode(7413, 1, new int[][]{{117,117}}, null, null); + tmp[3] = new CharStackNode(7392, 3, new int[][]{{48,57},{65,70},{97,102}}, null, null); + tmp[4] = new CharStackNode(7393, 4, new int[][]{{48,57},{65,70},{97,102}}, null, null); + tmp[2] = new CharStackNode(7391, 2, new int[][]{{48,57},{65,70},{97,102}}, null, null); + tmp[0] = new LiteralStackNode(7389, 0, cHJvZChsaXQoIlxcIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg5Miw5MildKV0se30p, new int[] {92}, null, null); + tmp[5] = new CharStackNode(7394, 5, new int[][]{{48,57},{65,70},{97,102}}, null, null); + tmp[1] = new CharStackNode(7390, 1, new int[][]{{117,117}}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgidXRmMTYiLGxleCgiVW5pY29kZUVzY2FwZSIpKSxbbGl0KCJcXCIpLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTcsMTE3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NykscmFuZ2UoNjUsNzApLHJhbmdlKDk3LDEwMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpLHJhbmdlKDY1LDcwKSxyYW5nZSg5NywxMDIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KSxyYW5nZSg2NSw3MCkscmFuZ2UoOTcsMTAyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NykscmFuZ2UoNjUsNzApLHJhbmdlKDk3LDEwMildKV0se30p, tmp); } protected static final void _init_cHJvZChsYWJlbCgiYXNjaWkiLGxleCgiVW5pY29kZUVzY2FwZSIpKSxbbGl0KCJcXCIpLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KSxyYW5nZSg2NSw3MCkscmFuZ2UoOTcsMTAyKV0pXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[4]; - tmp[0] = new LiteralStackNode(7420, 0, cHJvZChsaXQoIlxcIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg5Miw5MildKV0se30p, new int[] {92}, null, null); - tmp[3] = new CharStackNode(7423, 3, new int[][]{{48,57},{65,70},{97,102}}, null, null); - tmp[2] = new CharStackNode(7422, 2, new int[][]{{48,55}}, null, null); - tmp[1] = new CharStackNode(7421, 1, new int[][]{{97,97}}, null, null); + tmp[0] = new LiteralStackNode(7397, 0, cHJvZChsaXQoIlxcIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg5Miw5MildKV0se30p, new int[] {92}, null, null); + tmp[3] = new CharStackNode(7400, 3, new int[][]{{48,57},{65,70},{97,102}}, null, null); + tmp[2] = new CharStackNode(7399, 2, new int[][]{{48,55}}, null, null); + tmp[1] = new CharStackNode(7398, 1, new int[][]{{97,97}}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiYXNjaWkiLGxleCgiVW5pY29kZUVzY2FwZSIpKSxbbGl0KCJcXCIpLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KSxyYW5nZSg2NSw3MCkscmFuZ2UoOTcsMTAyKV0pXSx7fSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIlVuaWNvZGVFc2NhcGUiKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJzb3J0KFwiVW5pY29kZUVzY2FwZVwiKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIobGV4KCJVbmljb2RlRXNjYXBlIikpKX0p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[2] = new LiteralStackNode(7428, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[0] = new CharStackNode(7426, 0, new int[][]{{0,0}}, null, null); - tmp[4] = new CharStackNode(7431, 4, new int[][]{{0,0}}, null, null); - tmp[1] = new LiteralStackNode(7427, 1, cHJvZChsaXQoInNvcnQoXCJVbmljb2RlRXNjYXBlXCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDg1LDg1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5OSw5OSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAwLDEwMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNjksNjkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk5LDk5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEyLDExMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {115,111,114,116,40,34,85,110,105,99,111,100,101,69,115,99,97,112,101,34,41}, null, null); - tmp[3] = new ListStackNode(7430, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(7429, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[2] = new LiteralStackNode(7405, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[0] = new CharStackNode(7403, 0, new int[][]{{0,0}}, null, null); + tmp[4] = new CharStackNode(7408, 4, new int[][]{{0,0}}, null, null); + tmp[1] = new LiteralStackNode(7404, 1, cHJvZChsaXQoInNvcnQoXCJVbmljb2RlRXNjYXBlXCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDg1LDg1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5OSw5OSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAwLDEwMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNjksNjkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk5LDk5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEyLDExMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {115,111,114,116,40,34,85,110,105,99,111,100,101,69,115,99,97,112,101,34,41}, null, null); + tmp[3] = new ListStackNode(7407, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(7406, 0, new int[][]{{48,57}}, null, null), true, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIlVuaWNvZGVFc2NhcGUiKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJzb3J0KFwiVW5pY29kZUVzY2FwZVwiKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIobGV4KCJVbmljb2RlRXNjYXBlIikpKX0p, tmp); } public static void init(ExpectBuilder builder){ @@ -9501,71 +9486,71 @@ protected static class SyntaxDefinition { protected static final void _init_cHJvZChsYWJlbCgia2V5d29yZCIsc29ydCgiU3ludGF4RGVmaW5pdGlvbiIpKSxbbGl0KCJrZXl3b3JkIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJkZWZpbmVkIixzb3J0KCJTeW0iKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiPSIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgicHJvZHVjdGlvbiIsc29ydCgiUHJvZCIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCI7IildLHt0YWcoIkZvbGRhYmxlIigpKX0p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[9]; - tmp[8] = new LiteralStackNode(7567, 8, cHJvZChsaXQoIjsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU5LDU5KV0pXSx7fSk00, new int[] {59}, null, null); - tmp[0] = new LiteralStackNode(7557, 0, cHJvZChsaXQoImtleXdvcmQiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEwNywxMDcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEyMSwxMjEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExOSwxMTkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMCwxMDApXSldLHt9KQ0000, new int[] {107,101,121,119,111,114,100}, null, null); - tmp[7] = new NonTerminalStackNode(7566, 7, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(7558, 1, "layouts_LAYOUTLIST", null, null); - tmp[5] = new NonTerminalStackNode(7563, 5, "layouts_LAYOUTLIST", null, null); - tmp[3] = new NonTerminalStackNode(7561, 3, "layouts_LAYOUTLIST", null, null); - tmp[2] = new NonTerminalStackNode(7559, 2, "Sym", null, null); - tmp[6] = new NonTerminalStackNode(7564, 6, "Prod", null, null); - tmp[4] = new LiteralStackNode(7562, 4, cHJvZChsaXQoIj0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDYxLDYxKV0pXSx7fSk00, new int[] {61}, null, null); + tmp[8] = new LiteralStackNode(7504, 8, cHJvZChsaXQoIjsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU5LDU5KV0pXSx7fSk00, new int[] {59}, null, null); + tmp[0] = new LiteralStackNode(7494, 0, cHJvZChsaXQoImtleXdvcmQiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEwNywxMDcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEyMSwxMjEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExOSwxMTkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMCwxMDApXSldLHt9KQ0000, new int[] {107,101,121,119,111,114,100}, null, null); + tmp[7] = new NonTerminalStackNode(7503, 7, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(7495, 1, "layouts_LAYOUTLIST", null, null); + tmp[5] = new NonTerminalStackNode(7500, 5, "layouts_LAYOUTLIST", null, null); + tmp[3] = new NonTerminalStackNode(7498, 3, "layouts_LAYOUTLIST", null, null); + tmp[2] = new NonTerminalStackNode(7496, 2, "Sym", null, null); + tmp[6] = new NonTerminalStackNode(7501, 6, "Prod", null, null); + tmp[4] = new LiteralStackNode(7499, 4, cHJvZChsaXQoIj0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDYxLDYxKV0pXSx7fSk00, new int[] {61}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgia2V5d29yZCIsc29ydCgiU3ludGF4RGVmaW5pdGlvbiIpKSxbbGl0KCJrZXl3b3JkIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJkZWZpbmVkIixzb3J0KCJTeW0iKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiPSIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgicHJvZHVjdGlvbiIsc29ydCgiUHJvZCIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCI7IildLHt0YWcoIkZvbGRhYmxlIigpKX0p, tmp); } protected static final void _init_cHJvZChsYWJlbCgibGFuZ3VhZ2UiLHNvcnQoIlN5bnRheERlZmluaXRpb24iKSksW2xhYmVsKCJzdGFydCIsc29ydCgiU3RhcnQiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgic3ludGF4IiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJkZWZpbmVkIixzb3J0KCJTeW0iKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiPSIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgicHJvZHVjdGlvbiIsc29ydCgiUHJvZCIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCI7IildLHt0YWcoIkZvbGRhYmxlIigpKX0p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[11]; - tmp[3] = new NonTerminalStackNode(7574, 3, "layouts_LAYOUTLIST", null, null); - tmp[2] = new LiteralStackNode(7573, 2, cHJvZChsaXQoInN5bnRheCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTIxLDEyMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEyMCwxMjApXSldLHt9KQ0000, new int[] {115,121,110,116,97,120}, null, null); - tmp[6] = new LiteralStackNode(7578, 6, cHJvZChsaXQoIj0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDYxLDYxKV0pXSx7fSk00, new int[] {61}, null, null); - tmp[8] = new NonTerminalStackNode(7580, 8, "Prod", null, null); - tmp[5] = new NonTerminalStackNode(7577, 5, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(7572, 1, "layouts_LAYOUTLIST", null, null); - tmp[7] = new NonTerminalStackNode(7579, 7, "layouts_LAYOUTLIST", null, null); - tmp[9] = new NonTerminalStackNode(7582, 9, "layouts_LAYOUTLIST", null, null); - tmp[10] = new LiteralStackNode(7583, 10, cHJvZChsaXQoIjsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU5LDU5KV0pXSx7fSk00, new int[] {59}, null, null); - tmp[0] = new NonTerminalStackNode(7570, 0, "Start", null, null); - tmp[4] = new NonTerminalStackNode(7575, 4, "Sym", null, null); + tmp[3] = new NonTerminalStackNode(7511, 3, "layouts_LAYOUTLIST", null, null); + tmp[2] = new LiteralStackNode(7510, 2, cHJvZChsaXQoInN5bnRheCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTIxLDEyMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEyMCwxMjApXSldLHt9KQ0000, new int[] {115,121,110,116,97,120}, null, null); + tmp[6] = new LiteralStackNode(7515, 6, cHJvZChsaXQoIj0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDYxLDYxKV0pXSx7fSk00, new int[] {61}, null, null); + tmp[8] = new NonTerminalStackNode(7517, 8, "Prod", null, null); + tmp[5] = new NonTerminalStackNode(7514, 5, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(7509, 1, "layouts_LAYOUTLIST", null, null); + tmp[7] = new NonTerminalStackNode(7516, 7, "layouts_LAYOUTLIST", null, null); + tmp[9] = new NonTerminalStackNode(7519, 9, "layouts_LAYOUTLIST", null, null); + tmp[10] = new LiteralStackNode(7520, 10, cHJvZChsaXQoIjsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU5LDU5KV0pXSx7fSk00, new int[] {59}, null, null); + tmp[0] = new NonTerminalStackNode(7507, 0, "Start", null, null); + tmp[4] = new NonTerminalStackNode(7512, 4, "Sym", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgibGFuZ3VhZ2UiLHNvcnQoIlN5bnRheERlZmluaXRpb24iKSksW2xhYmVsKCJzdGFydCIsc29ydCgiU3RhcnQiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgic3ludGF4IiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJkZWZpbmVkIixzb3J0KCJTeW0iKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiPSIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgicHJvZHVjdGlvbiIsc29ydCgiUHJvZCIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCI7IildLHt0YWcoIkZvbGRhYmxlIigpKX0p, tmp); } protected static final void _init_cHJvZChsYWJlbCgibGV4aWNhbCIsc29ydCgiU3ludGF4RGVmaW5pdGlvbiIpKSxbbGl0KCJsZXhpY2FsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJkZWZpbmVkIixzb3J0KCJTeW0iKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiPSIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgicHJvZHVjdGlvbiIsc29ydCgiUHJvZCIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCI7IildLHt0YWcoIkZvbGRhYmxlIigpKX0p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[9]; - tmp[8] = new LiteralStackNode(7596, 8, cHJvZChsaXQoIjsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU5LDU5KV0pXSx7fSk00, new int[] {59}, null, null); - tmp[6] = new NonTerminalStackNode(7593, 6, "Prod", null, null); - tmp[3] = new NonTerminalStackNode(7590, 3, "layouts_LAYOUTLIST", null, null); - tmp[5] = new NonTerminalStackNode(7592, 5, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(7587, 1, "layouts_LAYOUTLIST", null, null); - tmp[7] = new NonTerminalStackNode(7595, 7, "layouts_LAYOUTLIST", null, null); - tmp[0] = new LiteralStackNode(7586, 0, cHJvZChsaXQoImxleGljYWwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEyMCwxMjApXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk5LDk5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKV0se30p, new int[] {108,101,120,105,99,97,108}, null, null); - tmp[4] = new LiteralStackNode(7591, 4, cHJvZChsaXQoIj0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDYxLDYxKV0pXSx7fSk00, new int[] {61}, null, null); - tmp[2] = new NonTerminalStackNode(7588, 2, "Sym", null, null); + tmp[8] = new LiteralStackNode(7533, 8, cHJvZChsaXQoIjsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU5LDU5KV0pXSx7fSk00, new int[] {59}, null, null); + tmp[6] = new NonTerminalStackNode(7530, 6, "Prod", null, null); + tmp[3] = new NonTerminalStackNode(7527, 3, "layouts_LAYOUTLIST", null, null); + tmp[5] = new NonTerminalStackNode(7529, 5, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(7524, 1, "layouts_LAYOUTLIST", null, null); + tmp[7] = new NonTerminalStackNode(7532, 7, "layouts_LAYOUTLIST", null, null); + tmp[0] = new LiteralStackNode(7523, 0, cHJvZChsaXQoImxleGljYWwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEyMCwxMjApXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk5LDk5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKV0se30p, new int[] {108,101,120,105,99,97,108}, null, null); + tmp[4] = new LiteralStackNode(7528, 4, cHJvZChsaXQoIj0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDYxLDYxKV0pXSx7fSk00, new int[] {61}, null, null); + tmp[2] = new NonTerminalStackNode(7525, 2, "Sym", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgibGV4aWNhbCIsc29ydCgiU3ludGF4RGVmaW5pdGlvbiIpKSxbbGl0KCJsZXhpY2FsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJkZWZpbmVkIixzb3J0KCJTeW0iKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiPSIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgicHJvZHVjdGlvbiIsc29ydCgiUHJvZCIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCI7IildLHt0YWcoIkZvbGRhYmxlIigpKX0p, tmp); } protected static final void _init_cHJvZChsYWJlbCgibGF5b3V0Iixzb3J0KCJTeW50YXhEZWZpbml0aW9uIikpLFtsYWJlbCgidmlzIixzb3J0KCJWaXNpYmlsaXR5IikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoImxheW91dCIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgiZGVmaW5lZCIsc29ydCgiU3ltIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIj0iKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInByb2R1Y3Rpb24iLHNvcnQoIlByb2QiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiOyIpXSx7dGFnKCJGb2xkYWJsZSIoKSl9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[11]; - tmp[6] = new LiteralStackNode(7607, 6, cHJvZChsaXQoIj0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDYxLDYxKV0pXSx7fSk00, new int[] {61}, null, null); - tmp[2] = new LiteralStackNode(7602, 2, cHJvZChsaXQoImxheW91dCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEyMSwxMjEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNywxMTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSldLHt9KQ0000, new int[] {108,97,121,111,117,116}, null, null); - tmp[3] = new NonTerminalStackNode(7603, 3, "layouts_LAYOUTLIST", null, null); - tmp[4] = new NonTerminalStackNode(7604, 4, "Sym", null, null); - tmp[9] = new NonTerminalStackNode(7611, 9, "layouts_LAYOUTLIST", null, null); - tmp[10] = new LiteralStackNode(7612, 10, cHJvZChsaXQoIjsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU5LDU5KV0pXSx7fSk00, new int[] {59}, null, null); - tmp[0] = new NonTerminalStackNode(7599, 0, "Visibility", null, null); - tmp[5] = new NonTerminalStackNode(7606, 5, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(7601, 1, "layouts_LAYOUTLIST", null, null); - tmp[7] = new NonTerminalStackNode(7608, 7, "layouts_LAYOUTLIST", null, null); - tmp[8] = new NonTerminalStackNode(7609, 8, "Prod", null, null); + tmp[6] = new LiteralStackNode(7544, 6, cHJvZChsaXQoIj0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDYxLDYxKV0pXSx7fSk00, new int[] {61}, null, null); + tmp[2] = new LiteralStackNode(7539, 2, cHJvZChsaXQoImxheW91dCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEyMSwxMjEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNywxMTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSldLHt9KQ0000, new int[] {108,97,121,111,117,116}, null, null); + tmp[3] = new NonTerminalStackNode(7540, 3, "layouts_LAYOUTLIST", null, null); + tmp[4] = new NonTerminalStackNode(7541, 4, "Sym", null, null); + tmp[9] = new NonTerminalStackNode(7548, 9, "layouts_LAYOUTLIST", null, null); + tmp[10] = new LiteralStackNode(7549, 10, cHJvZChsaXQoIjsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU5LDU5KV0pXSx7fSk00, new int[] {59}, null, null); + tmp[0] = new NonTerminalStackNode(7536, 0, "Visibility", null, null); + tmp[5] = new NonTerminalStackNode(7543, 5, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(7538, 1, "layouts_LAYOUTLIST", null, null); + tmp[7] = new NonTerminalStackNode(7545, 7, "layouts_LAYOUTLIST", null, null); + tmp[8] = new NonTerminalStackNode(7546, 8, "Prod", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgibGF5b3V0Iixzb3J0KCJTeW50YXhEZWZpbml0aW9uIikpLFtsYWJlbCgidmlzIixzb3J0KCJWaXNpYmlsaXR5IikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoImxheW91dCIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgiZGVmaW5lZCIsc29ydCgiU3ltIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIj0iKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInByb2R1Y3Rpb24iLHNvcnQoIlByb2QiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiOyIpXSx7dGFnKCJGb2xkYWJsZSIoKSl9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJTeW50YXhEZWZpbml0aW9uIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIlN5bnRheERlZmluaXRpb25cIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKHNvcnQoIlN5bnRheERlZmluaXRpb24iKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[0] = new CharStackNode(7615, 0, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(7617, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[4] = new CharStackNode(7620, 4, new int[][]{{0,0}}, null, null); - tmp[1] = new LiteralStackNode(7616, 1, cHJvZChsaXQoInNvcnQoXCJTeW50YXhEZWZpbml0aW9uXCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDgzLDgzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMjEsMTIxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTIwLDEyMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNjgsNjgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMiwxMDIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,83,121,110,116,97,120,68,101,102,105,110,105,116,105,111,110,34,41}, null, null); - tmp[3] = new ListStackNode(7619, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(7618, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[0] = new CharStackNode(7552, 0, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(7554, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[4] = new CharStackNode(7557, 4, new int[][]{{0,0}}, null, null); + tmp[1] = new LiteralStackNode(7553, 1, cHJvZChsaXQoInNvcnQoXCJTeW50YXhEZWZpbml0aW9uXCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDgzLDgzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMjEsMTIxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTIwLDEyMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNjgsNjgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMiwxMDIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,83,121,110,116,97,120,68,101,102,105,110,105,116,105,111,110,34,41}, null, null); + tmp[3] = new ListStackNode(7556, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(7555, 0, new int[][]{{48,57}}, null, null), true, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJTeW50YXhEZWZpbml0aW9uIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIlN5bnRheERlZmluaXRpb25cIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKHNvcnQoIlN5bnRheERlZmluaXRpb24iKSkpfSk00, tmp); } public static void init(ExpectBuilder builder){ @@ -9594,21 +9579,21 @@ protected static class ModuleParameters { protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJNb2R1bGVQYXJhbWV0ZXJzIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIk1vZHVsZVBhcmFtZXRlcnNcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKHNvcnQoIk1vZHVsZVBhcmFtZXRlcnMiKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[3] = new ListStackNode(7748, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(7747, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[1] = new LiteralStackNode(7745, 1, cHJvZChsaXQoInNvcnQoXCJNb2R1bGVQYXJhbWV0ZXJzXCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDc3LDc3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDAsMTAwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTcsMTE3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4MCw4MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDksMTA5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {115,111,114,116,40,34,77,111,100,117,108,101,80,97,114,97,109,101,116,101,114,115,34,41}, null, null); - tmp[0] = new CharStackNode(7744, 0, new int[][]{{0,0}}, null, null); - tmp[4] = new CharStackNode(7749, 4, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(7746, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[3] = new ListStackNode(7685, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(7684, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[1] = new LiteralStackNode(7682, 1, cHJvZChsaXQoInNvcnQoXCJNb2R1bGVQYXJhbWV0ZXJzXCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDc3LDc3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDAsMTAwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTcsMTE3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4MCw4MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDksMTA5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {115,111,114,116,40,34,77,111,100,117,108,101,80,97,114,97,109,101,116,101,114,115,34,41}, null, null); + tmp[0] = new CharStackNode(7681, 0, new int[][]{{0,0}}, null, null); + tmp[4] = new CharStackNode(7686, 4, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(7683, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJNb2R1bGVQYXJhbWV0ZXJzIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIk1vZHVsZVBhcmFtZXRlcnNcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKHNvcnQoIk1vZHVsZVBhcmFtZXRlcnMiKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiZGVmYXVsdCIsc29ydCgiTW9kdWxlUGFyYW1ldGVycyIpKSxbbGl0KCJbIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJwYXJhbWV0ZXJzIixcaXRlci1zZXBzKHNvcnQoIlR5cGVWYXIiKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJdIildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[0] = new LiteralStackNode(7753, 0, cHJvZChsaXQoIlsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkxLDkxKV0pXSx7fSk00, new int[] {91}, null, null); - tmp[4] = new LiteralStackNode(7762, 4, cHJvZChsaXQoIl0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkzLDkzKV0pXSx7fSk00, new int[] {93}, null, null); - tmp[2] = new SeparatedListStackNode(7759, 2, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIlR5cGVWYXIiKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(7755, 0, "TypeVar", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(7756, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(7757, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(7758, 3, "layouts_LAYOUTLIST", null, null)}, true, null, null); - tmp[3] = new NonTerminalStackNode(7761, 3, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(7754, 1, "layouts_LAYOUTLIST", null, null); + tmp[0] = new LiteralStackNode(7690, 0, cHJvZChsaXQoIlsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkxLDkxKV0pXSx7fSk00, new int[] {91}, null, null); + tmp[4] = new LiteralStackNode(7699, 4, cHJvZChsaXQoIl0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkzLDkzKV0pXSx7fSk00, new int[] {93}, null, null); + tmp[2] = new SeparatedListStackNode(7696, 2, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIlR5cGVWYXIiKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(7692, 0, "TypeVar", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(7693, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(7694, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(7695, 3, "layouts_LAYOUTLIST", null, null)}, true, null, null); + tmp[3] = new NonTerminalStackNode(7698, 3, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(7691, 1, "layouts_LAYOUTLIST", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiZGVmYXVsdCIsc29ydCgiTW9kdWxlUGFyYW1ldGVycyIpKSxbbGl0KCJbIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJwYXJhbWV0ZXJzIixcaXRlci1zZXBzKHNvcnQoIlR5cGVWYXIiKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJdIildLHt9KQ0000, tmp); } public static void init(ExpectBuilder builder){ @@ -9631,39 +9616,39 @@ protected static class DatePart { protected static final void _init_cHJvZChsZXgoIkRhdGVQYXJ0IiksW1xjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNDkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1MSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSldLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[8]; - tmp[3] = new CharStackNode(7792, 3, new int[][]{{48,57}}, null, null); - tmp[0] = new CharStackNode(7789, 0, new int[][]{{48,57}}, null, null); - tmp[2] = new CharStackNode(7791, 2, new int[][]{{48,57}}, null, null); - tmp[6] = new CharStackNode(7795, 6, new int[][]{{48,51}}, null, null); - tmp[4] = new CharStackNode(7793, 4, new int[][]{{48,49}}, null, null); - tmp[7] = new CharStackNode(7796, 7, new int[][]{{48,57}}, null, null); - tmp[1] = new CharStackNode(7790, 1, new int[][]{{48,57}}, null, null); - tmp[5] = new CharStackNode(7794, 5, new int[][]{{48,57}}, null, null); + tmp[3] = new CharStackNode(7729, 3, new int[][]{{48,57}}, null, null); + tmp[0] = new CharStackNode(7726, 0, new int[][]{{48,57}}, null, null); + tmp[2] = new CharStackNode(7728, 2, new int[][]{{48,57}}, null, null); + tmp[6] = new CharStackNode(7732, 6, new int[][]{{48,51}}, null, null); + tmp[4] = new CharStackNode(7730, 4, new int[][]{{48,49}}, null, null); + tmp[7] = new CharStackNode(7733, 7, new int[][]{{48,57}}, null, null); + tmp[1] = new CharStackNode(7727, 1, new int[][]{{48,57}}, null, null); + tmp[5] = new CharStackNode(7731, 5, new int[][]{{48,57}}, null, null); builder.addAlternative(RascalParser.cHJvZChsZXgoIkRhdGVQYXJ0IiksW1xjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNDkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1MSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSldLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIkRhdGVQYXJ0IikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIkRhdGVQYXJ0XCIpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihsZXgoIkRhdGVQYXJ0IikpKX0p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[4] = new CharStackNode(7804, 4, new int[][]{{0,0}}, null, null); - tmp[3] = new ListStackNode(7803, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(7802, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[1] = new LiteralStackNode(7800, 1, cHJvZChsaXQoInNvcnQoXCJEYXRlUGFydFwiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg2OCw2OCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDgwLDgwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {115,111,114,116,40,34,68,97,116,101,80,97,114,116,34,41}, null, null); - tmp[0] = new CharStackNode(7799, 0, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(7801, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[4] = new CharStackNode(7741, 4, new int[][]{{0,0}}, null, null); + tmp[3] = new ListStackNode(7740, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(7739, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[1] = new LiteralStackNode(7737, 1, cHJvZChsaXQoInNvcnQoXCJEYXRlUGFydFwiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg2OCw2OCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDgwLDgwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {115,111,114,116,40,34,68,97,116,101,80,97,114,116,34,41}, null, null); + tmp[0] = new CharStackNode(7736, 0, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(7738, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIkRhdGVQYXJ0IikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIkRhdGVQYXJ0XCIpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihsZXgoIkRhdGVQYXJ0IikpKX0p, tmp); } protected static final void _init_cHJvZChsZXgoIkRhdGVQYXJ0IiksW1xjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSxsaXQoIi0iKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNDkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pLGxpdCgiLSIpLFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1MSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSldLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[10]; - tmp[0] = new CharStackNode(7807, 0, new int[][]{{48,57}}, null, null); - tmp[9] = new CharStackNode(7816, 9, new int[][]{{48,57}}, null, null); - tmp[4] = new LiteralStackNode(7811, 4, cHJvZChsaXQoIi0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ1LDQ1KV0pXSx7fSk00, new int[] {45}, null, null); - tmp[6] = new CharStackNode(7813, 6, new int[][]{{48,57}}, null, null); - tmp[3] = new CharStackNode(7810, 3, new int[][]{{48,57}}, null, null); - tmp[7] = new LiteralStackNode(7814, 7, cHJvZChsaXQoIi0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ1LDQ1KV0pXSx7fSk00, new int[] {45}, null, null); - tmp[2] = new CharStackNode(7809, 2, new int[][]{{48,57}}, null, null); - tmp[8] = new CharStackNode(7815, 8, new int[][]{{48,51}}, null, null); - tmp[5] = new CharStackNode(7812, 5, new int[][]{{48,49}}, null, null); - tmp[1] = new CharStackNode(7808, 1, new int[][]{{48,57}}, null, null); + tmp[0] = new CharStackNode(7744, 0, new int[][]{{48,57}}, null, null); + tmp[9] = new CharStackNode(7753, 9, new int[][]{{48,57}}, null, null); + tmp[4] = new LiteralStackNode(7748, 4, cHJvZChsaXQoIi0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ1LDQ1KV0pXSx7fSk00, new int[] {45}, null, null); + tmp[6] = new CharStackNode(7750, 6, new int[][]{{48,57}}, null, null); + tmp[3] = new CharStackNode(7747, 3, new int[][]{{48,57}}, null, null); + tmp[7] = new LiteralStackNode(7751, 7, cHJvZChsaXQoIi0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ1LDQ1KV0pXSx7fSk00, new int[] {45}, null, null); + tmp[2] = new CharStackNode(7746, 2, new int[][]{{48,57}}, null, null); + tmp[8] = new CharStackNode(7752, 8, new int[][]{{48,51}}, null, null); + tmp[5] = new CharStackNode(7749, 5, new int[][]{{48,49}}, null, null); + tmp[1] = new CharStackNode(7745, 1, new int[][]{{48,57}}, null, null); builder.addAlternative(RascalParser.cHJvZChsZXgoIkRhdGVQYXJ0IiksW1xjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSxsaXQoIi0iKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNDkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pLGxpdCgiLSIpLFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1MSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSldLHt9KQ0000, tmp); } public static void init(ExpectBuilder builder){ @@ -9688,137 +9673,137 @@ protected static class Assignable { protected static final void _init_cHJvZChsYWJlbCgiY29uc3RydWN0b3IiLHNvcnQoIkFzc2lnbmFibGUiKSksW2xhYmVsKCJuYW1lIixsZXgoIk5hbWUiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiKCIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgiYXJndW1lbnRzIixcaXRlci1zZXBzKHNvcnQoIkFzc2lnbmFibGUiKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIpIildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[7]; - tmp[6] = new LiteralStackNode(7832, 6, cHJvZChsaXQoIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {41}, null, null); - tmp[4] = new SeparatedListStackNode(7829, 4, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIkFzc2lnbmFibGUiKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(7825, 0, "Assignable", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(7826, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(7827, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(7828, 3, "layouts_LAYOUTLIST", null, null)}, true, null, null); - tmp[1] = new NonTerminalStackNode(7822, 1, "layouts_LAYOUTLIST", null, null); - tmp[5] = new NonTerminalStackNode(7831, 5, "layouts_LAYOUTLIST", null, null); - tmp[3] = new NonTerminalStackNode(7824, 3, "layouts_LAYOUTLIST", null, null); - tmp[2] = new LiteralStackNode(7823, 2, cHJvZChsaXQoIigiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pXSx7fSk00, new int[] {40}, null, null); - tmp[0] = new NonTerminalStackNode(7820, 0, "Name", null, null); + tmp[6] = new LiteralStackNode(7769, 6, cHJvZChsaXQoIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {41}, null, null); + tmp[4] = new SeparatedListStackNode(7766, 4, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIkFzc2lnbmFibGUiKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(7762, 0, "Assignable", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(7763, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(7764, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(7765, 3, "layouts_LAYOUTLIST", null, null)}, true, null, null); + tmp[1] = new NonTerminalStackNode(7759, 1, "layouts_LAYOUTLIST", null, null); + tmp[5] = new NonTerminalStackNode(7768, 5, "layouts_LAYOUTLIST", null, null); + tmp[3] = new NonTerminalStackNode(7761, 3, "layouts_LAYOUTLIST", null, null); + tmp[2] = new LiteralStackNode(7760, 2, cHJvZChsaXQoIigiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pXSx7fSk00, new int[] {40}, null, null); + tmp[0] = new NonTerminalStackNode(7757, 0, "Name", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiY29uc3RydWN0b3IiLHNvcnQoIkFzc2lnbmFibGUiKSksW2xhYmVsKCJuYW1lIixsZXgoIk5hbWUiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiKCIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgiYXJndW1lbnRzIixcaXRlci1zZXBzKHNvcnQoIkFzc2lnbmFibGUiKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIpIildLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgic3Vic2NyaXB0Iixzb3J0KCJBc3NpZ25hYmxlIikpLFtsYWJlbCgicmVjZWl2ZXIiLHNvcnQoIkFzc2lnbmFibGUiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiWyIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgic3Vic2NyaXB0Iixzb3J0KCJFeHByZXNzaW9uIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIl0iKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[7]; - tmp[3] = new NonTerminalStackNode(7839, 3, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(7837, 1, "layouts_LAYOUTLIST", null, null); - tmp[5] = new NonTerminalStackNode(7842, 5, "layouts_LAYOUTLIST", null, null); - tmp[4] = new NonTerminalStackNode(7840, 4, "Expression", null, null); - tmp[2] = new LiteralStackNode(7838, 2, cHJvZChsaXQoIlsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkxLDkxKV0pXSx7fSk00, new int[] {91}, null, null); - tmp[6] = new LiteralStackNode(7843, 6, cHJvZChsaXQoIl0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkzLDkzKV0pXSx7fSk00, new int[] {93}, null, null); - tmp[0] = new NonTerminalStackNode(7835, 0, "Assignable", null, null); + tmp[3] = new NonTerminalStackNode(7776, 3, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(7774, 1, "layouts_LAYOUTLIST", null, null); + tmp[5] = new NonTerminalStackNode(7779, 5, "layouts_LAYOUTLIST", null, null); + tmp[4] = new NonTerminalStackNode(7777, 4, "Expression", null, null); + tmp[2] = new LiteralStackNode(7775, 2, cHJvZChsaXQoIlsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkxLDkxKV0pXSx7fSk00, new int[] {91}, null, null); + tmp[6] = new LiteralStackNode(7780, 6, cHJvZChsaXQoIl0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkzLDkzKV0pXSx7fSk00, new int[] {93}, null, null); + tmp[0] = new NonTerminalStackNode(7772, 0, "Assignable", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgic3Vic2NyaXB0Iixzb3J0KCJBc3NpZ25hYmxlIikpLFtsYWJlbCgicmVjZWl2ZXIiLHNvcnQoIkFzc2lnbmFibGUiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiWyIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgic3Vic2NyaXB0Iixzb3J0KCJFeHByZXNzaW9uIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIl0iKV0se30p, tmp); } protected static final void _init_cHJvZChsYWJlbCgidHVwbGUiLHNvcnQoIkFzc2lnbmFibGUiKSksW2xpdCgiXDwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImVsZW1lbnRzIixcaXRlci1zZXBzKHNvcnQoIkFzc2lnbmFibGUiKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJcPiIpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[1] = new NonTerminalStackNode(7847, 1, "layouts_LAYOUTLIST", null, null); - tmp[3] = new NonTerminalStackNode(7854, 3, "layouts_LAYOUTLIST", null, null); - tmp[0] = new LiteralStackNode(7846, 0, cHJvZChsaXQoIlw8IiksW1xjaGFyLWNsYXNzKFtyYW5nZSg2MCw2MCldKV0se30p, new int[] {60}, null, null); - tmp[2] = new SeparatedListStackNode(7852, 2, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIkFzc2lnbmFibGUiKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(7848, 0, "Assignable", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(7849, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(7850, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(7851, 3, "layouts_LAYOUTLIST", null, null)}, true, null, null); - tmp[4] = new LiteralStackNode(7855, 4, cHJvZChsaXQoIlw11IiksW1xjaGFyLWNsYXNzKFtyYW5nZSg2Miw2MildKV0se30p, new int[] {62}, null, null); + tmp[1] = new NonTerminalStackNode(7784, 1, "layouts_LAYOUTLIST", null, null); + tmp[3] = new NonTerminalStackNode(7791, 3, "layouts_LAYOUTLIST", null, null); + tmp[0] = new LiteralStackNode(7783, 0, cHJvZChsaXQoIlw8IiksW1xjaGFyLWNsYXNzKFtyYW5nZSg2MCw2MCldKV0se30p, new int[] {60}, null, null); + tmp[2] = new SeparatedListStackNode(7789, 2, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIkFzc2lnbmFibGUiKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(7785, 0, "Assignable", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(7786, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(7787, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(7788, 3, "layouts_LAYOUTLIST", null, null)}, true, null, null); + tmp[4] = new LiteralStackNode(7792, 4, cHJvZChsaXQoIlw11IiksW1xjaGFyLWNsYXNzKFtyYW5nZSg2Miw2MildKV0se30p, new int[] {62}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgidHVwbGUiLHNvcnQoIkFzc2lnbmFibGUiKSksW2xpdCgiXDwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImVsZW1lbnRzIixcaXRlci1zZXBzKHNvcnQoIkFzc2lnbmFibGUiKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJcPiIpXSx7fSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgidmFyaWFibGUiLHNvcnQoIkFzc2lnbmFibGUiKSksW2xhYmVsKCJxdWFsaWZpZWROYW1lIixzb3J0KCJRdWFsaWZpZWROYW1lIikpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new NonTerminalStackNode(7858, 0, "QualifiedName", null, null); + tmp[0] = new NonTerminalStackNode(7795, 0, "QualifiedName", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgidmFyaWFibGUiLHNvcnQoIkFzc2lnbmFibGUiKSksW2xhYmVsKCJxdWFsaWZpZWROYW1lIixzb3J0KCJRdWFsaWZpZWROYW1lIikpXSx7fSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJBc3NpZ25hYmxlIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIkFzc2lnbmFibGVcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKHNvcnQoIkFzc2lnbmFibGUiKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[3] = new ListStackNode(7866, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(7865, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[1] = new LiteralStackNode(7863, 1, cHJvZChsaXQoInNvcnQoXCJBc3NpZ25hYmxlXCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDY1LDY1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDMsMTAzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTgsOTgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,65,115,115,105,103,110,97,98,108,101,34,41}, null, null); - tmp[0] = new CharStackNode(7862, 0, new int[][]{{0,0}}, null, null); - tmp[4] = new CharStackNode(7867, 4, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(7864, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[3] = new ListStackNode(7803, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(7802, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[1] = new LiteralStackNode(7800, 1, cHJvZChsaXQoInNvcnQoXCJBc3NpZ25hYmxlXCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDY1LDY1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDMsMTAzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTgsOTgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,65,115,115,105,103,110,97,98,108,101,34,41}, null, null); + tmp[0] = new CharStackNode(7799, 0, new int[][]{{0,0}}, null, null); + tmp[4] = new CharStackNode(7804, 4, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(7801, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJBc3NpZ25hYmxlIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIkFzc2lnbmFibGVcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKHNvcnQoIkFzc2lnbmFibGUiKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiYnJhY2tldCIsc29ydCgiQXNzaWduYWJsZSIpKSxbbGl0KCIoIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJhcmciLHNvcnQoIkFzc2lnbmFibGUiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiKSIpXSx7YnJhY2tldCgpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[3] = new NonTerminalStackNode(7875, 3, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(7872, 1, "layouts_LAYOUTLIST", null, null); - tmp[0] = new LiteralStackNode(7871, 0, cHJvZChsaXQoIigiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pXSx7fSk00, new int[] {40}, null, null); - tmp[4] = new LiteralStackNode(7876, 4, cHJvZChsaXQoIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {41}, null, null); - tmp[2] = new NonTerminalStackNode(7873, 2, "Assignable", null, null); + tmp[3] = new NonTerminalStackNode(7812, 3, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(7809, 1, "layouts_LAYOUTLIST", null, null); + tmp[0] = new LiteralStackNode(7808, 0, cHJvZChsaXQoIigiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pXSx7fSk00, new int[] {40}, null, null); + tmp[4] = new LiteralStackNode(7813, 4, cHJvZChsaXQoIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {41}, null, null); + tmp[2] = new NonTerminalStackNode(7810, 2, "Assignable", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiYnJhY2tldCIsc29ydCgiQXNzaWduYWJsZSIpKSxbbGl0KCIoIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJhcmciLHNvcnQoIkFzc2lnbmFibGUiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiKSIpXSx7YnJhY2tldCgpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgic2xpY2VTdGVwIixzb3J0KCJBc3NpZ25hYmxlIikpLFtsYWJlbCgicmVjZWl2ZXIiLHNvcnQoIkFzc2lnbmFibGUiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiWyIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgib3B0Rmlyc3QiLHNvcnQoIk9wdGlvbmFsRXhwcmVzc2lvbiIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJzZWNvbmQiLHNvcnQoIkV4cHJlc3Npb24iKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLi4iKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoIm9wdExhc3QiLHNvcnQoIk9wdGlvbmFsRXhwcmVzc2lvbiIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJdIildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[15]; - tmp[2] = new LiteralStackNode(7882, 2, cHJvZChsaXQoIlsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkxLDkxKV0pXSx7fSk00, new int[] {91}, null, null); - tmp[6] = new LiteralStackNode(7887, 6, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null); - tmp[14] = new LiteralStackNode(7897, 14, cHJvZChsaXQoIl0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkzLDkzKV0pXSx7fSk00, new int[] {93}, null, null); - tmp[12] = new NonTerminalStackNode(7894, 12, "OptionalExpression", null, null); - tmp[4] = new NonTerminalStackNode(7884, 4, "OptionalExpression", null, null); - tmp[9] = new NonTerminalStackNode(7891, 9, "layouts_LAYOUTLIST", null, null); - tmp[10] = new LiteralStackNode(7892, 10, cHJvZChsaXQoIi4uIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg0Niw0NildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDYsNDYpXSldLHt9KQ0000, new int[] {46,46}, null, null); - tmp[0] = new NonTerminalStackNode(7879, 0, "Assignable", null, null); - tmp[7] = new NonTerminalStackNode(7888, 7, "layouts_LAYOUTLIST", null, null); - tmp[5] = new NonTerminalStackNode(7886, 5, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(7881, 1, "layouts_LAYOUTLIST", null, null); - tmp[13] = new NonTerminalStackNode(7896, 13, "layouts_LAYOUTLIST", null, null); - tmp[11] = new NonTerminalStackNode(7893, 11, "layouts_LAYOUTLIST", null, null); - tmp[3] = new NonTerminalStackNode(7883, 3, "layouts_LAYOUTLIST", null, null); - tmp[8] = new NonTerminalStackNode(7889, 8, "Expression", null, null); + tmp[2] = new LiteralStackNode(7819, 2, cHJvZChsaXQoIlsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkxLDkxKV0pXSx7fSk00, new int[] {91}, null, null); + tmp[6] = new LiteralStackNode(7824, 6, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null); + tmp[14] = new LiteralStackNode(7834, 14, cHJvZChsaXQoIl0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkzLDkzKV0pXSx7fSk00, new int[] {93}, null, null); + tmp[12] = new NonTerminalStackNode(7831, 12, "OptionalExpression", null, null); + tmp[4] = new NonTerminalStackNode(7821, 4, "OptionalExpression", null, null); + tmp[9] = new NonTerminalStackNode(7828, 9, "layouts_LAYOUTLIST", null, null); + tmp[10] = new LiteralStackNode(7829, 10, cHJvZChsaXQoIi4uIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg0Niw0NildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDYsNDYpXSldLHt9KQ0000, new int[] {46,46}, null, null); + tmp[0] = new NonTerminalStackNode(7816, 0, "Assignable", null, null); + tmp[7] = new NonTerminalStackNode(7825, 7, "layouts_LAYOUTLIST", null, null); + tmp[5] = new NonTerminalStackNode(7823, 5, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(7818, 1, "layouts_LAYOUTLIST", null, null); + tmp[13] = new NonTerminalStackNode(7833, 13, "layouts_LAYOUTLIST", null, null); + tmp[11] = new NonTerminalStackNode(7830, 11, "layouts_LAYOUTLIST", null, null); + tmp[3] = new NonTerminalStackNode(7820, 3, "layouts_LAYOUTLIST", null, null); + tmp[8] = new NonTerminalStackNode(7826, 8, "Expression", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgic2xpY2VTdGVwIixzb3J0KCJBc3NpZ25hYmxlIikpLFtsYWJlbCgicmVjZWl2ZXIiLHNvcnQoIkFzc2lnbmFibGUiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiWyIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgib3B0Rmlyc3QiLHNvcnQoIk9wdGlvbmFsRXhwcmVzc2lvbiIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJzZWNvbmQiLHNvcnQoIkV4cHJlc3Npb24iKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLi4iKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoIm9wdExhc3QiLHNvcnQoIk9wdGlvbmFsRXhwcmVzc2lvbiIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJdIildLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJBc3NpZ25hYmxlIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgiXFxpdGVyLXNlcHMoc29ydChcIkFzc2lnbmFibGVcIiksW2xpdChcIixcIildKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoXGl0ZXItc2Vwcyhzb3J0KCJBc3NpZ25hYmxlIiksW2xheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIiwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIildKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[3] = new ListStackNode(7904, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(7903, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[2] = new LiteralStackNode(7902, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[4] = new CharStackNode(7905, 4, new int[][]{{0,0}}, null, null); - tmp[0] = new CharStackNode(7900, 0, new int[][]{{0,0}}, null, null); - tmp[1] = new LiteralStackNode(7901, 1, cHJvZChsaXQoIlxcaXRlci1zZXBzKHNvcnQoXCJBc3NpZ25hYmxlXCIpLFtsaXQoXCIsXCIpXSkiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkyLDkyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NSw0NSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEyLDExMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNjUsNjUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMywxMDMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5OCw5OCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NCw0NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTEsOTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDQsNDQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTMsOTMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {92,105,116,101,114,45,115,101,112,115,40,115,111,114,116,40,34,65,115,115,105,103,110,97,98,108,101,34,41,44,91,108,105,116,40,34,44,34,41,93,41}, null, null); + tmp[3] = new ListStackNode(7841, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(7840, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[2] = new LiteralStackNode(7839, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[4] = new CharStackNode(7842, 4, new int[][]{{0,0}}, null, null); + tmp[0] = new CharStackNode(7837, 0, new int[][]{{0,0}}, null, null); + tmp[1] = new LiteralStackNode(7838, 1, cHJvZChsaXQoIlxcaXRlci1zZXBzKHNvcnQoXCJBc3NpZ25hYmxlXCIpLFtsaXQoXCIsXCIpXSkiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkyLDkyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NSw0NSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEyLDExMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNjUsNjUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMywxMDMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5OCw5OCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NCw0NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTEsOTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDQsNDQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTMsOTMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {92,105,116,101,114,45,115,101,112,115,40,115,111,114,116,40,34,65,115,115,105,103,110,97,98,108,101,34,41,44,91,108,105,116,40,34,44,34,41,93,41}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJBc3NpZ25hYmxlIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgiXFxpdGVyLXNlcHMoc29ydChcIkFzc2lnbmFibGVcIiksW2xpdChcIixcIildKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoXGl0ZXItc2Vwcyhzb3J0KCJBc3NpZ25hYmxlIiksW2xheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIiwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIildKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiZmllbGRBY2Nlc3MiLHNvcnQoIkFzc2lnbmFibGUiKSksW2xhYmVsKCJyZWNlaXZlciIsc29ydCgiQXNzaWduYWJsZSIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIuIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJmaWVsZCIsbGV4KCJOYW1lIikpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[2] = new LiteralStackNode(7916, 2, cHJvZChsaXQoIi4iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ2LDQ2KV0pXSx7fSk00, new int[] {46}, null, null); - tmp[0] = new NonTerminalStackNode(7913, 0, "Assignable", null, null); - tmp[4] = new NonTerminalStackNode(7918, 4, "Name", null, null); - tmp[1] = new NonTerminalStackNode(7915, 1, "layouts_LAYOUTLIST", null, null); - tmp[3] = new NonTerminalStackNode(7917, 3, "layouts_LAYOUTLIST", null, null); + tmp[2] = new LiteralStackNode(7853, 2, cHJvZChsaXQoIi4iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ2LDQ2KV0pXSx7fSk00, new int[] {46}, null, null); + tmp[0] = new NonTerminalStackNode(7850, 0, "Assignable", null, null); + tmp[4] = new NonTerminalStackNode(7855, 4, "Name", null, null); + tmp[1] = new NonTerminalStackNode(7852, 1, "layouts_LAYOUTLIST", null, null); + tmp[3] = new NonTerminalStackNode(7854, 3, "layouts_LAYOUTLIST", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiZmllbGRBY2Nlc3MiLHNvcnQoIkFzc2lnbmFibGUiKSksW2xhYmVsKCJyZWNlaXZlciIsc29ydCgiQXNzaWduYWJsZSIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIuIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJmaWVsZCIsbGV4KCJOYW1lIikpXSx7fSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgic2xpY2UiLHNvcnQoIkFzc2lnbmFibGUiKSksW2xhYmVsKCJyZWNlaXZlciIsc29ydCgiQXNzaWduYWJsZSIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJbIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJvcHRGaXJzdCIsc29ydCgiT3B0aW9uYWxFeHByZXNzaW9uIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIi4uIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJvcHRMYXN0Iixzb3J0KCJPcHRpb25hbEV4cHJlc3Npb24iKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiXSIpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[11]; - tmp[0] = new NonTerminalStackNode(7922, 0, "Assignable", null, null); - tmp[10] = new LiteralStackNode(7935, 10, cHJvZChsaXQoIl0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkzLDkzKV0pXSx7fSk00, new int[] {93}, null, null); - tmp[9] = new NonTerminalStackNode(7934, 9, "layouts_LAYOUTLIST", null, null); - tmp[4] = new NonTerminalStackNode(7927, 4, "OptionalExpression", null, null); - tmp[2] = new LiteralStackNode(7925, 2, cHJvZChsaXQoIlsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkxLDkxKV0pXSx7fSk00, new int[] {91}, null, null); - tmp[6] = new LiteralStackNode(7930, 6, cHJvZChsaXQoIi4uIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg0Niw0NildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDYsNDYpXSldLHt9KQ0000, new int[] {46,46}, null, null); - tmp[8] = new NonTerminalStackNode(7932, 8, "OptionalExpression", null, null); - tmp[3] = new NonTerminalStackNode(7926, 3, "layouts_LAYOUTLIST", null, null); - tmp[7] = new NonTerminalStackNode(7931, 7, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(7924, 1, "layouts_LAYOUTLIST", null, null); - tmp[5] = new NonTerminalStackNode(7929, 5, "layouts_LAYOUTLIST", null, null); + tmp[0] = new NonTerminalStackNode(7859, 0, "Assignable", null, null); + tmp[10] = new LiteralStackNode(7872, 10, cHJvZChsaXQoIl0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkzLDkzKV0pXSx7fSk00, new int[] {93}, null, null); + tmp[9] = new NonTerminalStackNode(7871, 9, "layouts_LAYOUTLIST", null, null); + tmp[4] = new NonTerminalStackNode(7864, 4, "OptionalExpression", null, null); + tmp[2] = new LiteralStackNode(7862, 2, cHJvZChsaXQoIlsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkxLDkxKV0pXSx7fSk00, new int[] {91}, null, null); + tmp[6] = new LiteralStackNode(7867, 6, cHJvZChsaXQoIi4uIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg0Niw0NildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDYsNDYpXSldLHt9KQ0000, new int[] {46,46}, null, null); + tmp[8] = new NonTerminalStackNode(7869, 8, "OptionalExpression", null, null); + tmp[3] = new NonTerminalStackNode(7863, 3, "layouts_LAYOUTLIST", null, null); + tmp[7] = new NonTerminalStackNode(7868, 7, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(7861, 1, "layouts_LAYOUTLIST", null, null); + tmp[5] = new NonTerminalStackNode(7866, 5, "layouts_LAYOUTLIST", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgic2xpY2UiLHNvcnQoIkFzc2lnbmFibGUiKSksW2xhYmVsKCJyZWNlaXZlciIsc29ydCgiQXNzaWduYWJsZSIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJbIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJvcHRGaXJzdCIsc29ydCgiT3B0aW9uYWxFeHByZXNzaW9uIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIi4uIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJvcHRMYXN0Iixzb3J0KCJPcHRpb25hbEV4cHJlc3Npb24iKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiXSIpXSx7fSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiYW5ub3RhdGlvbiIsc29ydCgiQXNzaWduYWJsZSIpKSxbbGFiZWwoInJlY2VpdmVyIixzb3J0KCJBc3NpZ25hYmxlIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIkAiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImFubm90YXRpb24iLGxleCgiTmFtZSIpKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[0] = new NonTerminalStackNode(7938, 0, "Assignable", null, null); - tmp[2] = new LiteralStackNode(7941, 2, cHJvZChsaXQoIkAiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDY0LDY0KV0pXSx7fSk00, new int[] {64}, null, null); - tmp[4] = new NonTerminalStackNode(7943, 4, "Name", null, null); - tmp[1] = new NonTerminalStackNode(7940, 1, "layouts_LAYOUTLIST", null, null); - tmp[3] = new NonTerminalStackNode(7942, 3, "layouts_LAYOUTLIST", null, null); + tmp[0] = new NonTerminalStackNode(7875, 0, "Assignable", null, null); + tmp[2] = new LiteralStackNode(7878, 2, cHJvZChsaXQoIkAiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDY0LDY0KV0pXSx7fSk00, new int[] {64}, null, null); + tmp[4] = new NonTerminalStackNode(7880, 4, "Name", null, null); + tmp[1] = new NonTerminalStackNode(7877, 1, "layouts_LAYOUTLIST", null, null); + tmp[3] = new NonTerminalStackNode(7879, 3, "layouts_LAYOUTLIST", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiYW5ub3RhdGlvbiIsc29ydCgiQXNzaWduYWJsZSIpKSxbbGFiZWwoInJlY2VpdmVyIixzb3J0KCJBc3NpZ25hYmxlIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIkAiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImFubm90YXRpb24iLGxleCgiTmFtZSIpKV0se30p, tmp); } protected static final void _init_cHJvZChsYWJlbCgiaWZEZWZpbmVkT3JEZWZhdWx0Iixzb3J0KCJBc3NpZ25hYmxlIikpLFtsYWJlbCgicmVjZWl2ZXIiLHNvcnQoIkFzc2lnbmFibGUiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiPyIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgiZGVmYXVsdEV4cHJlc3Npb24iLHNvcnQoIkV4cHJlc3Npb24iKSldLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[0] = new NonTerminalStackNode(7947, 0, "Assignable", null, null); - tmp[2] = new LiteralStackNode(7950, 2, cHJvZChsaXQoIj8iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDYzLDYzKV0pXSx7fSk00, new int[] {63}, null, null); - tmp[4] = new NonTerminalStackNode(7952, 4, "Expression", null, null); - tmp[1] = new NonTerminalStackNode(7949, 1, "layouts_LAYOUTLIST", null, null); - tmp[3] = new NonTerminalStackNode(7951, 3, "layouts_LAYOUTLIST", null, null); + tmp[0] = new NonTerminalStackNode(7884, 0, "Assignable", null, null); + tmp[2] = new LiteralStackNode(7887, 2, cHJvZChsaXQoIj8iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDYzLDYzKV0pXSx7fSk00, new int[] {63}, null, null); + tmp[4] = new NonTerminalStackNode(7889, 4, "Expression", null, null); + tmp[1] = new NonTerminalStackNode(7886, 1, "layouts_LAYOUTLIST", null, null); + tmp[3] = new NonTerminalStackNode(7888, 3, "layouts_LAYOUTLIST", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiaWZEZWZpbmVkT3JEZWZhdWx0Iixzb3J0KCJBc3NpZ25hYmxlIikpLFtsYWJlbCgicmVjZWl2ZXIiLHNvcnQoIkFzc2lnbmFibGUiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiPyIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgiZGVmYXVsdEV4cHJlc3Npb24iLHNvcnQoIkV4cHJlc3Npb24iKSldLHt9KQ0000, tmp); } public static void init(ExpectBuilder builder){ @@ -9861,31 +9846,31 @@ protected static class Mapping_W3NvcnQoIlBhdHRlcm4iKV000 { protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixccGFyYW1ldGVyaXplZC1zb3J0KCJNYXBwaW5nIixbc29ydCgiUGF0dGVybiIpXSkpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgiXFxpdGVyLXN0YXItc2VwcyhcXHBhcmFtZXRlcml6ZWQtc29ydChcIk1hcHBpbmdcIixbc29ydChcIlBhdHRlcm5cIildKSxbbGl0KFwiLFwiKV0pIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihcaXRlci1zdGFyLXNlcHMoXHBhcmFtZXRlcml6ZWQtc29ydCgiTWFwcGluZyIsW3NvcnQoIlBhdHRlcm4iKV0pLFtsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpXSkpKX0p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[0] = new CharStackNode(7979, 0, new int[][]{{0,0}}, null, null); - tmp[4] = new CharStackNode(7984, 4, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(7981, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[3] = new ListStackNode(7983, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(7982, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[1] = new LiteralStackNode(7980, 1, cHJvZChsaXQoIlxcaXRlci1zdGFyLXNlcHMoXFxwYXJhbWV0ZXJpemVkLXNvcnQoXCJNYXBwaW5nXCIsW3NvcnQoXCJQYXR0ZXJuXCIpXSksW2xpdChcIixcIildKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoOTIsOTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ1LDQ1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDUsNDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Miw5MildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEyLDExMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDksMTA5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMjIsMTIyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDAsMTAwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NSw0NSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg3Nyw3NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMywxMDMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NCw0NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTEsOTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODAsODApXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDkzLDkzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDQsNDQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDkxLDkxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDkzLDkzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {92,105,116,101,114,45,115,116,97,114,45,115,101,112,115,40,92,112,97,114,97,109,101,116,101,114,105,122,101,100,45,115,111,114,116,40,34,77,97,112,112,105,110,103,34,44,91,115,111,114,116,40,34,80,97,116,116,101,114,110,34,41,93,41,44,91,108,105,116,40,34,44,34,41,93,41}, null, null); + tmp[0] = new CharStackNode(7916, 0, new int[][]{{0,0}}, null, null); + tmp[4] = new CharStackNode(7921, 4, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(7918, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[3] = new ListStackNode(7920, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(7919, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[1] = new LiteralStackNode(7917, 1, cHJvZChsaXQoIlxcaXRlci1zdGFyLXNlcHMoXFxwYXJhbWV0ZXJpemVkLXNvcnQoXCJNYXBwaW5nXCIsW3NvcnQoXCJQYXR0ZXJuXCIpXSksW2xpdChcIixcIildKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoOTIsOTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ1LDQ1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDUsNDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Miw5MildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEyLDExMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDksMTA5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMjIsMTIyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDAsMTAwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NSw0NSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg3Nyw3NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMywxMDMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NCw0NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTEsOTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODAsODApXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDkzLDkzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDQsNDQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDkxLDkxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDkzLDkzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {92,105,116,101,114,45,115,116,97,114,45,115,101,112,115,40,92,112,97,114,97,109,101,116,101,114,105,122,101,100,45,115,111,114,116,40,34,77,97,112,112,105,110,103,34,44,91,115,111,114,116,40,34,80,97,116,116,101,114,110,34,41,93,41,44,91,108,105,116,40,34,44,34,41,93,41}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixccGFyYW1ldGVyaXplZC1zb3J0KCJNYXBwaW5nIixbc29ydCgiUGF0dGVybiIpXSkpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgiXFxpdGVyLXN0YXItc2VwcyhcXHBhcmFtZXRlcml6ZWQtc29ydChcIk1hcHBpbmdcIixbc29ydChcIlBhdHRlcm5cIildKSxbbGl0KFwiLFwiKV0pIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihcaXRlci1zdGFyLXNlcHMoXHBhcmFtZXRlcml6ZWQtc29ydCgiTWFwcGluZyIsW3NvcnQoIlBhdHRlcm4iKV0pLFtsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpXSkpKX0p, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixccGFyYW1ldGVyaXplZC1zb3J0KCJNYXBwaW5nIixbc29ydCgiUGF0dGVybiIpXSkpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgiXFxwYXJhbWV0ZXJpemVkLXNvcnQoXCJNYXBwaW5nXCIsW3NvcnQoXCJQYXR0ZXJuXCIpXSkiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKFxwYXJhbWV0ZXJpemVkLXNvcnQoIk1hcHBpbmciLFtzb3J0KCJQYXR0ZXJuIildKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[0] = new CharStackNode(7994, 0, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(7996, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[4] = new CharStackNode(7999, 4, new int[][]{{0,0}}, null, null); - tmp[1] = new LiteralStackNode(7995, 1, cHJvZChsaXQoIlxccGFyYW1ldGVyaXplZC1zb3J0KFwiTWFwcGluZ1wiLFtzb3J0KFwiUGF0dGVyblwiKV0pIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg5Miw5MildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEyLDExMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDksMTA5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMjIsMTIyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDAsMTAwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NSw0NSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg3Nyw3NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMywxMDMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NCw0NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTEsOTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODAsODApXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDkzLDkzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {92,112,97,114,97,109,101,116,101,114,105,122,101,100,45,115,111,114,116,40,34,77,97,112,112,105,110,103,34,44,91,115,111,114,116,40,34,80,97,116,116,101,114,110,34,41,93,41}, null, null); - tmp[3] = new ListStackNode(7998, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(7997, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[0] = new CharStackNode(7931, 0, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(7933, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[4] = new CharStackNode(7936, 4, new int[][]{{0,0}}, null, null); + tmp[1] = new LiteralStackNode(7932, 1, cHJvZChsaXQoIlxccGFyYW1ldGVyaXplZC1zb3J0KFwiTWFwcGluZ1wiLFtzb3J0KFwiUGF0dGVyblwiKV0pIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg5Miw5MildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEyLDExMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDksMTA5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMjIsMTIyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDAsMTAwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NSw0NSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg3Nyw3NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMywxMDMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NCw0NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTEsOTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODAsODApXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDkzLDkzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {92,112,97,114,97,109,101,116,101,114,105,122,101,100,45,115,111,114,116,40,34,77,97,112,112,105,110,103,34,44,91,115,111,114,116,40,34,80,97,116,116,101,114,110,34,41,93,41}, null, null); + tmp[3] = new ListStackNode(7935, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(7934, 0, new int[][]{{48,57}}, null, null), true, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixccGFyYW1ldGVyaXplZC1zb3J0KCJNYXBwaW5nIixbc29ydCgiUGF0dGVybiIpXSkpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgiXFxwYXJhbWV0ZXJpemVkLXNvcnQoXCJNYXBwaW5nXCIsW3NvcnQoXCJQYXR0ZXJuXCIpXSkiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKFxwYXJhbWV0ZXJpemVkLXNvcnQoIk1hcHBpbmciLFtzb3J0KCJQYXR0ZXJuIildKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiZGVmYXVsdCIsXHBhcmFtZXRlcml6ZWQtc29ydCgiTWFwcGluZyIsW3NvcnQoIlBhdHRlcm4iKV0pKSxbbGFiZWwoImZyb20iLGNvbmRpdGlvbmFsKHNvcnQoIlBhdHRlcm4iKSx7ZXhjZXB0KCJpZkRlZmluZWRPdGhlcndpc2UiKX0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCI6IiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJ0byIsc29ydCgiUGF0dGVybiIpKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[0] = new NonTerminalStackNode(8006, 0, "Pattern", null, null); - tmp[2] = new LiteralStackNode(8009, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[4] = new NonTerminalStackNode(8011, 4, "Pattern", null, null); - tmp[1] = new NonTerminalStackNode(8008, 1, "layouts_LAYOUTLIST", null, null); - tmp[3] = new NonTerminalStackNode(8010, 3, "layouts_LAYOUTLIST", null, null); + tmp[0] = new NonTerminalStackNode(7943, 0, "Pattern", null, null); + tmp[2] = new LiteralStackNode(7946, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[4] = new NonTerminalStackNode(7948, 4, "Pattern", null, null); + tmp[1] = new NonTerminalStackNode(7945, 1, "layouts_LAYOUTLIST", null, null); + tmp[3] = new NonTerminalStackNode(7947, 3, "layouts_LAYOUTLIST", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiZGVmYXVsdCIsXHBhcmFtZXRlcml6ZWQtc29ydCgiTWFwcGluZyIsW3NvcnQoIlBhdHRlcm4iKV0pKSxbbGFiZWwoImZyb20iLGNvbmRpdGlvbmFsKHNvcnQoIlBhdHRlcm4iKSx7ZXhjZXB0KCJpZkRlZmluZWRPdGhlcndpc2UiKX0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCI6IiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJ0byIsc29ydCgiUGF0dGVybiIpKV0se30p, tmp); } public static void init(ExpectBuilder builder){ @@ -9910,35 +9895,35 @@ protected static class Output { protected static final void _init_cHJvZChsYWJlbCgic3Rkb3V0T3V0cHV0IixsZXgoIk91dHB1dCIpKSxbY29uZGl0aW9uYWwobGl0KCLiiasiKSx7XGJlZ2luLW9mLWxpbmUoKX0pLFxpdGVyLXN0YXIoXGNoYXItY2xhc3MoW3JhbmdlKDEsOSkscmFuZ2UoMTEsMTIpLHJhbmdlKDE0LDExMTQxMTEpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgxMCwxMCldKV0se3RhZygiY2F0ZWdvcnkiKCJzdHJpbmciKSl9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[3]; - tmp[1] = new ListStackNode(8053, 1, cmVndWxhcihcaXRlci1zdGFyKFxjaGFyLWNsYXNzKFtyYW5nZSgxLDkpLHJhbmdlKDExLDEyKSxyYW5nZSgxNCwxMTE0MTExKV0pKSk00, new CharStackNode(8052, 0, new int[][]{{1,9},{11,12},{14,1114111}}, null, null), false, null, null); - tmp[2] = new CharStackNode(8054, 2, new int[][]{{10,10}}, null, null); - tmp[0] = new LiteralStackNode(8051, 0, cHJvZChsaXQoIuKJqyIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoODgxMSw4ODExKV0pXSx7fSk00, new int[] {8811}, new IEnterFilter[] {new AtStartOfLineRequirement()}, null); + tmp[1] = new ListStackNode(7990, 1, cmVndWxhcihcaXRlci1zdGFyKFxjaGFyLWNsYXNzKFtyYW5nZSgxLDkpLHJhbmdlKDExLDEyKSxyYW5nZSgxNCwxMTE0MTExKV0pKSk00, new CharStackNode(7989, 0, new int[][]{{1,9},{11,12},{14,1114111}}, null, null), false, null, null); + tmp[2] = new CharStackNode(7991, 2, new int[][]{{10,10}}, null, null); + tmp[0] = new LiteralStackNode(7988, 0, cHJvZChsaXQoIuKJqyIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoODgxMSw4ODExKV0pXSx7fSk00, new int[] {8811}, new IEnterFilter[] {new AtStartOfLineRequirement()}, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgic3Rkb3V0T3V0cHV0IixsZXgoIk91dHB1dCIpKSxbY29uZGl0aW9uYWwobGl0KCLiiasiKSx7XGJlZ2luLW9mLWxpbmUoKX0pLFxpdGVyLXN0YXIoXGNoYXItY2xhc3MoW3JhbmdlKDEsOSkscmFuZ2UoMTEsMTIpLHJhbmdlKDE0LDExMTQxMTEpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgxMCwxMCldKV0se3RhZygiY2F0ZWdvcnkiKCJzdHJpbmciKSl9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgic3RkZXJyT3V0cHV0IixsZXgoIk91dHB1dCIpKSxbY29uZGl0aW9uYWwobGl0KCLimqAiKSx7XGJlZ2luLW9mLWxpbmUoKX0pLFxpdGVyLXN0YXIoXGNoYXItY2xhc3MoW3JhbmdlKDEsOSkscmFuZ2UoMTEsMTIpLHJhbmdlKDE0LDExMTQxMTEpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgxMCwxMCldKV0se3RhZygiY2F0ZWdvcnkiKCJzdHJpbmciKSl9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[3]; - tmp[2] = new CharStackNode(8061, 2, new int[][]{{10,10}}, null, null); - tmp[0] = new LiteralStackNode(8058, 0, cHJvZChsaXQoIuKaoCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoOTg4OCw5ODg4KV0pXSx7fSk00, new int[] {9888}, new IEnterFilter[] {new AtStartOfLineRequirement()}, null); - tmp[1] = new ListStackNode(8060, 1, cmVndWxhcihcaXRlci1zdGFyKFxjaGFyLWNsYXNzKFtyYW5nZSgxLDkpLHJhbmdlKDExLDEyKSxyYW5nZSgxNCwxMTE0MTExKV0pKSk00, new CharStackNode(8059, 0, new int[][]{{1,9},{11,12},{14,1114111}}, null, null), false, null, null); + tmp[2] = new CharStackNode(7998, 2, new int[][]{{10,10}}, null, null); + tmp[0] = new LiteralStackNode(7995, 0, cHJvZChsaXQoIuKaoCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoOTg4OCw5ODg4KV0pXSx7fSk00, new int[] {9888}, new IEnterFilter[] {new AtStartOfLineRequirement()}, null); + tmp[1] = new ListStackNode(7997, 1, cmVndWxhcihcaXRlci1zdGFyKFxjaGFyLWNsYXNzKFtyYW5nZSgxLDkpLHJhbmdlKDExLDEyKSxyYW5nZSgxNCwxMTE0MTExKV0pKSk00, new CharStackNode(7996, 0, new int[][]{{1,9},{11,12},{14,1114111}}, null, null), false, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgic3RkZXJyT3V0cHV0IixsZXgoIk91dHB1dCIpKSxbY29uZGl0aW9uYWwobGl0KCLimqAiKSx7XGJlZ2luLW9mLWxpbmUoKX0pLFxpdGVyLXN0YXIoXGNoYXItY2xhc3MoW3JhbmdlKDEsOSkscmFuZ2UoMTEsMTIpLHJhbmdlKDE0LDExMTQxMTEpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgxMCwxMCldKV0se3RhZygiY2F0ZWdvcnkiKCJzdHJpbmciKSl9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIk91dHB1dCIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJPdXRwdXRcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKGxleCgiT3V0cHV0IikpKX0p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[0] = new CharStackNode(8064, 0, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(8066, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[4] = new CharStackNode(8069, 4, new int[][]{{0,0}}, null, null); - tmp[1] = new LiteralStackNode(8065, 1, cHJvZChsaXQoInNvcnQoXCJPdXRwdXRcIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNzksNzkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNywxMTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNywxMTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,79,117,116,112,117,116,34,41}, null, null); - tmp[3] = new ListStackNode(8068, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(8067, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[0] = new CharStackNode(8001, 0, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(8003, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[4] = new CharStackNode(8006, 4, new int[][]{{0,0}}, null, null); + tmp[1] = new LiteralStackNode(8002, 1, cHJvZChsaXQoInNvcnQoXCJPdXRwdXRcIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNzksNzkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNywxMTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNywxMTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,79,117,116,112,117,116,34,41}, null, null); + tmp[3] = new ListStackNode(8005, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(8004, 0, new int[][]{{48,57}}, null, null), true, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIk91dHB1dCIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJPdXRwdXRcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKGxleCgiT3V0cHV0IikpKX0p, tmp); } protected static final void _init_cHJvZChsYWJlbCgicmVzdWx0T3V0cHV0IixsZXgoIk91dHB1dCIpKSxbbGl0KCLih6giKSxcaXRlci1zdGFyKFxjaGFyLWNsYXNzKFtyYW5nZSgxLDkpLHJhbmdlKDExLDEyKSxyYW5nZSgxNCwxMTE0MTExKV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAsMTApXSldLHt0YWcoImNhdGVnb3J5Iigic3RyaW5nIikpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[3]; - tmp[0] = new LiteralStackNode(8073, 0, cHJvZChsaXQoIuKHqCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoODY4MCw4NjgwKV0pXSx7fSk00, new int[] {8680}, null, null); - tmp[2] = new CharStackNode(8076, 2, new int[][]{{10,10}}, null, null); - tmp[1] = new ListStackNode(8075, 1, cmVndWxhcihcaXRlci1zdGFyKFxjaGFyLWNsYXNzKFtyYW5nZSgxLDkpLHJhbmdlKDExLDEyKSxyYW5nZSgxNCwxMTE0MTExKV0pKSk00, new CharStackNode(8074, 0, new int[][]{{1,9},{11,12},{14,1114111}}, null, null), false, null, null); + tmp[0] = new LiteralStackNode(8010, 0, cHJvZChsaXQoIuKHqCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoODY4MCw4NjgwKV0pXSx7fSk00, new int[] {8680}, null, null); + tmp[2] = new CharStackNode(8013, 2, new int[][]{{10,10}}, null, null); + tmp[1] = new ListStackNode(8012, 1, cmVndWxhcihcaXRlci1zdGFyKFxjaGFyLWNsYXNzKFtyYW5nZSgxLDkpLHJhbmdlKDExLDEyKSxyYW5nZSgxNCwxMTE0MTExKV0pKSk00, new CharStackNode(8011, 0, new int[][]{{1,9},{11,12},{14,1114111}}, null, null), false, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgicmVzdWx0T3V0cHV0IixsZXgoIk91dHB1dCIpKSxbbGl0KCLih6giKSxcaXRlci1zdGFyKFxjaGFyLWNsYXNzKFtyYW5nZSgxLDkpLHJhbmdlKDExLDEyKSxyYW5nZSgxNCwxMTE0MTExKV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAsMTApXSldLHt0YWcoImNhdGVnb3J5Iigic3RyaW5nIikpfSk00, tmp); } public static void init(ExpectBuilder builder){ @@ -9965,29 +9950,29 @@ protected static class RationalLiteral { protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIlJhdGlvbmFsTGl0ZXJhbCIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJSYXRpb25hbExpdGVyYWxcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKGxleCgiUmF0aW9uYWxMaXRlcmFsIikpKX0p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[1] = new LiteralStackNode(8091, 1, cHJvZChsaXQoInNvcnQoXCJSYXRpb25hbExpdGVyYWxcIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODIsODIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNzYsNzYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {115,111,114,116,40,34,82,97,116,105,111,110,97,108,76,105,116,101,114,97,108,34,41}, null, null); - tmp[3] = new ListStackNode(8094, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(8093, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[2] = new LiteralStackNode(8092, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[4] = new CharStackNode(8095, 4, new int[][]{{0,0}}, null, null); - tmp[0] = new CharStackNode(8090, 0, new int[][]{{0,0}}, null, null); + tmp[1] = new LiteralStackNode(8028, 1, cHJvZChsaXQoInNvcnQoXCJSYXRpb25hbExpdGVyYWxcIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODIsODIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNzYsNzYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {115,111,114,116,40,34,82,97,116,105,111,110,97,108,76,105,116,101,114,97,108,34,41}, null, null); + tmp[3] = new ListStackNode(8031, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(8030, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[2] = new LiteralStackNode(8029, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[4] = new CharStackNode(8032, 4, new int[][]{{0,0}}, null, null); + tmp[0] = new CharStackNode(8027, 0, new int[][]{{0,0}}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIlJhdGlvbmFsTGl0ZXJhbCIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJSYXRpb25hbExpdGVyYWxcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKGxleCgiUmF0aW9uYWxMaXRlcmFsIikpKX0p, tmp); } protected static final void _init_cHJvZChsZXgoIlJhdGlvbmFsTGl0ZXJhbCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoNDksNTcpXSksXGl0ZXItc3RhcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSxjb25kaXRpb25hbChcaXRlci1zdGFyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkse1xub3QtZm9sbG93KFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NykscmFuZ2UoNjUsOTApLHJhbmdlKDk1LDk1KSxyYW5nZSg5NywxMjIpXSkpfSldLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[3] = new CharStackNode(8102, 3, new int[][]{{48,57}}, null, null); - tmp[1] = new ListStackNode(8100, 1, cmVndWxhcihcaXRlci1zdGFyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(8099, 0, new int[][]{{48,57}}, null, null), false, null, null); - tmp[4] = new ListStackNode(8106, 4, cmVndWxhcihcaXRlci1zdGFyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(8103, 0, new int[][]{{48,57}}, null, null), false, null, new ICompletionFilter[] {new CharFollowRestriction(new int[][]{{48,57},{65,90},{95,95},{97,122}})}); - tmp[2] = new CharStackNode(8101, 2, new int[][]{{114,114}}, null, null); - tmp[0] = new CharStackNode(8098, 0, new int[][]{{49,57}}, null, null); + tmp[3] = new CharStackNode(8039, 3, new int[][]{{48,57}}, null, null); + tmp[1] = new ListStackNode(8037, 1, cmVndWxhcihcaXRlci1zdGFyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(8036, 0, new int[][]{{48,57}}, null, null), false, null, null); + tmp[4] = new ListStackNode(8043, 4, cmVndWxhcihcaXRlci1zdGFyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(8040, 0, new int[][]{{48,57}}, null, null), false, null, new ICompletionFilter[] {new CharFollowRestriction(new int[][]{{48,57},{65,90},{95,95},{97,122}})}); + tmp[2] = new CharStackNode(8038, 2, new int[][]{{114,114}}, null, null); + tmp[0] = new CharStackNode(8035, 0, new int[][]{{49,57}}, null, null); builder.addAlternative(RascalParser.cHJvZChsZXgoIlJhdGlvbmFsTGl0ZXJhbCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoNDksNTcpXSksXGl0ZXItc3RhcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSxjb25kaXRpb25hbChcaXRlci1zdGFyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkse1xub3QtZm9sbG93KFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NykscmFuZ2UoNjUsOTApLHJhbmdlKDk1LDk1KSxyYW5nZSg5NywxMjIpXSkpfSldLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsZXgoIlJhdGlvbmFsTGl0ZXJhbCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSksXGl0ZXItc3RhcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[3]; - tmp[1] = new ListStackNode(8110, 1, cmVndWxhcihcaXRlci1zdGFyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(8109, 0, new int[][]{{48,57}}, null, null), false, null, null); - tmp[0] = new CharStackNode(8108, 0, new int[][]{{48,57}}, null, null); - tmp[2] = new CharStackNode(8111, 2, new int[][]{{114,114}}, null, null); + tmp[1] = new ListStackNode(8047, 1, cmVndWxhcihcaXRlci1zdGFyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(8046, 0, new int[][]{{48,57}}, null, null), false, null, null); + tmp[0] = new CharStackNode(8045, 0, new int[][]{{48,57}}, null, null); + tmp[2] = new CharStackNode(8048, 2, new int[][]{{114,114}}, null, null); builder.addAlternative(RascalParser.cHJvZChsZXgoIlJhdGlvbmFsTGl0ZXJhbCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSksXGl0ZXItc3RhcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pXSx7fSk00, tmp); } public static void init(ExpectBuilder builder){ @@ -10012,125 +9997,125 @@ protected static class BasicType { protected static final void _init_cHJvZChsYWJlbCgiaW50Iixzb3J0KCJCYXNpY1R5cGUiKSksW2xpdCgiaW50IildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(8237, 0, cHJvZChsaXQoImludCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKV0se30p, new int[] {105,110,116}, null, null); + tmp[0] = new LiteralStackNode(8174, 0, cHJvZChsaXQoImludCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKV0se30p, new int[] {105,110,116}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiaW50Iixzb3J0KCJCYXNpY1R5cGUiKSksW2xpdCgiaW50IildLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgibGlzdFJlbGF0aW9uIixzb3J0KCJCYXNpY1R5cGUiKSksW2xpdCgibHJlbCIpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(8240, 0, cHJvZChsaXQoImxyZWwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSldLHt9KQ0000, new int[] {108,114,101,108}, null, null); + tmp[0] = new LiteralStackNode(8177, 0, cHJvZChsaXQoImxyZWwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSldLHt9KQ0000, new int[] {108,114,101,108}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgibGlzdFJlbGF0aW9uIixzb3J0KCJCYXNpY1R5cGUiKSksW2xpdCgibHJlbCIpXSx7fSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiYm9vbCIsc29ydCgiQmFzaWNUeXBlIikpLFtsaXQoImJvb2wiKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(8243, 0, cHJvZChsaXQoImJvb2wiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDk4LDk4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pXSx7fSk00, new int[] {98,111,111,108}, null, null); + tmp[0] = new LiteralStackNode(8180, 0, cHJvZChsaXQoImJvb2wiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDk4LDk4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pXSx7fSk00, new int[] {98,111,111,108}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiYm9vbCIsc29ydCgiQmFzaWNUeXBlIikpLFtsaXQoImJvb2wiKV0se30p, tmp); } protected static final void _init_cHJvZChsYWJlbCgidHlwZSIsc29ydCgiQmFzaWNUeXBlIikpLFtsaXQoInR5cGUiKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(8246, 0, cHJvZChsaXQoInR5cGUiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEyMSwxMjEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSldLHt9KQ0000, new int[] {116,121,112,101}, null, null); + tmp[0] = new LiteralStackNode(8183, 0, cHJvZChsaXQoInR5cGUiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEyMSwxMjEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSldLHt9KQ0000, new int[] {116,121,112,101}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgidHlwZSIsc29ydCgiQmFzaWNUeXBlIikpLFtsaXQoInR5cGUiKV0se30p, tmp); } protected static final void _init_cHJvZChsYWJlbCgic2V0Iixzb3J0KCJCYXNpY1R5cGUiKSksW2xpdCgic2V0IildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(8249, 0, cHJvZChsaXQoInNldCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKV0se30p, new int[] {115,101,116}, null, null); + tmp[0] = new LiteralStackNode(8186, 0, cHJvZChsaXQoInNldCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKV0se30p, new int[] {115,101,116}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgic2V0Iixzb3J0KCJCYXNpY1R5cGUiKSksW2xpdCgic2V0IildLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgiYmFnIixzb3J0KCJCYXNpY1R5cGUiKSksW2xpdCgiYmFnIildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(8252, 0, cHJvZChsaXQoImJhZyIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoOTgsOTgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDMsMTAzKV0pXSx7fSk00, new int[] {98,97,103}, null, null); + tmp[0] = new LiteralStackNode(8189, 0, cHJvZChsaXQoImJhZyIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoOTgsOTgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDMsMTAzKV0pXSx7fSk00, new int[] {98,97,103}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiYmFnIixzb3J0KCJCYXNpY1R5cGUiKSksW2xpdCgiYmFnIildLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgicmF0aW9uYWwiLHNvcnQoIkJhc2ljVHlwZSIpKSxbbGl0KCJyYXQiKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(8255, 0, cHJvZChsaXQoInJhdCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSldLHt9KQ0000, new int[] {114,97,116}, null, null); + tmp[0] = new LiteralStackNode(8192, 0, cHJvZChsaXQoInJhdCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSldLHt9KQ0000, new int[] {114,97,116}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgicmF0aW9uYWwiLHNvcnQoIkJhc2ljVHlwZSIpKSxbbGl0KCJyYXQiKV0se30p, tmp); } protected static final void _init_cHJvZChsYWJlbCgicmVhbCIsc29ydCgiQmFzaWNUeXBlIikpLFtsaXQoInJlYWwiKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(8258, 0, cHJvZChsaXQoInJlYWwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pXSx7fSk00, new int[] {114,101,97,108}, null, null); + tmp[0] = new LiteralStackNode(8195, 0, cHJvZChsaXQoInJlYWwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pXSx7fSk00, new int[] {114,101,97,108}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgicmVhbCIsc29ydCgiQmFzaWNUeXBlIikpLFtsaXQoInJlYWwiKV0se30p, tmp); } protected static final void _init_cHJvZChsYWJlbCgibm9kZSIsc29ydCgiQmFzaWNUeXBlIikpLFtsaXQoIm5vZGUiKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(8261, 0, cHJvZChsaXQoIm5vZGUiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMCwxMDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSldLHt9KQ0000, new int[] {110,111,100,101}, null, null); + tmp[0] = new LiteralStackNode(8198, 0, cHJvZChsaXQoIm5vZGUiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMCwxMDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSldLHt9KQ0000, new int[] {110,111,100,101}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgibm9kZSIsc29ydCgiQmFzaWNUeXBlIikpLFtsaXQoIm5vZGUiKV0se30p, tmp); } protected static final void _init_cHJvZChsYWJlbCgidHVwbGUiLHNvcnQoIkJhc2ljVHlwZSIpKSxbbGl0KCJ0dXBsZSIpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(8264, 0, cHJvZChsaXQoInR1cGxlIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTcsMTE3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTIsMTEyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pXSx7fSk00, new int[] {116,117,112,108,101}, null, null); + tmp[0] = new LiteralStackNode(8201, 0, cHJvZChsaXQoInR1cGxlIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTcsMTE3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTIsMTEyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pXSx7fSk00, new int[] {116,117,112,108,101}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgidHVwbGUiLHNvcnQoIkJhc2ljVHlwZSIpKSxbbGl0KCJ0dXBsZSIpXSx7fSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgibWFwIixzb3J0KCJCYXNpY1R5cGUiKSksW2xpdCgibWFwIildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(8267, 0, cHJvZChsaXQoIm1hcCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSldLHt9KQ0000, new int[] {109,97,112}, null, null); + tmp[0] = new LiteralStackNode(8204, 0, cHJvZChsaXQoIm1hcCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSldLHt9KQ0000, new int[] {109,97,112}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgibWFwIixzb3J0KCJCYXNpY1R5cGUiKSksW2xpdCgibWFwIildLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJCYXNpY1R5cGUiKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJzb3J0KFwiQmFzaWNUeXBlXCIpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihzb3J0KCJCYXNpY1R5cGUiKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[1] = new LiteralStackNode(8271, 1, cHJvZChsaXQoInNvcnQoXCJCYXNpY1R5cGVcIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNjYsNjYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5OSw5OSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODQsODQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEyMSwxMjEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,66,97,115,105,99,84,121,112,101,34,41}, null, null); - tmp[3] = new ListStackNode(8274, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(8273, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[4] = new CharStackNode(8275, 4, new int[][]{{0,0}}, null, null); - tmp[0] = new CharStackNode(8270, 0, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(8272, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[1] = new LiteralStackNode(8208, 1, cHJvZChsaXQoInNvcnQoXCJCYXNpY1R5cGVcIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNjYsNjYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5OSw5OSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODQsODQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEyMSwxMjEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,66,97,115,105,99,84,121,112,101,34,41}, null, null); + tmp[3] = new ListStackNode(8211, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(8210, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[4] = new CharStackNode(8212, 4, new int[][]{{0,0}}, null, null); + tmp[0] = new CharStackNode(8207, 0, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(8209, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJCYXNpY1R5cGUiKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJzb3J0KFwiQmFzaWNUeXBlXCIpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihzb3J0KCJCYXNpY1R5cGUiKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgibG9jIixzb3J0KCJCYXNpY1R5cGUiKSksW2xpdCgibG9jIildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(8279, 0, cHJvZChsaXQoImxvYyIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTksOTkpXSldLHt9KQ0000, new int[] {108,111,99}, null, null); + tmp[0] = new LiteralStackNode(8216, 0, cHJvZChsaXQoImxvYyIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTksOTkpXSldLHt9KQ0000, new int[] {108,111,99}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgibG9jIixzb3J0KCJCYXNpY1R5cGUiKSksW2xpdCgibG9jIildLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgibnVtIixzb3J0KCJCYXNpY1R5cGUiKSksW2xpdCgibnVtIildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(8282, 0, cHJvZChsaXQoIm51bSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE3LDExNyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKV0se30p, new int[] {110,117,109}, null, null); + tmp[0] = new LiteralStackNode(8219, 0, cHJvZChsaXQoIm51bSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE3LDExNyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKV0se30p, new int[] {110,117,109}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgibnVtIixzb3J0KCJCYXNpY1R5cGUiKSksW2xpdCgibnVtIildLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgibGlzdCIsc29ydCgiQmFzaWNUeXBlIikpLFtsaXQoImxpc3QiKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(8285, 0, cHJvZChsaXQoImxpc3QiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSldLHt9KQ0000, new int[] {108,105,115,116}, null, null); + tmp[0] = new LiteralStackNode(8222, 0, cHJvZChsaXQoImxpc3QiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSldLHt9KQ0000, new int[] {108,105,115,116}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgibGlzdCIsc29ydCgiQmFzaWNUeXBlIikpLFtsaXQoImxpc3QiKV0se30p, tmp); } protected static final void _init_cHJvZChsYWJlbCgidmFsdWUiLHNvcnQoIkJhc2ljVHlwZSIpKSxbbGl0KCJ2YWx1ZSIpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(8288, 0, cHJvZChsaXQoInZhbHVlIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTgsMTE4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE3LDExNyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKV0se30p, new int[] {118,97,108,117,101}, null, null); + tmp[0] = new LiteralStackNode(8225, 0, cHJvZChsaXQoInZhbHVlIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTgsMTE4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE3LDExNyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKV0se30p, new int[] {118,97,108,117,101}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgidmFsdWUiLHNvcnQoIkJhc2ljVHlwZSIpKSxbbGl0KCJ2YWx1ZSIpXSx7fSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgidm9pZCIsc29ydCgiQmFzaWNUeXBlIikpLFtsaXQoInZvaWQiKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(8291, 0, cHJvZChsaXQoInZvaWQiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExOCwxMTgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMCwxMDApXSldLHt9KQ0000, new int[] {118,111,105,100}, null, null); + tmp[0] = new LiteralStackNode(8228, 0, cHJvZChsaXQoInZvaWQiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExOCwxMTgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMCwxMDApXSldLHt9KQ0000, new int[] {118,111,105,100}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgidm9pZCIsc29ydCgiQmFzaWNUeXBlIikpLFtsaXQoInZvaWQiKV0se30p, tmp); } protected static final void _init_cHJvZChsYWJlbCgicmVsYXRpb24iLHNvcnQoIkJhc2ljVHlwZSIpKSxbbGl0KCJyZWwiKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(8294, 0, cHJvZChsaXQoInJlbCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKV0se30p, new int[] {114,101,108}, null, null); + tmp[0] = new LiteralStackNode(8231, 0, cHJvZChsaXQoInJlbCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKV0se30p, new int[] {114,101,108}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgicmVsYXRpb24iLHNvcnQoIkJhc2ljVHlwZSIpKSxbbGl0KCJyZWwiKV0se30p, tmp); } protected static final void _init_cHJvZChsYWJlbCgiZGF0ZVRpbWUiLHNvcnQoIkJhc2ljVHlwZSIpKSxbbGl0KCJkYXRldGltZSIpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(8297, 0, cHJvZChsaXQoImRhdGV0aW1lIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMDAsMTAwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKV0se30p, new int[] {100,97,116,101,116,105,109,101}, null, null); + tmp[0] = new LiteralStackNode(8234, 0, cHJvZChsaXQoImRhdGV0aW1lIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMDAsMTAwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKV0se30p, new int[] {100,97,116,101,116,105,109,101}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiZGF0ZVRpbWUiLHNvcnQoIkJhc2ljVHlwZSIpKSxbbGl0KCJkYXRldGltZSIpXSx7fSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgic3RyaW5nIixzb3J0KCJCYXNpY1R5cGUiKSksW2xpdCgic3RyIildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(8300, 0, cHJvZChsaXQoInN0ciIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKV0se30p, new int[] {115,116,114}, null, null); + tmp[0] = new LiteralStackNode(8237, 0, cHJvZChsaXQoInN0ciIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKV0se30p, new int[] {115,116,114}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgic3RyaW5nIixzb3J0KCJCYXNpY1R5cGUiKSksW2xpdCgic3RyIildLHt9KQ0000, tmp); } public static void init(ExpectBuilder builder){ @@ -10189,27 +10174,27 @@ protected static class ProtocolTail { protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJQcm90b2NvbFRhaWwiKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJzb3J0KFwiUHJvdG9jb2xUYWlsXCIpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihzb3J0KCJQcm90b2NvbFRhaWwiKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[3] = new ListStackNode(8346, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(8345, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[1] = new LiteralStackNode(8343, 1, cHJvZChsaXQoInNvcnQoXCJQcm90b2NvbFRhaWxcIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODAsODApXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk5LDk5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4NCw4NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,80,114,111,116,111,99,111,108,84,97,105,108,34,41}, null, null); - tmp[4] = new CharStackNode(8347, 4, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(8344, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[0] = new CharStackNode(8342, 0, new int[][]{{0,0}}, null, null); + tmp[3] = new ListStackNode(8283, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(8282, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[1] = new LiteralStackNode(8280, 1, cHJvZChsaXQoInNvcnQoXCJQcm90b2NvbFRhaWxcIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODAsODApXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk5LDk5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4NCw4NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,80,114,111,116,111,99,111,108,84,97,105,108,34,41}, null, null); + tmp[4] = new CharStackNode(8284, 4, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(8281, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[0] = new CharStackNode(8279, 0, new int[][]{{0,0}}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJQcm90b2NvbFRhaWwiKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJzb3J0KFwiUHJvdG9jb2xUYWlsXCIpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihzb3J0KCJQcm90b2NvbFRhaWwiKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgibWlkIixzb3J0KCJQcm90b2NvbFRhaWwiKSksW2xhYmVsKCJtaWQiLGxleCgiTWlkUHJvdG9jb2xDaGFycyIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImV4cHJlc3Npb24iLHNvcnQoIkV4cHJlc3Npb24iKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJ0YWlsIixzb3J0KCJQcm90b2NvbFRhaWwiKSldLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[3] = new NonTerminalStackNode(8356, 3, "layouts_LAYOUTLIST", null, null); - tmp[4] = new NonTerminalStackNode(8357, 4, "ProtocolTail", null, null); - tmp[2] = new NonTerminalStackNode(8354, 2, "Expression", null, null); - tmp[0] = new NonTerminalStackNode(8351, 0, "MidProtocolChars", null, null); - tmp[1] = new NonTerminalStackNode(8353, 1, "layouts_LAYOUTLIST", null, null); + tmp[3] = new NonTerminalStackNode(8293, 3, "layouts_LAYOUTLIST", null, null); + tmp[4] = new NonTerminalStackNode(8294, 4, "ProtocolTail", null, null); + tmp[2] = new NonTerminalStackNode(8291, 2, "Expression", null, null); + tmp[0] = new NonTerminalStackNode(8288, 0, "MidProtocolChars", null, null); + tmp[1] = new NonTerminalStackNode(8290, 1, "layouts_LAYOUTLIST", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgibWlkIixzb3J0KCJQcm90b2NvbFRhaWwiKSksW2xhYmVsKCJtaWQiLGxleCgiTWlkUHJvdG9jb2xDaGFycyIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImV4cHJlc3Npb24iLHNvcnQoIkV4cHJlc3Npb24iKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJ0YWlsIixzb3J0KCJQcm90b2NvbFRhaWwiKSldLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgicG9zdCIsc29ydCgiUHJvdG9jb2xUYWlsIikpLFtsYWJlbCgicG9zdCIsbGV4KCJQb3N0UHJvdG9jb2xDaGFycyIpKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new NonTerminalStackNode(8361, 0, "PostProtocolChars", null, null); + tmp[0] = new NonTerminalStackNode(8298, 0, "PostProtocolChars", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgicG9zdCIsc29ydCgiUHJvdG9jb2xUYWlsIikpLFtsYWJlbCgicG9zdCIsbGV4KCJQb3N0UHJvdG9jb2xDaGFycyIpKV0se30p, tmp); } public static void init(ExpectBuilder builder){ @@ -10234,17 +10219,17 @@ protected static class Commands { protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJDb21tYW5kcyIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJDb21tYW5kc1wiKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoc29ydCgiQ29tbWFuZHMiKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[3] = new ListStackNode(8380, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(8379, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[1] = new LiteralStackNode(8377, 1, cHJvZChsaXQoInNvcnQoXCJDb21tYW5kc1wiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg2Nyw2NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMCwxMDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,67,111,109,109,97,110,100,115,34,41}, null, null); - tmp[0] = new CharStackNode(8376, 0, new int[][]{{0,0}}, null, null); - tmp[4] = new CharStackNode(8381, 4, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(8378, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[3] = new ListStackNode(8317, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(8316, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[1] = new LiteralStackNode(8314, 1, cHJvZChsaXQoInNvcnQoXCJDb21tYW5kc1wiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg2Nyw2NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMCwxMDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,67,111,109,109,97,110,100,115,34,41}, null, null); + tmp[0] = new CharStackNode(8313, 0, new int[][]{{0,0}}, null, null); + tmp[4] = new CharStackNode(8318, 4, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(8315, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJDb21tYW5kcyIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJDb21tYW5kc1wiKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoc29ydCgiQ29tbWFuZHMiKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiY29tbWFuZGxpc3QiLHNvcnQoIkNvbW1hbmRzIikpLFtsYWJlbCgiY29tbWFuZHMiLFxpdGVyLXNlcHMoc29ydCgiRXZhbENvbW1hbmQiKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpXSkpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new SeparatedListStackNode(8387, 0, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIkV2YWxDb21tYW5kIiksW2xheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(8385, 0, "EvalCommand", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(8386, 1, "layouts_LAYOUTLIST", null, null)}, true, null, null); + tmp[0] = new SeparatedListStackNode(8324, 0, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIkV2YWxDb21tYW5kIiksW2xheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(8322, 0, "EvalCommand", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(8323, 1, "layouts_LAYOUTLIST", null, null)}, true, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiY29tbWFuZGxpc3QiLHNvcnQoIkNvbW1hbmRzIikpLFtsYWJlbCgiY29tbWFuZHMiLFxpdGVyLXNlcHMoc29ydCgiRXZhbENvbW1hbmQiKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpXSkpXSx7fSk00, tmp); } public static void init(ExpectBuilder builder){ @@ -10267,17 +10252,17 @@ protected static class RegExpModifier { protected static final void _init_cHJvZChsZXgoIlJlZ0V4cE1vZGlmaWVyIiksW1xpdGVyLXN0YXIoXGNoYXItY2xhc3MoW3JhbmdlKDEwMCwxMDApLHJhbmdlKDEwNSwxMDUpLHJhbmdlKDEwOSwxMDkpLHJhbmdlKDExNSwxMTUpXSkpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new ListStackNode(8392, 0, cmVndWxhcihcaXRlci1zdGFyKFxjaGFyLWNsYXNzKFtyYW5nZSgxMDAsMTAwKSxyYW5nZSgxMDUsMTA1KSxyYW5nZSgxMDksMTA5KSxyYW5nZSgxMTUsMTE1KV0pKSk00, new CharStackNode(8391, 0, new int[][]{{100,100},{105,105},{109,109},{115,115}}, null, null), false, null, null); + tmp[0] = new ListStackNode(8329, 0, cmVndWxhcihcaXRlci1zdGFyKFxjaGFyLWNsYXNzKFtyYW5nZSgxMDAsMTAwKSxyYW5nZSgxMDUsMTA1KSxyYW5nZSgxMDksMTA5KSxyYW5nZSgxMTUsMTE1KV0pKSk00, new CharStackNode(8328, 0, new int[][]{{100,100},{105,105},{109,109},{115,115}}, null, null), false, null, null); builder.addAlternative(RascalParser.cHJvZChsZXgoIlJlZ0V4cE1vZGlmaWVyIiksW1xpdGVyLXN0YXIoXGNoYXItY2xhc3MoW3JhbmdlKDEwMCwxMDApLHJhbmdlKDEwNSwxMDUpLHJhbmdlKDEwOSwxMDkpLHJhbmdlKDExNSwxMTUpXSkpXSx7fSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIlJlZ0V4cE1vZGlmaWVyIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIlJlZ0V4cE1vZGlmaWVyXCIpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihsZXgoIlJlZ0V4cE1vZGlmaWVyIikpKX0p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[0] = new CharStackNode(8395, 0, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(8397, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[4] = new CharStackNode(8400, 4, new int[][]{{0,0}}, null, null); - tmp[1] = new LiteralStackNode(8396, 1, cHJvZChsaXQoInNvcnQoXCJSZWdFeHBNb2RpZmllclwiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4Miw4MildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAzLDEwMyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNjksNjkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEyMCwxMjApXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDc3LDc3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDAsMTAwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDIsMTAyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {115,111,114,116,40,34,82,101,103,69,120,112,77,111,100,105,102,105,101,114,34,41}, null, null); - tmp[3] = new ListStackNode(8399, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(8398, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[0] = new CharStackNode(8332, 0, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(8334, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[4] = new CharStackNode(8337, 4, new int[][]{{0,0}}, null, null); + tmp[1] = new LiteralStackNode(8333, 1, cHJvZChsaXQoInNvcnQoXCJSZWdFeHBNb2RpZmllclwiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4Miw4MildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAzLDEwMyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNjksNjkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEyMCwxMjApXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDc3LDc3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDAsMTAwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDIsMTAyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {115,111,114,116,40,34,82,101,103,69,120,112,77,111,100,105,102,105,101,114,34,41}, null, null); + tmp[3] = new ListStackNode(8336, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(8335, 0, new int[][]{{48,57}}, null, null), true, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIlJlZ0V4cE1vZGlmaWVyIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIlJlZ0V4cE1vZGlmaWVyXCIpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihsZXgoIlJlZ0V4cE1vZGlmaWVyIikpKX0p, tmp); } public static void init(ExpectBuilder builder){ @@ -10300,27 +10285,27 @@ protected static class CommonKeywordParameters { protected static final void _init_cHJvZChsYWJlbCgicHJlc2VudCIsc29ydCgiQ29tbW9uS2V5d29yZFBhcmFtZXRlcnMiKSksW2xpdCgiKCIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgia2V5d29yZEZvcm1hbExpc3QiLFxpdGVyLXNlcHMoc29ydCgiS2V5d29yZEZvcm1hbCIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpXSkpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIikiKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[4] = new LiteralStackNode(8414, 4, cHJvZChsaXQoIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {41}, null, null); - tmp[3] = new NonTerminalStackNode(8413, 3, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(8406, 1, "layouts_LAYOUTLIST", null, null); - tmp[2] = new SeparatedListStackNode(8411, 2, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIktleXdvcmRGb3JtYWwiKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(8407, 0, "KeywordFormal", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(8408, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(8409, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(8410, 3, "layouts_LAYOUTLIST", null, null)}, true, null, null); - tmp[0] = new LiteralStackNode(8405, 0, cHJvZChsaXQoIigiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pXSx7fSk00, new int[] {40}, null, null); + tmp[4] = new LiteralStackNode(8351, 4, cHJvZChsaXQoIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {41}, null, null); + tmp[3] = new NonTerminalStackNode(8350, 3, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(8343, 1, "layouts_LAYOUTLIST", null, null); + tmp[2] = new SeparatedListStackNode(8348, 2, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIktleXdvcmRGb3JtYWwiKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(8344, 0, "KeywordFormal", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(8345, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(8346, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(8347, 3, "layouts_LAYOUTLIST", null, null)}, true, null, null); + tmp[0] = new LiteralStackNode(8342, 0, cHJvZChsaXQoIigiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pXSx7fSk00, new int[] {40}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgicHJlc2VudCIsc29ydCgiQ29tbW9uS2V5d29yZFBhcmFtZXRlcnMiKSksW2xpdCgiKCIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgia2V5d29yZEZvcm1hbExpc3QiLFxpdGVyLXNlcHMoc29ydCgiS2V5d29yZEZvcm1hbCIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpXSkpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIikiKV0se30p, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJDb21tb25LZXl3b3JkUGFyYW1ldGVycyIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJDb21tb25LZXl3b3JkUGFyYW1ldGVyc1wiKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoc29ydCgiQ29tbW9uS2V5d29yZFBhcmFtZXRlcnMiKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[4] = new CharStackNode(8422, 4, new int[][]{{0,0}}, null, null); - tmp[1] = new LiteralStackNode(8418, 1, cHJvZChsaXQoInNvcnQoXCJDb21tb25LZXl3b3JkUGFyYW1ldGVyc1wiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg2Nyw2NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNzUsNzUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEyMSwxMjEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExOSwxMTkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMCwxMDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDgwLDgwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOSwxMDkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,67,111,109,109,111,110,75,101,121,119,111,114,100,80,97,114,97,109,101,116,101,114,115,34,41}, null, null); - tmp[3] = new ListStackNode(8421, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(8420, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[0] = new CharStackNode(8417, 0, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(8419, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[4] = new CharStackNode(8359, 4, new int[][]{{0,0}}, null, null); + tmp[1] = new LiteralStackNode(8355, 1, cHJvZChsaXQoInNvcnQoXCJDb21tb25LZXl3b3JkUGFyYW1ldGVyc1wiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg2Nyw2NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNzUsNzUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEyMSwxMjEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExOSwxMTkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMCwxMDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDgwLDgwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOSwxMDkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,67,111,109,109,111,110,75,101,121,119,111,114,100,80,97,114,97,109,101,116,101,114,115,34,41}, null, null); + tmp[3] = new ListStackNode(8358, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(8357, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[0] = new CharStackNode(8354, 0, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(8356, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJDb21tb25LZXl3b3JkUGFyYW1ldGVycyIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJDb21tb25LZXl3b3JkUGFyYW1ldGVyc1wiKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoc29ydCgiQ29tbW9uS2V5d29yZFBhcmFtZXRlcnMiKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiYWJzZW50Iixzb3J0KCJDb21tb25LZXl3b3JkUGFyYW1ldGVycyIpKSxbXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new EpsilonStackNode(8425, 0); + tmp[0] = new EpsilonStackNode(8362, 0); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiYWJzZW50Iixzb3J0KCJDb21tb25LZXl3b3JkUGFyYW1ldGVycyIpKSxbXSx7fSk00, tmp); } public static void init(ExpectBuilder builder){ @@ -10345,43 +10330,43 @@ protected static class Command { protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJDb21tYW5kIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIkNvbW1hbmRcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKHNvcnQoIkNvbW1hbmQiKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[1] = new LiteralStackNode(8454, 1, cHJvZChsaXQoInNvcnQoXCJDb21tYW5kXCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDY3LDY3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDksMTA5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDksMTA5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAwLDEwMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {115,111,114,116,40,34,67,111,109,109,97,110,100,34,41}, null, null); - tmp[3] = new ListStackNode(8457, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(8456, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[2] = new LiteralStackNode(8455, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[4] = new CharStackNode(8458, 4, new int[][]{{0,0}}, null, null); - tmp[0] = new CharStackNode(8453, 0, new int[][]{{0,0}}, null, null); + tmp[1] = new LiteralStackNode(8391, 1, cHJvZChsaXQoInNvcnQoXCJDb21tYW5kXCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDY3LDY3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDksMTA5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDksMTA5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAwLDEwMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {115,111,114,116,40,34,67,111,109,109,97,110,100,34,41}, null, null); + tmp[3] = new ListStackNode(8394, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(8393, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[2] = new LiteralStackNode(8392, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[4] = new CharStackNode(8395, 4, new int[][]{{0,0}}, null, null); + tmp[0] = new CharStackNode(8390, 0, new int[][]{{0,0}}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJDb21tYW5kIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIkNvbW1hbmRcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKHNvcnQoIkNvbW1hbmQiKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiaW1wb3J0Iixzb3J0KCJDb21tYW5kIikpLFtsYWJlbCgiaW1wb3J0ZWQiLHNvcnQoIkltcG9ydCIpKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new NonTerminalStackNode(8462, 0, "Import", null, null); + tmp[0] = new NonTerminalStackNode(8399, 0, "Import", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiaW1wb3J0Iixzb3J0KCJDb21tYW5kIikpLFtsYWJlbCgiaW1wb3J0ZWQiLHNvcnQoIkltcG9ydCIpKV0se30p, tmp); } protected static final void _init_cHJvZChsYWJlbCgiZXhwcmVzc2lvbiIsc29ydCgiQ29tbWFuZCIpKSxbbGFiZWwoImV4cHJlc3Npb24iLGNvbmRpdGlvbmFsKHNvcnQoIkV4cHJlc3Npb24iKSx7ZXhjZXB0KCJub25FbXB0eUJsb2NrIil9KSldLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new NonTerminalStackNode(8467, 0, "Expression", null, null); + tmp[0] = new NonTerminalStackNode(8404, 0, "Expression", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiZXhwcmVzc2lvbiIsc29ydCgiQ29tbWFuZCIpKSxbbGFiZWwoImV4cHJlc3Npb24iLGNvbmRpdGlvbmFsKHNvcnQoIkV4cHJlc3Npb24iKSx7ZXhjZXB0KCJub25FbXB0eUJsb2NrIil9KSldLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgic3RhdGVtZW50Iixzb3J0KCJDb21tYW5kIikpLFtsYWJlbCgic3RhdGVtZW50Iixjb25kaXRpb25hbChzb3J0KCJTdGF0ZW1lbnQiKSx7ZXhjZXB0KCJ2YXJpYWJsZURlY2xhcmF0aW9uIiksZXhjZXB0KCJ2aXNpdCIpLGV4Y2VwdCgiZnVuY3Rpb25EZWNsYXJhdGlvbiIpfSkpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new NonTerminalStackNode(8472, 0, "Statement", null, null); + tmp[0] = new NonTerminalStackNode(8409, 0, "Statement", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgic3RhdGVtZW50Iixzb3J0KCJDb21tYW5kIikpLFtsYWJlbCgic3RhdGVtZW50Iixjb25kaXRpb25hbChzb3J0KCJTdGF0ZW1lbnQiKSx7ZXhjZXB0KCJ2YXJpYWJsZURlY2xhcmF0aW9uIiksZXhjZXB0KCJ2aXNpdCIpLGV4Y2VwdCgiZnVuY3Rpb25EZWNsYXJhdGlvbiIpfSkpXSx7fSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgic2hlbGwiLHNvcnQoIkNvbW1hbmQiKSksW2xpdCgiOiIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgiY29tbWFuZCIsc29ydCgiU2hlbGxDb21tYW5kIikpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[3]; - tmp[2] = new NonTerminalStackNode(8478, 2, "ShellCommand", null, null); - tmp[0] = new LiteralStackNode(8476, 0, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[1] = new NonTerminalStackNode(8477, 1, "layouts_LAYOUTLIST", null, null); + tmp[2] = new NonTerminalStackNode(8415, 2, "ShellCommand", null, null); + tmp[0] = new LiteralStackNode(8413, 0, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[1] = new NonTerminalStackNode(8414, 1, "layouts_LAYOUTLIST", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgic2hlbGwiLHNvcnQoIkNvbW1hbmQiKSksW2xpdCgiOiIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgiY29tbWFuZCIsc29ydCgiU2hlbGxDb21tYW5kIikpXSx7fSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiZGVjbGFyYXRpb24iLHNvcnQoIkNvbW1hbmQiKSksW2xhYmVsKCJkZWNsYXJhdGlvbiIsc29ydCgiRGVjbGFyYXRpb24iKSldLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new NonTerminalStackNode(8482, 0, "Declaration", null, null); + tmp[0] = new NonTerminalStackNode(8419, 0, "Declaration", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiZGVjbGFyYXRpb24iLHNvcnQoIkNvbW1hbmQiKSksW2xhYmVsKCJkZWNsYXJhdGlvbiIsc29ydCgiRGVjbGFyYXRpb24iKSldLHt9KQ0000, tmp); } public static void init(ExpectBuilder builder){ @@ -10412,135 +10397,135 @@ protected static class StringTemplate { protected static final void _init_cHJvZChsYWJlbCgiaWZUaGVuIixzb3J0KCJTdHJpbmdUZW1wbGF0ZSIpKSxbbGl0KCJpZiIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIigiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImNvbmRpdGlvbnMiLFxpdGVyLXNlcHMoc29ydCgiRXhwcmVzc2lvbiIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpXSkpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIikiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJ7IiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJwcmVTdGF0cyIsXGl0ZXItc3Rhci1zZXBzKHNvcnQoIlN0YXRlbWVudCIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIildKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJib2R5Iixzb3J0KCJTdHJpbmdNaWRkbGUiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJwb3N0U3RhdHMiLFxpdGVyLXN0YXItc2Vwcyhzb3J0KCJTdGF0ZW1lbnQiKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpXSkpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIn0iKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[17]; - tmp[15] = new NonTerminalStackNode(8514, 15, "layouts_LAYOUTLIST", null, null); - tmp[14] = new SeparatedListStackNode(8512, 14, cmVndWxhcihcaXRlci1zdGFyLXNlcHMoc29ydCgiU3RhdGVtZW50IiksW2xheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(8510, 0, "Statement", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(8511, 1, "layouts_LAYOUTLIST", null, null)}, false, null, null); - tmp[4] = new SeparatedListStackNode(8495, 4, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIkV4cHJlc3Npb24iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(8491, 0, "Expression", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(8492, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(8493, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(8494, 3, "layouts_LAYOUTLIST", null, null)}, true, null, null); - tmp[1] = new NonTerminalStackNode(8488, 1, "layouts_LAYOUTLIST", null, null); - tmp[5] = new NonTerminalStackNode(8497, 5, "layouts_LAYOUTLIST", null, null); - tmp[7] = new NonTerminalStackNode(8499, 7, "layouts_LAYOUTLIST", null, null); - tmp[13] = new NonTerminalStackNode(8509, 13, "layouts_LAYOUTLIST", null, null); - tmp[3] = new NonTerminalStackNode(8490, 3, "layouts_LAYOUTLIST", null, null); - tmp[11] = new NonTerminalStackNode(8506, 11, "layouts_LAYOUTLIST", null, null); - tmp[8] = new LiteralStackNode(8500, 8, cHJvZChsaXQoInsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyMywxMjMpXSldLHt9KQ0000, new int[] {123}, null, null); - tmp[6] = new LiteralStackNode(8498, 6, cHJvZChsaXQoIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {41}, null, null); - tmp[2] = new LiteralStackNode(8489, 2, cHJvZChsaXQoIigiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pXSx7fSk00, new int[] {40}, null, null); - tmp[12] = new NonTerminalStackNode(8507, 12, "StringMiddle", null, null); - tmp[9] = new NonTerminalStackNode(8501, 9, "layouts_LAYOUTLIST", null, null); - tmp[16] = new LiteralStackNode(8515, 16, cHJvZChsaXQoIn0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyNSwxMjUpXSldLHt9KQ0000, new int[] {125}, null, null); - tmp[10] = new SeparatedListStackNode(8504, 10, cmVndWxhcihcaXRlci1zdGFyLXNlcHMoc29ydCgiU3RhdGVtZW50IiksW2xheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(8502, 0, "Statement", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(8503, 1, "layouts_LAYOUTLIST", null, null)}, false, null, null); - tmp[0] = new LiteralStackNode(8487, 0, cHJvZChsaXQoImlmIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDIsMTAyKV0pXSx7fSk00, new int[] {105,102}, null, null); + tmp[15] = new NonTerminalStackNode(8451, 15, "layouts_LAYOUTLIST", null, null); + tmp[14] = new SeparatedListStackNode(8449, 14, cmVndWxhcihcaXRlci1zdGFyLXNlcHMoc29ydCgiU3RhdGVtZW50IiksW2xheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(8447, 0, "Statement", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(8448, 1, "layouts_LAYOUTLIST", null, null)}, false, null, null); + tmp[4] = new SeparatedListStackNode(8432, 4, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIkV4cHJlc3Npb24iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(8428, 0, "Expression", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(8429, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(8430, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(8431, 3, "layouts_LAYOUTLIST", null, null)}, true, null, null); + tmp[1] = new NonTerminalStackNode(8425, 1, "layouts_LAYOUTLIST", null, null); + tmp[5] = new NonTerminalStackNode(8434, 5, "layouts_LAYOUTLIST", null, null); + tmp[7] = new NonTerminalStackNode(8436, 7, "layouts_LAYOUTLIST", null, null); + tmp[13] = new NonTerminalStackNode(8446, 13, "layouts_LAYOUTLIST", null, null); + tmp[3] = new NonTerminalStackNode(8427, 3, "layouts_LAYOUTLIST", null, null); + tmp[11] = new NonTerminalStackNode(8443, 11, "layouts_LAYOUTLIST", null, null); + tmp[8] = new LiteralStackNode(8437, 8, cHJvZChsaXQoInsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyMywxMjMpXSldLHt9KQ0000, new int[] {123}, null, null); + tmp[6] = new LiteralStackNode(8435, 6, cHJvZChsaXQoIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {41}, null, null); + tmp[2] = new LiteralStackNode(8426, 2, cHJvZChsaXQoIigiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pXSx7fSk00, new int[] {40}, null, null); + tmp[12] = new NonTerminalStackNode(8444, 12, "StringMiddle", null, null); + tmp[9] = new NonTerminalStackNode(8438, 9, "layouts_LAYOUTLIST", null, null); + tmp[16] = new LiteralStackNode(8452, 16, cHJvZChsaXQoIn0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyNSwxMjUpXSldLHt9KQ0000, new int[] {125}, null, null); + tmp[10] = new SeparatedListStackNode(8441, 10, cmVndWxhcihcaXRlci1zdGFyLXNlcHMoc29ydCgiU3RhdGVtZW50IiksW2xheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(8439, 0, "Statement", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(8440, 1, "layouts_LAYOUTLIST", null, null)}, false, null, null); + tmp[0] = new LiteralStackNode(8424, 0, cHJvZChsaXQoImlmIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDIsMTAyKV0pXSx7fSk00, new int[] {105,102}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiaWZUaGVuIixzb3J0KCJTdHJpbmdUZW1wbGF0ZSIpKSxbbGl0KCJpZiIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIigiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImNvbmRpdGlvbnMiLFxpdGVyLXNlcHMoc29ydCgiRXhwcmVzc2lvbiIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpXSkpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIikiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJ7IiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJwcmVTdGF0cyIsXGl0ZXItc3Rhci1zZXBzKHNvcnQoIlN0YXRlbWVudCIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIildKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJib2R5Iixzb3J0KCJTdHJpbmdNaWRkbGUiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJwb3N0U3RhdHMiLFxpdGVyLXN0YXItc2Vwcyhzb3J0KCJTdGF0ZW1lbnQiKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpXSkpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIn0iKV0se30p, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJTdHJpbmdUZW1wbGF0ZSIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJTdHJpbmdUZW1wbGF0ZVwiKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoc29ydCgiU3RyaW5nVGVtcGxhdGUiKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[3] = new ListStackNode(8522, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(8521, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[0] = new CharStackNode(8518, 0, new int[][]{{0,0}}, null, null); - tmp[1] = new LiteralStackNode(8519, 1, cHJvZChsaXQoInNvcnQoXCJTdHJpbmdUZW1wbGF0ZVwiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4Myw4MyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAzLDEwMyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODQsODQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOSwxMDkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {115,111,114,116,40,34,83,116,114,105,110,103,84,101,109,112,108,97,116,101,34,41}, null, null); - tmp[2] = new LiteralStackNode(8520, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[4] = new CharStackNode(8523, 4, new int[][]{{0,0}}, null, null); + tmp[3] = new ListStackNode(8459, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(8458, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[0] = new CharStackNode(8455, 0, new int[][]{{0,0}}, null, null); + tmp[1] = new LiteralStackNode(8456, 1, cHJvZChsaXQoInNvcnQoXCJTdHJpbmdUZW1wbGF0ZVwiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4Myw4MyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAzLDEwMyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODQsODQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOSwxMDkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {115,111,114,116,40,34,83,116,114,105,110,103,84,101,109,112,108,97,116,101,34,41}, null, null); + tmp[2] = new LiteralStackNode(8457, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[4] = new CharStackNode(8460, 4, new int[][]{{0,0}}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJTdHJpbmdUZW1wbGF0ZSIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJTdHJpbmdUZW1wbGF0ZVwiKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoc29ydCgiU3RyaW5nVGVtcGxhdGUiKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgid2hpbGUiLHNvcnQoIlN0cmluZ1RlbXBsYXRlIikpLFtsaXQoIndoaWxlIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiKCIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgiY29uZGl0aW9uIixzb3J0KCJFeHByZXNzaW9uIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIikiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJ7IiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJwcmVTdGF0cyIsXGl0ZXItc3Rhci1zZXBzKHNvcnQoIlN0YXRlbWVudCIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIildKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJib2R5Iixzb3J0KCJTdHJpbmdNaWRkbGUiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJwb3N0U3RhdHMiLFxpdGVyLXN0YXItc2Vwcyhzb3J0KCJTdGF0ZW1lbnQiKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpXSkpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIn0iKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[17]; - tmp[2] = new LiteralStackNode(8529, 2, cHJvZChsaXQoIigiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pXSx7fSk00, new int[] {40}, null, null); - tmp[15] = new NonTerminalStackNode(8550, 15, "layouts_LAYOUTLIST", null, null); - tmp[8] = new LiteralStackNode(8536, 8, cHJvZChsaXQoInsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyMywxMjMpXSldLHt9KQ0000, new int[] {123}, null, null); - tmp[13] = new NonTerminalStackNode(8545, 13, "layouts_LAYOUTLIST", null, null); - tmp[7] = new NonTerminalStackNode(8535, 7, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(8528, 1, "layouts_LAYOUTLIST", null, null); - tmp[5] = new NonTerminalStackNode(8533, 5, "layouts_LAYOUTLIST", null, null); - tmp[3] = new NonTerminalStackNode(8530, 3, "layouts_LAYOUTLIST", null, null); - tmp[11] = new NonTerminalStackNode(8542, 11, "layouts_LAYOUTLIST", null, null); - tmp[16] = new LiteralStackNode(8551, 16, cHJvZChsaXQoIn0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyNSwxMjUpXSldLHt9KQ0000, new int[] {125}, null, null); - tmp[9] = new NonTerminalStackNode(8537, 9, "layouts_LAYOUTLIST", null, null); - tmp[0] = new LiteralStackNode(8527, 0, cHJvZChsaXQoIndoaWxlIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTksMTE5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDQsMTA0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pXSx7fSk00, new int[] {119,104,105,108,101}, null, null); - tmp[10] = new SeparatedListStackNode(8540, 10, cmVndWxhcihcaXRlci1zdGFyLXNlcHMoc29ydCgiU3RhdGVtZW50IiksW2xheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(8538, 0, "Statement", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(8539, 1, "layouts_LAYOUTLIST", null, null)}, false, null, null); - tmp[6] = new LiteralStackNode(8534, 6, cHJvZChsaXQoIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {41}, null, null); - tmp[4] = new NonTerminalStackNode(8531, 4, "Expression", null, null); - tmp[14] = new SeparatedListStackNode(8548, 14, cmVndWxhcihcaXRlci1zdGFyLXNlcHMoc29ydCgiU3RhdGVtZW50IiksW2xheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(8546, 0, "Statement", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(8547, 1, "layouts_LAYOUTLIST", null, null)}, false, null, null); - tmp[12] = new NonTerminalStackNode(8543, 12, "StringMiddle", null, null); + tmp[2] = new LiteralStackNode(8466, 2, cHJvZChsaXQoIigiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pXSx7fSk00, new int[] {40}, null, null); + tmp[15] = new NonTerminalStackNode(8487, 15, "layouts_LAYOUTLIST", null, null); + tmp[8] = new LiteralStackNode(8473, 8, cHJvZChsaXQoInsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyMywxMjMpXSldLHt9KQ0000, new int[] {123}, null, null); + tmp[13] = new NonTerminalStackNode(8482, 13, "layouts_LAYOUTLIST", null, null); + tmp[7] = new NonTerminalStackNode(8472, 7, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(8465, 1, "layouts_LAYOUTLIST", null, null); + tmp[5] = new NonTerminalStackNode(8470, 5, "layouts_LAYOUTLIST", null, null); + tmp[3] = new NonTerminalStackNode(8467, 3, "layouts_LAYOUTLIST", null, null); + tmp[11] = new NonTerminalStackNode(8479, 11, "layouts_LAYOUTLIST", null, null); + tmp[16] = new LiteralStackNode(8488, 16, cHJvZChsaXQoIn0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyNSwxMjUpXSldLHt9KQ0000, new int[] {125}, null, null); + tmp[9] = new NonTerminalStackNode(8474, 9, "layouts_LAYOUTLIST", null, null); + tmp[0] = new LiteralStackNode(8464, 0, cHJvZChsaXQoIndoaWxlIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTksMTE5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDQsMTA0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pXSx7fSk00, new int[] {119,104,105,108,101}, null, null); + tmp[10] = new SeparatedListStackNode(8477, 10, cmVndWxhcihcaXRlci1zdGFyLXNlcHMoc29ydCgiU3RhdGVtZW50IiksW2xheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(8475, 0, "Statement", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(8476, 1, "layouts_LAYOUTLIST", null, null)}, false, null, null); + tmp[6] = new LiteralStackNode(8471, 6, cHJvZChsaXQoIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {41}, null, null); + tmp[4] = new NonTerminalStackNode(8468, 4, "Expression", null, null); + tmp[14] = new SeparatedListStackNode(8485, 14, cmVndWxhcihcaXRlci1zdGFyLXNlcHMoc29ydCgiU3RhdGVtZW50IiksW2xheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(8483, 0, "Statement", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(8484, 1, "layouts_LAYOUTLIST", null, null)}, false, null, null); + tmp[12] = new NonTerminalStackNode(8480, 12, "StringMiddle", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgid2hpbGUiLHNvcnQoIlN0cmluZ1RlbXBsYXRlIikpLFtsaXQoIndoaWxlIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiKCIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgiY29uZGl0aW9uIixzb3J0KCJFeHByZXNzaW9uIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIikiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJ7IiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJwcmVTdGF0cyIsXGl0ZXItc3Rhci1zZXBzKHNvcnQoIlN0YXRlbWVudCIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIildKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJib2R5Iixzb3J0KCJTdHJpbmdNaWRkbGUiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJwb3N0U3RhdHMiLFxpdGVyLXN0YXItc2Vwcyhzb3J0KCJTdGF0ZW1lbnQiKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpXSkpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIn0iKV0se30p, tmp); } protected static final void _init_cHJvZChsYWJlbCgiaWZUaGVuRWxzZSIsc29ydCgiU3RyaW5nVGVtcGxhdGUiKSksW2xpdCgiaWYiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIoIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJjb25kaXRpb25zIixcaXRlci1zZXBzKHNvcnQoIkV4cHJlc3Npb24iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIpIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgieyIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgicHJlU3RhdHNUaGVuIixcaXRlci1zdGFyLXNlcHMoc29ydCgiU3RhdGVtZW50IiksW2xheW91dHMoIkxBWU9VVExJU1QiKV0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInRoZW5TdHJpbmciLHNvcnQoIlN0cmluZ01pZGRsZSIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInBvc3RTdGF0c1RoZW4iLFxpdGVyLXN0YXItc2Vwcyhzb3J0KCJTdGF0ZW1lbnQiKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpXSkpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIn0iKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJlbHNlIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgieyIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgicHJlU3RhdHNFbHNlIixcaXRlci1zdGFyLXNlcHMoc29ydCgiU3RhdGVtZW50IiksW2xheW91dHMoIkxBWU9VVExJU1QiKV0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImVsc2VTdHJpbmciLHNvcnQoIlN0cmluZ01pZGRsZSIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInBvc3RTdGF0c0Vsc2UiLFxpdGVyLXN0YXItc2Vwcyhzb3J0KCJTdGF0ZW1lbnQiKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpXSkpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIn0iKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[29]; - tmp[19] = new NonTerminalStackNode(8585, 19, "layouts_LAYOUTLIST", null, null); - tmp[2] = new LiteralStackNode(8556, 2, cHJvZChsaXQoIigiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pXSx7fSk00, new int[] {40}, null, null); - tmp[26] = new SeparatedListStackNode(8598, 26, cmVndWxhcihcaXRlci1zdGFyLXNlcHMoc29ydCgiU3RhdGVtZW50IiksW2xheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(8596, 0, "Statement", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(8597, 1, "layouts_LAYOUTLIST", null, null)}, false, null, null); - tmp[6] = new LiteralStackNode(8565, 6, cHJvZChsaXQoIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {41}, null, null); - tmp[4] = new SeparatedListStackNode(8562, 4, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIkV4cHJlc3Npb24iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(8558, 0, "Expression", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(8559, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(8560, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(8561, 3, "layouts_LAYOUTLIST", null, null)}, true, null, null); - tmp[28] = new LiteralStackNode(8601, 28, cHJvZChsaXQoIn0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyNSwxMjUpXSldLHt9KQ0000, new int[] {125}, null, null); - tmp[14] = new SeparatedListStackNode(8579, 14, cmVndWxhcihcaXRlci1zdGFyLXNlcHMoc29ydCgiU3RhdGVtZW50IiksW2xheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(8577, 0, "Statement", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(8578, 1, "layouts_LAYOUTLIST", null, null)}, false, null, null); - tmp[12] = new NonTerminalStackNode(8574, 12, "StringMiddle", null, null); - tmp[18] = new LiteralStackNode(8584, 18, cHJvZChsaXQoImVsc2UiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSldLHt9KQ0000, new int[] {101,108,115,101}, null, null); - tmp[16] = new LiteralStackNode(8582, 16, cHJvZChsaXQoIn0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyNSwxMjUpXSldLHt9KQ0000, new int[] {125}, null, null); - tmp[9] = new NonTerminalStackNode(8568, 9, "layouts_LAYOUTLIST", null, null); - tmp[20] = new LiteralStackNode(8586, 20, cHJvZChsaXQoInsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyMywxMjMpXSldLHt9KQ0000, new int[] {123}, null, null); - tmp[23] = new NonTerminalStackNode(8592, 23, "layouts_LAYOUTLIST", null, null); - tmp[10] = new SeparatedListStackNode(8571, 10, cmVndWxhcihcaXRlci1zdGFyLXNlcHMoc29ydCgiU3RhdGVtZW50IiksW2xheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(8569, 0, "Statement", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(8570, 1, "layouts_LAYOUTLIST", null, null)}, false, null, null); - tmp[0] = new LiteralStackNode(8554, 0, cHJvZChsaXQoImlmIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDIsMTAyKV0pXSx7fSk00, new int[] {105,102}, null, null); - tmp[27] = new NonTerminalStackNode(8600, 27, "layouts_LAYOUTLIST", null, null); - tmp[13] = new NonTerminalStackNode(8576, 13, "layouts_LAYOUTLIST", null, null); - tmp[7] = new NonTerminalStackNode(8566, 7, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(8555, 1, "layouts_LAYOUTLIST", null, null); - tmp[5] = new NonTerminalStackNode(8564, 5, "layouts_LAYOUTLIST", null, null); - tmp[17] = new NonTerminalStackNode(8583, 17, "layouts_LAYOUTLIST", null, null); - tmp[3] = new NonTerminalStackNode(8557, 3, "layouts_LAYOUTLIST", null, null); - tmp[25] = new NonTerminalStackNode(8595, 25, "layouts_LAYOUTLIST", null, null); - tmp[11] = new NonTerminalStackNode(8573, 11, "layouts_LAYOUTLIST", null, null); - tmp[21] = new NonTerminalStackNode(8587, 21, "layouts_LAYOUTLIST", null, null); - tmp[24] = new NonTerminalStackNode(8593, 24, "StringMiddle", null, null); - tmp[22] = new SeparatedListStackNode(8590, 22, cmVndWxhcihcaXRlci1zdGFyLXNlcHMoc29ydCgiU3RhdGVtZW50IiksW2xheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(8588, 0, "Statement", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(8589, 1, "layouts_LAYOUTLIST", null, null)}, false, null, null); - tmp[15] = new NonTerminalStackNode(8581, 15, "layouts_LAYOUTLIST", null, null); - tmp[8] = new LiteralStackNode(8567, 8, cHJvZChsaXQoInsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyMywxMjMpXSldLHt9KQ0000, new int[] {123}, null, null); + tmp[19] = new NonTerminalStackNode(8522, 19, "layouts_LAYOUTLIST", null, null); + tmp[2] = new LiteralStackNode(8493, 2, cHJvZChsaXQoIigiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pXSx7fSk00, new int[] {40}, null, null); + tmp[26] = new SeparatedListStackNode(8535, 26, cmVndWxhcihcaXRlci1zdGFyLXNlcHMoc29ydCgiU3RhdGVtZW50IiksW2xheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(8533, 0, "Statement", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(8534, 1, "layouts_LAYOUTLIST", null, null)}, false, null, null); + tmp[6] = new LiteralStackNode(8502, 6, cHJvZChsaXQoIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {41}, null, null); + tmp[4] = new SeparatedListStackNode(8499, 4, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIkV4cHJlc3Npb24iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(8495, 0, "Expression", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(8496, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(8497, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(8498, 3, "layouts_LAYOUTLIST", null, null)}, true, null, null); + tmp[28] = new LiteralStackNode(8538, 28, cHJvZChsaXQoIn0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyNSwxMjUpXSldLHt9KQ0000, new int[] {125}, null, null); + tmp[14] = new SeparatedListStackNode(8516, 14, cmVndWxhcihcaXRlci1zdGFyLXNlcHMoc29ydCgiU3RhdGVtZW50IiksW2xheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(8514, 0, "Statement", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(8515, 1, "layouts_LAYOUTLIST", null, null)}, false, null, null); + tmp[12] = new NonTerminalStackNode(8511, 12, "StringMiddle", null, null); + tmp[18] = new LiteralStackNode(8521, 18, cHJvZChsaXQoImVsc2UiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSldLHt9KQ0000, new int[] {101,108,115,101}, null, null); + tmp[16] = new LiteralStackNode(8519, 16, cHJvZChsaXQoIn0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyNSwxMjUpXSldLHt9KQ0000, new int[] {125}, null, null); + tmp[9] = new NonTerminalStackNode(8505, 9, "layouts_LAYOUTLIST", null, null); + tmp[20] = new LiteralStackNode(8523, 20, cHJvZChsaXQoInsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyMywxMjMpXSldLHt9KQ0000, new int[] {123}, null, null); + tmp[23] = new NonTerminalStackNode(8529, 23, "layouts_LAYOUTLIST", null, null); + tmp[10] = new SeparatedListStackNode(8508, 10, cmVndWxhcihcaXRlci1zdGFyLXNlcHMoc29ydCgiU3RhdGVtZW50IiksW2xheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(8506, 0, "Statement", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(8507, 1, "layouts_LAYOUTLIST", null, null)}, false, null, null); + tmp[0] = new LiteralStackNode(8491, 0, cHJvZChsaXQoImlmIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDIsMTAyKV0pXSx7fSk00, new int[] {105,102}, null, null); + tmp[27] = new NonTerminalStackNode(8537, 27, "layouts_LAYOUTLIST", null, null); + tmp[13] = new NonTerminalStackNode(8513, 13, "layouts_LAYOUTLIST", null, null); + tmp[7] = new NonTerminalStackNode(8503, 7, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(8492, 1, "layouts_LAYOUTLIST", null, null); + tmp[5] = new NonTerminalStackNode(8501, 5, "layouts_LAYOUTLIST", null, null); + tmp[17] = new NonTerminalStackNode(8520, 17, "layouts_LAYOUTLIST", null, null); + tmp[3] = new NonTerminalStackNode(8494, 3, "layouts_LAYOUTLIST", null, null); + tmp[25] = new NonTerminalStackNode(8532, 25, "layouts_LAYOUTLIST", null, null); + tmp[11] = new NonTerminalStackNode(8510, 11, "layouts_LAYOUTLIST", null, null); + tmp[21] = new NonTerminalStackNode(8524, 21, "layouts_LAYOUTLIST", null, null); + tmp[24] = new NonTerminalStackNode(8530, 24, "StringMiddle", null, null); + tmp[22] = new SeparatedListStackNode(8527, 22, cmVndWxhcihcaXRlci1zdGFyLXNlcHMoc29ydCgiU3RhdGVtZW50IiksW2xheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(8525, 0, "Statement", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(8526, 1, "layouts_LAYOUTLIST", null, null)}, false, null, null); + tmp[15] = new NonTerminalStackNode(8518, 15, "layouts_LAYOUTLIST", null, null); + tmp[8] = new LiteralStackNode(8504, 8, cHJvZChsaXQoInsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyMywxMjMpXSldLHt9KQ0000, new int[] {123}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiaWZUaGVuRWxzZSIsc29ydCgiU3RyaW5nVGVtcGxhdGUiKSksW2xpdCgiaWYiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIoIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJjb25kaXRpb25zIixcaXRlci1zZXBzKHNvcnQoIkV4cHJlc3Npb24iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIpIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgieyIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgicHJlU3RhdHNUaGVuIixcaXRlci1zdGFyLXNlcHMoc29ydCgiU3RhdGVtZW50IiksW2xheW91dHMoIkxBWU9VVExJU1QiKV0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInRoZW5TdHJpbmciLHNvcnQoIlN0cmluZ01pZGRsZSIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInBvc3RTdGF0c1RoZW4iLFxpdGVyLXN0YXItc2Vwcyhzb3J0KCJTdGF0ZW1lbnQiKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpXSkpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIn0iKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJlbHNlIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgieyIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgicHJlU3RhdHNFbHNlIixcaXRlci1zdGFyLXNlcHMoc29ydCgiU3RhdGVtZW50IiksW2xheW91dHMoIkxBWU9VVExJU1QiKV0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImVsc2VTdHJpbmciLHNvcnQoIlN0cmluZ01pZGRsZSIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInBvc3RTdGF0c0Vsc2UiLFxpdGVyLXN0YXItc2Vwcyhzb3J0KCJTdGF0ZW1lbnQiKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpXSkpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIn0iKV0se30p, tmp); } protected static final void _init_cHJvZChsYWJlbCgiZG9XaGlsZSIsc29ydCgiU3RyaW5nVGVtcGxhdGUiKSksW2xpdCgiZG8iKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJ7IiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJwcmVTdGF0cyIsXGl0ZXItc3Rhci1zZXBzKHNvcnQoIlN0YXRlbWVudCIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIildKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJib2R5Iixzb3J0KCJTdHJpbmdNaWRkbGUiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJwb3N0U3RhdHMiLFxpdGVyLXN0YXItc2Vwcyhzb3J0KCJTdGF0ZW1lbnQiKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpXSkpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIn0iKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJ3aGlsZSIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIigiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImNvbmRpdGlvbiIsc29ydCgiRXhwcmVzc2lvbiIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIpIildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[19]; - tmp[2] = new LiteralStackNode(8606, 2, cHJvZChsaXQoInsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyMywxMjMpXSldLHt9KQ0000, new int[] {123}, null, null); - tmp[6] = new NonTerminalStackNode(8613, 6, "StringMiddle", null, null); - tmp[4] = new SeparatedListStackNode(8610, 4, cmVndWxhcihcaXRlci1zdGFyLXNlcHMoc29ydCgiU3RhdGVtZW50IiksW2xheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(8608, 0, "Statement", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(8609, 1, "layouts_LAYOUTLIST", null, null)}, false, null, null); - tmp[14] = new LiteralStackNode(8625, 14, cHJvZChsaXQoIigiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pXSx7fSk00, new int[] {40}, null, null); - tmp[18] = new LiteralStackNode(8630, 18, cHJvZChsaXQoIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {41}, null, null); - tmp[12] = new LiteralStackNode(8623, 12, cHJvZChsaXQoIndoaWxlIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTksMTE5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDQsMTA0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pXSx7fSk00, new int[] {119,104,105,108,101}, null, null); - tmp[16] = new NonTerminalStackNode(8627, 16, "Expression", null, null); - tmp[9] = new NonTerminalStackNode(8620, 9, "layouts_LAYOUTLIST", null, null); - tmp[10] = new LiteralStackNode(8621, 10, cHJvZChsaXQoIn0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyNSwxMjUpXSldLHt9KQ0000, new int[] {125}, null, null); - tmp[0] = new LiteralStackNode(8604, 0, cHJvZChsaXQoImRvIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMDAsMTAwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pXSx7fSk00, new int[] {100,111}, null, null); - tmp[13] = new NonTerminalStackNode(8624, 13, "layouts_LAYOUTLIST", null, null); - tmp[7] = new NonTerminalStackNode(8615, 7, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(8605, 1, "layouts_LAYOUTLIST", null, null); - tmp[5] = new NonTerminalStackNode(8612, 5, "layouts_LAYOUTLIST", null, null); - tmp[3] = new NonTerminalStackNode(8607, 3, "layouts_LAYOUTLIST", null, null); - tmp[11] = new NonTerminalStackNode(8622, 11, "layouts_LAYOUTLIST", null, null); - tmp[17] = new NonTerminalStackNode(8629, 17, "layouts_LAYOUTLIST", null, null); - tmp[15] = new NonTerminalStackNode(8626, 15, "layouts_LAYOUTLIST", null, null); - tmp[8] = new SeparatedListStackNode(8618, 8, cmVndWxhcihcaXRlci1zdGFyLXNlcHMoc29ydCgiU3RhdGVtZW50IiksW2xheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(8616, 0, "Statement", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(8617, 1, "layouts_LAYOUTLIST", null, null)}, false, null, null); + tmp[2] = new LiteralStackNode(8543, 2, cHJvZChsaXQoInsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyMywxMjMpXSldLHt9KQ0000, new int[] {123}, null, null); + tmp[6] = new NonTerminalStackNode(8550, 6, "StringMiddle", null, null); + tmp[4] = new SeparatedListStackNode(8547, 4, cmVndWxhcihcaXRlci1zdGFyLXNlcHMoc29ydCgiU3RhdGVtZW50IiksW2xheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(8545, 0, "Statement", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(8546, 1, "layouts_LAYOUTLIST", null, null)}, false, null, null); + tmp[14] = new LiteralStackNode(8562, 14, cHJvZChsaXQoIigiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pXSx7fSk00, new int[] {40}, null, null); + tmp[18] = new LiteralStackNode(8567, 18, cHJvZChsaXQoIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {41}, null, null); + tmp[12] = new LiteralStackNode(8560, 12, cHJvZChsaXQoIndoaWxlIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTksMTE5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDQsMTA0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pXSx7fSk00, new int[] {119,104,105,108,101}, null, null); + tmp[16] = new NonTerminalStackNode(8564, 16, "Expression", null, null); + tmp[9] = new NonTerminalStackNode(8557, 9, "layouts_LAYOUTLIST", null, null); + tmp[10] = new LiteralStackNode(8558, 10, cHJvZChsaXQoIn0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyNSwxMjUpXSldLHt9KQ0000, new int[] {125}, null, null); + tmp[0] = new LiteralStackNode(8541, 0, cHJvZChsaXQoImRvIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMDAsMTAwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pXSx7fSk00, new int[] {100,111}, null, null); + tmp[13] = new NonTerminalStackNode(8561, 13, "layouts_LAYOUTLIST", null, null); + tmp[7] = new NonTerminalStackNode(8552, 7, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(8542, 1, "layouts_LAYOUTLIST", null, null); + tmp[5] = new NonTerminalStackNode(8549, 5, "layouts_LAYOUTLIST", null, null); + tmp[3] = new NonTerminalStackNode(8544, 3, "layouts_LAYOUTLIST", null, null); + tmp[11] = new NonTerminalStackNode(8559, 11, "layouts_LAYOUTLIST", null, null); + tmp[17] = new NonTerminalStackNode(8566, 17, "layouts_LAYOUTLIST", null, null); + tmp[15] = new NonTerminalStackNode(8563, 15, "layouts_LAYOUTLIST", null, null); + tmp[8] = new SeparatedListStackNode(8555, 8, cmVndWxhcihcaXRlci1zdGFyLXNlcHMoc29ydCgiU3RhdGVtZW50IiksW2xheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(8553, 0, "Statement", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(8554, 1, "layouts_LAYOUTLIST", null, null)}, false, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiZG9XaGlsZSIsc29ydCgiU3RyaW5nVGVtcGxhdGUiKSksW2xpdCgiZG8iKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJ7IiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJwcmVTdGF0cyIsXGl0ZXItc3Rhci1zZXBzKHNvcnQoIlN0YXRlbWVudCIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIildKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJib2R5Iixzb3J0KCJTdHJpbmdNaWRkbGUiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJwb3N0U3RhdHMiLFxpdGVyLXN0YXItc2Vwcyhzb3J0KCJTdGF0ZW1lbnQiKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpXSkpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIn0iKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJ3aGlsZSIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIigiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImNvbmRpdGlvbiIsc29ydCgiRXhwcmVzc2lvbiIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIpIildLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgiZm9yIixzb3J0KCJTdHJpbmdUZW1wbGF0ZSIpKSxbbGl0KCJmb3IiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIoIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJnZW5lcmF0b3JzIixcaXRlci1zZXBzKHNvcnQoIkV4cHJlc3Npb24iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIpIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgieyIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgicHJlU3RhdHMiLFxpdGVyLXN0YXItc2Vwcyhzb3J0KCJTdGF0ZW1lbnQiKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpXSkpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgiYm9keSIsc29ydCgiU3RyaW5nTWlkZGxlIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgicG9zdFN0YXRzIixcaXRlci1zdGFyLXNlcHMoc29ydCgiU3RhdGVtZW50IiksW2xheW91dHMoIkxBWU9VVExJU1QiKV0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJ9IildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[17]; - tmp[2] = new LiteralStackNode(8635, 2, cHJvZChsaXQoIigiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pXSx7fSk00, new int[] {40}, null, null); - tmp[6] = new LiteralStackNode(8644, 6, cHJvZChsaXQoIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {41}, null, null); - tmp[4] = new SeparatedListStackNode(8641, 4, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIkV4cHJlc3Npb24iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(8637, 0, "Expression", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(8638, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(8639, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(8640, 3, "layouts_LAYOUTLIST", null, null)}, true, null, null); - tmp[14] = new SeparatedListStackNode(8658, 14, cmVndWxhcihcaXRlci1zdGFyLXNlcHMoc29ydCgiU3RhdGVtZW50IiksW2xheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(8656, 0, "Statement", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(8657, 1, "layouts_LAYOUTLIST", null, null)}, false, null, null); - tmp[12] = new NonTerminalStackNode(8653, 12, "StringMiddle", null, null); - tmp[16] = new LiteralStackNode(8661, 16, cHJvZChsaXQoIn0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyNSwxMjUpXSldLHt9KQ0000, new int[] {125}, null, null); - tmp[9] = new NonTerminalStackNode(8647, 9, "layouts_LAYOUTLIST", null, null); - tmp[10] = new SeparatedListStackNode(8650, 10, cmVndWxhcihcaXRlci1zdGFyLXNlcHMoc29ydCgiU3RhdGVtZW50IiksW2xheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(8648, 0, "Statement", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(8649, 1, "layouts_LAYOUTLIST", null, null)}, false, null, null); - tmp[0] = new LiteralStackNode(8633, 0, cHJvZChsaXQoImZvciIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTAyLDEwMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKV0se30p, new int[] {102,111,114}, null, null); - tmp[13] = new NonTerminalStackNode(8655, 13, "layouts_LAYOUTLIST", null, null); - tmp[7] = new NonTerminalStackNode(8645, 7, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(8634, 1, "layouts_LAYOUTLIST", null, null); - tmp[5] = new NonTerminalStackNode(8643, 5, "layouts_LAYOUTLIST", null, null); - tmp[3] = new NonTerminalStackNode(8636, 3, "layouts_LAYOUTLIST", null, null); - tmp[11] = new NonTerminalStackNode(8652, 11, "layouts_LAYOUTLIST", null, null); - tmp[15] = new NonTerminalStackNode(8660, 15, "layouts_LAYOUTLIST", null, null); - tmp[8] = new LiteralStackNode(8646, 8, cHJvZChsaXQoInsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyMywxMjMpXSldLHt9KQ0000, new int[] {123}, null, null); + tmp[2] = new LiteralStackNode(8572, 2, cHJvZChsaXQoIigiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pXSx7fSk00, new int[] {40}, null, null); + tmp[6] = new LiteralStackNode(8581, 6, cHJvZChsaXQoIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {41}, null, null); + tmp[4] = new SeparatedListStackNode(8578, 4, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIkV4cHJlc3Npb24iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(8574, 0, "Expression", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(8575, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(8576, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(8577, 3, "layouts_LAYOUTLIST", null, null)}, true, null, null); + tmp[14] = new SeparatedListStackNode(8595, 14, cmVndWxhcihcaXRlci1zdGFyLXNlcHMoc29ydCgiU3RhdGVtZW50IiksW2xheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(8593, 0, "Statement", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(8594, 1, "layouts_LAYOUTLIST", null, null)}, false, null, null); + tmp[12] = new NonTerminalStackNode(8590, 12, "StringMiddle", null, null); + tmp[16] = new LiteralStackNode(8598, 16, cHJvZChsaXQoIn0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyNSwxMjUpXSldLHt9KQ0000, new int[] {125}, null, null); + tmp[9] = new NonTerminalStackNode(8584, 9, "layouts_LAYOUTLIST", null, null); + tmp[10] = new SeparatedListStackNode(8587, 10, cmVndWxhcihcaXRlci1zdGFyLXNlcHMoc29ydCgiU3RhdGVtZW50IiksW2xheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(8585, 0, "Statement", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(8586, 1, "layouts_LAYOUTLIST", null, null)}, false, null, null); + tmp[0] = new LiteralStackNode(8570, 0, cHJvZChsaXQoImZvciIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTAyLDEwMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKV0se30p, new int[] {102,111,114}, null, null); + tmp[13] = new NonTerminalStackNode(8592, 13, "layouts_LAYOUTLIST", null, null); + tmp[7] = new NonTerminalStackNode(8582, 7, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(8571, 1, "layouts_LAYOUTLIST", null, null); + tmp[5] = new NonTerminalStackNode(8580, 5, "layouts_LAYOUTLIST", null, null); + tmp[3] = new NonTerminalStackNode(8573, 3, "layouts_LAYOUTLIST", null, null); + tmp[11] = new NonTerminalStackNode(8589, 11, "layouts_LAYOUTLIST", null, null); + tmp[15] = new NonTerminalStackNode(8597, 15, "layouts_LAYOUTLIST", null, null); + tmp[8] = new LiteralStackNode(8583, 8, cHJvZChsaXQoInsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyMywxMjMpXSldLHt9KQ0000, new int[] {123}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiZm9yIixzb3J0KCJTdHJpbmdUZW1wbGF0ZSIpKSxbbGl0KCJmb3IiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIoIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJnZW5lcmF0b3JzIixcaXRlci1zZXBzKHNvcnQoIkV4cHJlc3Npb24iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIpIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgieyIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgicHJlU3RhdHMiLFxpdGVyLXN0YXItc2Vwcyhzb3J0KCJTdGF0ZW1lbnQiKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpXSkpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgiYm9keSIsc29ydCgiU3RyaW5nTWlkZGxlIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgicG9zdFN0YXRzIixcaXRlci1zdGFyLXNlcHMoc29ydCgiU3RhdGVtZW50IiksW2xheW91dHMoIkxBWU9VVExJU1QiKV0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJ9IildLHt9KQ0000, tmp); } public static void init(ExpectBuilder builder){ @@ -10571,49 +10556,49 @@ protected static class Visit { protected static final void _init_cHJvZChsYWJlbCgiZGVmYXVsdFN0cmF0ZWd5Iixzb3J0KCJWaXNpdCIpKSxbbGl0KCJ2aXNpdCIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIigiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInN1YmplY3QiLHNvcnQoIkV4cHJlc3Npb24iKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiKSIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoInsiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImNhc2VzIixcaXRlci1zZXBzKHNvcnQoIkNhc2UiKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpXSkpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIn0iKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[13]; - tmp[8] = new LiteralStackNode(8714, 8, cHJvZChsaXQoInsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyMywxMjMpXSldLHt9KQ0000, new int[] {123}, null, null); - tmp[7] = new NonTerminalStackNode(8713, 7, "layouts_LAYOUTLIST", null, null); - tmp[9] = new NonTerminalStackNode(8715, 9, "layouts_LAYOUTLIST", null, null); - tmp[2] = new LiteralStackNode(8707, 2, cHJvZChsaXQoIigiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pXSx7fSk00, new int[] {40}, null, null); - tmp[12] = new LiteralStackNode(8721, 12, cHJvZChsaXQoIn0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyNSwxMjUpXSldLHt9KQ0000, new int[] {125}, null, null); - tmp[5] = new NonTerminalStackNode(8711, 5, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(8706, 1, "layouts_LAYOUTLIST", null, null); - tmp[11] = new NonTerminalStackNode(8720, 11, "layouts_LAYOUTLIST", null, null); - tmp[3] = new NonTerminalStackNode(8708, 3, "layouts_LAYOUTLIST", null, null); - tmp[0] = new LiteralStackNode(8705, 0, cHJvZChsaXQoInZpc2l0IiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTgsMTE4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pXSx7fSk00, new int[] {118,105,115,105,116}, null, null); - tmp[10] = new SeparatedListStackNode(8718, 10, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIkNhc2UiKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpXSkp, new NonTerminalStackNode(8716, 0, "Case", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(8717, 1, "layouts_LAYOUTLIST", null, null)}, true, null, null); - tmp[6] = new LiteralStackNode(8712, 6, cHJvZChsaXQoIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {41}, null, null); - tmp[4] = new NonTerminalStackNode(8709, 4, "Expression", null, null); + tmp[8] = new LiteralStackNode(8651, 8, cHJvZChsaXQoInsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyMywxMjMpXSldLHt9KQ0000, new int[] {123}, null, null); + tmp[7] = new NonTerminalStackNode(8650, 7, "layouts_LAYOUTLIST", null, null); + tmp[9] = new NonTerminalStackNode(8652, 9, "layouts_LAYOUTLIST", null, null); + tmp[2] = new LiteralStackNode(8644, 2, cHJvZChsaXQoIigiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pXSx7fSk00, new int[] {40}, null, null); + tmp[12] = new LiteralStackNode(8658, 12, cHJvZChsaXQoIn0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyNSwxMjUpXSldLHt9KQ0000, new int[] {125}, null, null); + tmp[5] = new NonTerminalStackNode(8648, 5, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(8643, 1, "layouts_LAYOUTLIST", null, null); + tmp[11] = new NonTerminalStackNode(8657, 11, "layouts_LAYOUTLIST", null, null); + tmp[3] = new NonTerminalStackNode(8645, 3, "layouts_LAYOUTLIST", null, null); + tmp[0] = new LiteralStackNode(8642, 0, cHJvZChsaXQoInZpc2l0IiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTgsMTE4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pXSx7fSk00, new int[] {118,105,115,105,116}, null, null); + tmp[10] = new SeparatedListStackNode(8655, 10, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIkNhc2UiKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpXSkp, new NonTerminalStackNode(8653, 0, "Case", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(8654, 1, "layouts_LAYOUTLIST", null, null)}, true, null, null); + tmp[6] = new LiteralStackNode(8649, 6, cHJvZChsaXQoIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {41}, null, null); + tmp[4] = new NonTerminalStackNode(8646, 4, "Expression", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiZGVmYXVsdFN0cmF0ZWd5Iixzb3J0KCJWaXNpdCIpKSxbbGl0KCJ2aXNpdCIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIigiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInN1YmplY3QiLHNvcnQoIkV4cHJlc3Npb24iKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiKSIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoInsiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImNhc2VzIixcaXRlci1zZXBzKHNvcnQoIkNhc2UiKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpXSkpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIn0iKV0se30p, tmp); } protected static final void _init_cHJvZChsYWJlbCgiZ2l2ZW5TdHJhdGVneSIsc29ydCgiVmlzaXQiKSksW2xhYmVsKCJzdHJhdGVneSIsc29ydCgiU3RyYXRlZ3kiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgidmlzaXQiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIoIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJzdWJqZWN0Iixzb3J0KCJFeHByZXNzaW9uIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIikiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJ7IiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJjYXNlcyIsXGl0ZXItc2Vwcyhzb3J0KCJDYXNlIiksW2xheW91dHMoIkxBWU9VVExJU1QiKV0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJ9IildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[15]; - tmp[8] = new LiteralStackNode(8734, 8, cHJvZChsaXQoIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {41}, null, null); - tmp[13] = new NonTerminalStackNode(8742, 13, "layouts_LAYOUTLIST", null, null); - tmp[7] = new NonTerminalStackNode(8733, 7, "layouts_LAYOUTLIST", null, null); - tmp[9] = new NonTerminalStackNode(8735, 9, "layouts_LAYOUTLIST", null, null); - tmp[4] = new LiteralStackNode(8729, 4, cHJvZChsaXQoIigiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pXSx7fSk00, new int[] {40}, null, null); - tmp[12] = new SeparatedListStackNode(8740, 12, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIkNhc2UiKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpXSkp, new NonTerminalStackNode(8738, 0, "Case", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(8739, 1, "layouts_LAYOUTLIST", null, null)}, true, null, null); - tmp[2] = new LiteralStackNode(8727, 2, cHJvZChsaXQoInZpc2l0IiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTgsMTE4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pXSx7fSk00, new int[] {118,105,115,105,116}, null, null); - tmp[6] = new NonTerminalStackNode(8731, 6, "Expression", null, null); - tmp[3] = new NonTerminalStackNode(8728, 3, "layouts_LAYOUTLIST", null, null); - tmp[11] = new NonTerminalStackNode(8737, 11, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(8726, 1, "layouts_LAYOUTLIST", null, null); - tmp[5] = new NonTerminalStackNode(8730, 5, "layouts_LAYOUTLIST", null, null); - tmp[10] = new LiteralStackNode(8736, 10, cHJvZChsaXQoInsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyMywxMjMpXSldLHt9KQ0000, new int[] {123}, null, null); - tmp[0] = new NonTerminalStackNode(8724, 0, "Strategy", null, null); - tmp[14] = new LiteralStackNode(8743, 14, cHJvZChsaXQoIn0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyNSwxMjUpXSldLHt9KQ0000, new int[] {125}, null, null); + tmp[8] = new LiteralStackNode(8671, 8, cHJvZChsaXQoIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {41}, null, null); + tmp[13] = new NonTerminalStackNode(8679, 13, "layouts_LAYOUTLIST", null, null); + tmp[7] = new NonTerminalStackNode(8670, 7, "layouts_LAYOUTLIST", null, null); + tmp[9] = new NonTerminalStackNode(8672, 9, "layouts_LAYOUTLIST", null, null); + tmp[4] = new LiteralStackNode(8666, 4, cHJvZChsaXQoIigiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pXSx7fSk00, new int[] {40}, null, null); + tmp[12] = new SeparatedListStackNode(8677, 12, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIkNhc2UiKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpXSkp, new NonTerminalStackNode(8675, 0, "Case", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(8676, 1, "layouts_LAYOUTLIST", null, null)}, true, null, null); + tmp[2] = new LiteralStackNode(8664, 2, cHJvZChsaXQoInZpc2l0IiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTgsMTE4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pXSx7fSk00, new int[] {118,105,115,105,116}, null, null); + tmp[6] = new NonTerminalStackNode(8668, 6, "Expression", null, null); + tmp[3] = new NonTerminalStackNode(8665, 3, "layouts_LAYOUTLIST", null, null); + tmp[11] = new NonTerminalStackNode(8674, 11, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(8663, 1, "layouts_LAYOUTLIST", null, null); + tmp[5] = new NonTerminalStackNode(8667, 5, "layouts_LAYOUTLIST", null, null); + tmp[10] = new LiteralStackNode(8673, 10, cHJvZChsaXQoInsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyMywxMjMpXSldLHt9KQ0000, new int[] {123}, null, null); + tmp[0] = new NonTerminalStackNode(8661, 0, "Strategy", null, null); + tmp[14] = new LiteralStackNode(8680, 14, cHJvZChsaXQoIn0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyNSwxMjUpXSldLHt9KQ0000, new int[] {125}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiZ2l2ZW5TdHJhdGVneSIsc29ydCgiVmlzaXQiKSksW2xhYmVsKCJzdHJhdGVneSIsc29ydCgiU3RyYXRlZ3kiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgidmlzaXQiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIoIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJzdWJqZWN0Iixzb3J0KCJFeHByZXNzaW9uIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIikiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJ7IiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJjYXNlcyIsXGl0ZXItc2Vwcyhzb3J0KCJDYXNlIiksW2xheW91dHMoIkxBWU9VVExJU1QiKV0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJ9IildLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJWaXNpdCIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJWaXNpdFwiKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoc29ydCgiVmlzaXQiKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[0] = new CharStackNode(8746, 0, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(8748, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[4] = new CharStackNode(8751, 4, new int[][]{{0,0}}, null, null); - tmp[1] = new LiteralStackNode(8747, 1, cHJvZChsaXQoInNvcnQoXCJWaXNpdFwiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4Niw4NildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {115,111,114,116,40,34,86,105,115,105,116,34,41}, null, null); - tmp[3] = new ListStackNode(8750, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(8749, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[0] = new CharStackNode(8683, 0, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(8685, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[4] = new CharStackNode(8688, 4, new int[][]{{0,0}}, null, null); + tmp[1] = new LiteralStackNode(8684, 1, cHJvZChsaXQoInNvcnQoXCJWaXNpdFwiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4Niw4NildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {115,111,114,116,40,34,86,105,115,105,116,34,41}, null, null); + tmp[3] = new ListStackNode(8687, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(8686, 0, new int[][]{{48,57}}, null, null), true, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJWaXNpdCIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJWaXNpdFwiKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoc29ydCgiVmlzaXQiKSkpfSk00, tmp); } public static void init(ExpectBuilder builder){ @@ -10638,23 +10623,23 @@ protected static class StructuredType { protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJTdHJ1Y3R1cmVkVHlwZSIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJTdHJ1Y3R1cmVkVHlwZVwiKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoc29ydCgiU3RydWN0dXJlZFR5cGUiKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[3] = new ListStackNode(8764, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(8763, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[0] = new CharStackNode(8760, 0, new int[][]{{0,0}}, null, null); - tmp[4] = new CharStackNode(8765, 4, new int[][]{{0,0}}, null, null); - tmp[1] = new LiteralStackNode(8761, 1, cHJvZChsaXQoInNvcnQoXCJTdHJ1Y3R1cmVkVHlwZVwiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4Myw4MyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE3LDExNyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTksOTkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNywxMTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMCwxMDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDg0LDg0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMjEsMTIxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTIsMTEyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {115,111,114,116,40,34,83,116,114,117,99,116,117,114,101,100,84,121,112,101,34,41}, null, null); - tmp[2] = new LiteralStackNode(8762, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[3] = new ListStackNode(8701, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(8700, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[0] = new CharStackNode(8697, 0, new int[][]{{0,0}}, null, null); + tmp[4] = new CharStackNode(8702, 4, new int[][]{{0,0}}, null, null); + tmp[1] = new LiteralStackNode(8698, 1, cHJvZChsaXQoInNvcnQoXCJTdHJ1Y3R1cmVkVHlwZVwiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4Myw4MyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE3LDExNyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTksOTkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNywxMTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMCwxMDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDg0LDg0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMjEsMTIxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTIsMTEyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {115,111,114,116,40,34,83,116,114,117,99,116,117,114,101,100,84,121,112,101,34,41}, null, null); + tmp[2] = new LiteralStackNode(8699, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJTdHJ1Y3R1cmVkVHlwZSIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJTdHJ1Y3R1cmVkVHlwZVwiKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoc29ydCgiU3RydWN0dXJlZFR5cGUiKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiZGVmYXVsdCIsc29ydCgiU3RydWN0dXJlZFR5cGUiKSksW2xhYmVsKCJiYXNpY1R5cGUiLHNvcnQoIkJhc2ljVHlwZSIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJbIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJhcmd1bWVudHMiLFxpdGVyLXNlcHMoc29ydCgiVHlwZUFyZyIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpXSkpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIl0iKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[7]; - tmp[0] = new NonTerminalStackNode(8769, 0, "BasicType", null, null); - tmp[6] = new LiteralStackNode(8781, 6, cHJvZChsaXQoIl0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkzLDkzKV0pXSx7fSk00, new int[] {93}, null, null); - tmp[4] = new SeparatedListStackNode(8778, 4, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIlR5cGVBcmciKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(8774, 0, "TypeArg", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(8775, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(8776, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(8777, 3, "layouts_LAYOUTLIST", null, null)}, true, null, null); - tmp[3] = new NonTerminalStackNode(8773, 3, "layouts_LAYOUTLIST", null, null); - tmp[2] = new LiteralStackNode(8772, 2, cHJvZChsaXQoIlsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkxLDkxKV0pXSx7fSk00, new int[] {91}, null, null); - tmp[1] = new NonTerminalStackNode(8771, 1, "layouts_LAYOUTLIST", null, null); - tmp[5] = new NonTerminalStackNode(8780, 5, "layouts_LAYOUTLIST", null, null); + tmp[0] = new NonTerminalStackNode(8706, 0, "BasicType", null, null); + tmp[6] = new LiteralStackNode(8718, 6, cHJvZChsaXQoIl0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkzLDkzKV0pXSx7fSk00, new int[] {93}, null, null); + tmp[4] = new SeparatedListStackNode(8715, 4, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIlR5cGVBcmciKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(8711, 0, "TypeArg", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(8712, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(8713, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(8714, 3, "layouts_LAYOUTLIST", null, null)}, true, null, null); + tmp[3] = new NonTerminalStackNode(8710, 3, "layouts_LAYOUTLIST", null, null); + tmp[2] = new LiteralStackNode(8709, 2, cHJvZChsaXQoIlsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkxLDkxKV0pXSx7fSk00, new int[] {91}, null, null); + tmp[1] = new NonTerminalStackNode(8708, 1, "layouts_LAYOUTLIST", null, null); + tmp[5] = new NonTerminalStackNode(8717, 5, "layouts_LAYOUTLIST", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiZGVmYXVsdCIsc29ydCgiU3RydWN0dXJlZFR5cGUiKSksW2xhYmVsKCJiYXNpY1R5cGUiLHNvcnQoIkJhc2ljVHlwZSIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJbIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJhcmd1bWVudHMiLFxpdGVyLXNlcHMoc29ydCgiVHlwZUFyZyIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpXSkpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIl0iKV0se30p, tmp); } public static void init(ExpectBuilder builder){ @@ -10677,27 +10662,27 @@ protected static class ProtocolPart { protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJQcm90b2NvbFBhcnQiKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJzb3J0KFwiUHJvdG9jb2xQYXJ0XCIpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihzb3J0KCJQcm90b2NvbFBhcnQiKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[3] = new ListStackNode(8918, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(8917, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[1] = new LiteralStackNode(8915, 1, cHJvZChsaXQoInNvcnQoXCJQcm90b2NvbFBhcnRcIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODAsODApXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk5LDk5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4MCw4MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,80,114,111,116,111,99,111,108,80,97,114,116,34,41}, null, null); - tmp[4] = new CharStackNode(8919, 4, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(8916, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[0] = new CharStackNode(8914, 0, new int[][]{{0,0}}, null, null); + tmp[3] = new ListStackNode(8855, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(8854, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[1] = new LiteralStackNode(8852, 1, cHJvZChsaXQoInNvcnQoXCJQcm90b2NvbFBhcnRcIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODAsODApXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk5LDk5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4MCw4MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,80,114,111,116,111,99,111,108,80,97,114,116,34,41}, null, null); + tmp[4] = new CharStackNode(8856, 4, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(8853, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[0] = new CharStackNode(8851, 0, new int[][]{{0,0}}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJQcm90b2NvbFBhcnQiKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJzb3J0KFwiUHJvdG9jb2xQYXJ0XCIpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihzb3J0KCJQcm90b2NvbFBhcnQiKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiaW50ZXJwb2xhdGVkIixzb3J0KCJQcm90b2NvbFBhcnQiKSksW2xhYmVsKCJwcmUiLGxleCgiUHJlUHJvdG9jb2xDaGFycyIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImV4cHJlc3Npb24iLHNvcnQoIkV4cHJlc3Npb24iKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJ0YWlsIixzb3J0KCJQcm90b2NvbFRhaWwiKSldLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[2] = new NonTerminalStackNode(8926, 2, "Expression", null, null); - tmp[0] = new NonTerminalStackNode(8923, 0, "PreProtocolChars", null, null); - tmp[3] = new NonTerminalStackNode(8928, 3, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(8925, 1, "layouts_LAYOUTLIST", null, null); - tmp[4] = new NonTerminalStackNode(8929, 4, "ProtocolTail", null, null); + tmp[2] = new NonTerminalStackNode(8863, 2, "Expression", null, null); + tmp[0] = new NonTerminalStackNode(8860, 0, "PreProtocolChars", null, null); + tmp[3] = new NonTerminalStackNode(8865, 3, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(8862, 1, "layouts_LAYOUTLIST", null, null); + tmp[4] = new NonTerminalStackNode(8866, 4, "ProtocolTail", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiaW50ZXJwb2xhdGVkIixzb3J0KCJQcm90b2NvbFBhcnQiKSksW2xhYmVsKCJwcmUiLGxleCgiUHJlUHJvdG9jb2xDaGFycyIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImV4cHJlc3Npb24iLHNvcnQoIkV4cHJlc3Npb24iKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJ0YWlsIixzb3J0KCJQcm90b2NvbFRhaWwiKSldLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgibm9uSW50ZXJwb2xhdGVkIixzb3J0KCJQcm90b2NvbFBhcnQiKSksW2xhYmVsKCJwcm90b2NvbENoYXJzIixsZXgoIlByb3RvY29sQ2hhcnMiKSldLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new NonTerminalStackNode(8933, 0, "ProtocolChars", null, null); + tmp[0] = new NonTerminalStackNode(8870, 0, "ProtocolChars", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgibm9uSW50ZXJwb2xhdGVkIixzb3J0KCJQcm90b2NvbFBhcnQiKSksW2xhYmVsKCJwcm90b2NvbENoYXJzIixsZXgoIlByb3RvY29sQ2hhcnMiKSldLHt9KQ0000, tmp); } public static void init(ExpectBuilder builder){ @@ -10722,37 +10707,37 @@ protected static class Parameters { protected static final void _init_cHJvZChsYWJlbCgiZGVmYXVsdCIsc29ydCgiUGFyYW1ldGVycyIpKSxbbGl0KCIoIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJmb3JtYWxzIixzb3J0KCJGb3JtYWxzIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgia2V5d29yZEZvcm1hbHMiLHNvcnQoIktleXdvcmRGb3JtYWxzIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIikiKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[7]; - tmp[3] = new NonTerminalStackNode(9091, 3, "layouts_LAYOUTLIST", null, null); - tmp[6] = new LiteralStackNode(9095, 6, cHJvZChsaXQoIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {41}, null, null); - tmp[4] = new NonTerminalStackNode(9092, 4, "KeywordFormals", null, null); - tmp[1] = new NonTerminalStackNode(9088, 1, "layouts_LAYOUTLIST", null, null); - tmp[5] = new NonTerminalStackNode(9094, 5, "layouts_LAYOUTLIST", null, null); - tmp[0] = new LiteralStackNode(9087, 0, cHJvZChsaXQoIigiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pXSx7fSk00, new int[] {40}, null, null); - tmp[2] = new NonTerminalStackNode(9089, 2, "Formals", null, null); + tmp[3] = new NonTerminalStackNode(9028, 3, "layouts_LAYOUTLIST", null, null); + tmp[6] = new LiteralStackNode(9032, 6, cHJvZChsaXQoIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {41}, null, null); + tmp[4] = new NonTerminalStackNode(9029, 4, "KeywordFormals", null, null); + tmp[1] = new NonTerminalStackNode(9025, 1, "layouts_LAYOUTLIST", null, null); + tmp[5] = new NonTerminalStackNode(9031, 5, "layouts_LAYOUTLIST", null, null); + tmp[0] = new LiteralStackNode(9024, 0, cHJvZChsaXQoIigiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pXSx7fSk00, new int[] {40}, null, null); + tmp[2] = new NonTerminalStackNode(9026, 2, "Formals", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiZGVmYXVsdCIsc29ydCgiUGFyYW1ldGVycyIpKSxbbGl0KCIoIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJmb3JtYWxzIixzb3J0KCJGb3JtYWxzIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgia2V5d29yZEZvcm1hbHMiLHNvcnQoIktleXdvcmRGb3JtYWxzIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIikiKV0se30p, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJQYXJhbWV0ZXJzIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIlBhcmFtZXRlcnNcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKHNvcnQoIlBhcmFtZXRlcnMiKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[3] = new ListStackNode(9102, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(9101, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[1] = new LiteralStackNode(9099, 1, cHJvZChsaXQoInNvcnQoXCJQYXJhbWV0ZXJzXCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDgwLDgwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOSwxMDkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,80,97,114,97,109,101,116,101,114,115,34,41}, null, null); - tmp[0] = new CharStackNode(9098, 0, new int[][]{{0,0}}, null, null); - tmp[4] = new CharStackNode(9103, 4, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(9100, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[3] = new ListStackNode(9039, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(9038, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[1] = new LiteralStackNode(9036, 1, cHJvZChsaXQoInNvcnQoXCJQYXJhbWV0ZXJzXCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDgwLDgwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOSwxMDkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,80,97,114,97,109,101,116,101,114,115,34,41}, null, null); + tmp[0] = new CharStackNode(9035, 0, new int[][]{{0,0}}, null, null); + tmp[4] = new CharStackNode(9040, 4, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(9037, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJQYXJhbWV0ZXJzIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIlBhcmFtZXRlcnNcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKHNvcnQoIlBhcmFtZXRlcnMiKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgidmFyQXJncyIsc29ydCgiUGFyYW1ldGVycyIpKSxbbGl0KCIoIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJmb3JtYWxzIixzb3J0KCJGb3JtYWxzIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIi4uLiIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgia2V5d29yZEZvcm1hbHMiLHNvcnQoIktleXdvcmRGb3JtYWxzIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIikiKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[9]; - tmp[4] = new LiteralStackNode(9112, 4, cHJvZChsaXQoIi4uLiIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoNDYsNDYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ2LDQ2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0Niw0NildKV0se30p, new int[] {46,46,46}, null, null); - tmp[2] = new NonTerminalStackNode(9109, 2, "Formals", null, null); - tmp[6] = new NonTerminalStackNode(9114, 6, "KeywordFormals", null, null); - tmp[3] = new NonTerminalStackNode(9111, 3, "layouts_LAYOUTLIST", null, null); - tmp[7] = new NonTerminalStackNode(9116, 7, "layouts_LAYOUTLIST", null, null); - tmp[0] = new LiteralStackNode(9107, 0, cHJvZChsaXQoIigiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pXSx7fSk00, new int[] {40}, null, null); - tmp[1] = new NonTerminalStackNode(9108, 1, "layouts_LAYOUTLIST", null, null); - tmp[5] = new NonTerminalStackNode(9113, 5, "layouts_LAYOUTLIST", null, null); - tmp[8] = new LiteralStackNode(9117, 8, cHJvZChsaXQoIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {41}, null, null); + tmp[4] = new LiteralStackNode(9049, 4, cHJvZChsaXQoIi4uLiIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoNDYsNDYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ2LDQ2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0Niw0NildKV0se30p, new int[] {46,46,46}, null, null); + tmp[2] = new NonTerminalStackNode(9046, 2, "Formals", null, null); + tmp[6] = new NonTerminalStackNode(9051, 6, "KeywordFormals", null, null); + tmp[3] = new NonTerminalStackNode(9048, 3, "layouts_LAYOUTLIST", null, null); + tmp[7] = new NonTerminalStackNode(9053, 7, "layouts_LAYOUTLIST", null, null); + tmp[0] = new LiteralStackNode(9044, 0, cHJvZChsaXQoIigiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pXSx7fSk00, new int[] {40}, null, null); + tmp[1] = new NonTerminalStackNode(9045, 1, "layouts_LAYOUTLIST", null, null); + tmp[5] = new NonTerminalStackNode(9050, 5, "layouts_LAYOUTLIST", null, null); + tmp[8] = new LiteralStackNode(9054, 8, cHJvZChsaXQoIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {41}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgidmFyQXJncyIsc29ydCgiUGFyYW1ldGVycyIpKSxbbGl0KCIoIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJmb3JtYWxzIixzb3J0KCJGb3JtYWxzIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIi4uLiIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgia2V5d29yZEZvcm1hbHMiLHNvcnQoIktleXdvcmRGb3JtYWxzIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIikiKV0se30p, tmp); } public static void init(ExpectBuilder builder){ @@ -10777,25 +10762,25 @@ protected static class KeywordArguments_W3NvcnQoIlBhdHRlcm4iKV000 { protected static final void _init_cHJvZChsYWJlbCgiZGVmYXVsdCIsXHBhcmFtZXRlcml6ZWQtc29ydCgiS2V5d29yZEFyZ3VtZW50cyIsW3NvcnQoIlBhdHRlcm4iKV0pKSxbbGFiZWwoIm9wdGlvbmFsQ29tbWEiLGxleCgiT3B0aW9uYWxDb21tYSIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksY29uZGl0aW9uYWwobGFiZWwoImtleXdvcmRBcmd1bWVudExpc3QiLFxpdGVyLXNlcHMoXHBhcmFtZXRlcml6ZWQtc29ydCgiS2V5d29yZEFyZ3VtZW50Iixbc29ydCgiUGF0dGVybiIpXSksW2xheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIiwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIildKSkse3ByZWNlZGUoXGNoYXItY2xhc3MoW3JhbmdlKDksMTApLHJhbmdlKDMyLDMyKSxyYW5nZSg0MCw0MCkscmFuZ2UoNDQsNDQpXSkpfSldLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[3]; - tmp[1] = new NonTerminalStackNode(9146, 1, "layouts_LAYOUTLIST", null, null); - tmp[2] = new SeparatedListStackNode(9155, 2, cmVndWxhcihcaXRlci1zZXBzKFxwYXJhbWV0ZXJpemVkLXNvcnQoIktleXdvcmRBcmd1bWVudCIsW3NvcnQoIlBhdHRlcm4iKV0pLFtsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpXSkp, new NonTerminalStackNode(9148, 0, "KeywordArgument_W3NvcnQoIlBhdHRlcm4iKV000", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(9149, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(9150, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(9151, 3, "layouts_LAYOUTLIST", null, null)}, true, new IEnterFilter[] {new CharPrecedeRequirement(new int[][]{{9,10},{32,32},{40,40},{44,44}})}, null); - tmp[0] = new NonTerminalStackNode(9144, 0, "OptionalComma", null, null); + tmp[1] = new NonTerminalStackNode(9083, 1, "layouts_LAYOUTLIST", null, null); + tmp[2] = new SeparatedListStackNode(9092, 2, cmVndWxhcihcaXRlci1zZXBzKFxwYXJhbWV0ZXJpemVkLXNvcnQoIktleXdvcmRBcmd1bWVudCIsW3NvcnQoIlBhdHRlcm4iKV0pLFtsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpXSkp, new NonTerminalStackNode(9085, 0, "KeywordArgument_W3NvcnQoIlBhdHRlcm4iKV000", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(9086, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(9087, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(9088, 3, "layouts_LAYOUTLIST", null, null)}, true, new IEnterFilter[] {new CharPrecedeRequirement(new int[][]{{9,10},{32,32},{40,40},{44,44}})}, null); + tmp[0] = new NonTerminalStackNode(9081, 0, "OptionalComma", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiZGVmYXVsdCIsXHBhcmFtZXRlcml6ZWQtc29ydCgiS2V5d29yZEFyZ3VtZW50cyIsW3NvcnQoIlBhdHRlcm4iKV0pKSxbbGFiZWwoIm9wdGlvbmFsQ29tbWEiLGxleCgiT3B0aW9uYWxDb21tYSIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksY29uZGl0aW9uYWwobGFiZWwoImtleXdvcmRBcmd1bWVudExpc3QiLFxpdGVyLXNlcHMoXHBhcmFtZXRlcml6ZWQtc29ydCgiS2V5d29yZEFyZ3VtZW50Iixbc29ydCgiUGF0dGVybiIpXSksW2xheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIiwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIildKSkse3ByZWNlZGUoXGNoYXItY2xhc3MoW3JhbmdlKDksMTApLHJhbmdlKDMyLDMyKSxyYW5nZSg0MCw0MCkscmFuZ2UoNDQsNDQpXSkpfSldLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixccGFyYW1ldGVyaXplZC1zb3J0KCJLZXl3b3JkQXJndW1lbnRzIixbc29ydCgiUGF0dGVybiIpXSkpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgiXFxwYXJhbWV0ZXJpemVkLXNvcnQoXCJLZXl3b3JkQXJndW1lbnRzXCIsW3NvcnQoXCJQYXR0ZXJuXCIpXSkiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKFxwYXJhbWV0ZXJpemVkLXNvcnQoIktleXdvcmRBcmd1bWVudHMiLFtzb3J0KCJQYXR0ZXJuIildKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[2] = new LiteralStackNode(9161, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[4] = new CharStackNode(9164, 4, new int[][]{{0,0}}, null, null); - tmp[0] = new CharStackNode(9159, 0, new int[][]{{0,0}}, null, null); - tmp[1] = new LiteralStackNode(9160, 1, cHJvZChsaXQoIlxccGFyYW1ldGVyaXplZC1zb3J0KFwiS2V5d29yZEFyZ3VtZW50c1wiLFtzb3J0KFwiUGF0dGVyblwiKV0pIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg5Miw5MildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEyLDExMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDksMTA5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMjIsMTIyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDAsMTAwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NSw0NSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg3NSw3NSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTIxLDEyMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE5LDExOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAwLDEwMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNjUsNjUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMywxMDMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNywxMTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOSwxMDkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NCw0NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTEsOTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODAsODApXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDkzLDkzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {92,112,97,114,97,109,101,116,101,114,105,122,101,100,45,115,111,114,116,40,34,75,101,121,119,111,114,100,65,114,103,117,109,101,110,116,115,34,44,91,115,111,114,116,40,34,80,97,116,116,101,114,110,34,41,93,41}, null, null); - tmp[3] = new ListStackNode(9163, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(9162, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[2] = new LiteralStackNode(9098, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[4] = new CharStackNode(9101, 4, new int[][]{{0,0}}, null, null); + tmp[0] = new CharStackNode(9096, 0, new int[][]{{0,0}}, null, null); + tmp[1] = new LiteralStackNode(9097, 1, cHJvZChsaXQoIlxccGFyYW1ldGVyaXplZC1zb3J0KFwiS2V5d29yZEFyZ3VtZW50c1wiLFtzb3J0KFwiUGF0dGVyblwiKV0pIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg5Miw5MildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEyLDExMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDksMTA5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMjIsMTIyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDAsMTAwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NSw0NSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg3NSw3NSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTIxLDEyMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE5LDExOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAwLDEwMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNjUsNjUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMywxMDMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNywxMTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOSwxMDkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NCw0NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTEsOTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODAsODApXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDkzLDkzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {92,112,97,114,97,109,101,116,101,114,105,122,101,100,45,115,111,114,116,40,34,75,101,121,119,111,114,100,65,114,103,117,109,101,110,116,115,34,44,91,115,111,114,116,40,34,80,97,116,116,101,114,110,34,41,93,41}, null, null); + tmp[3] = new ListStackNode(9100, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(9099, 0, new int[][]{{48,57}}, null, null), true, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixccGFyYW1ldGVyaXplZC1zb3J0KCJLZXl3b3JkQXJndW1lbnRzIixbc29ydCgiUGF0dGVybiIpXSkpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgiXFxwYXJhbWV0ZXJpemVkLXNvcnQoXCJLZXl3b3JkQXJndW1lbnRzXCIsW3NvcnQoXCJQYXR0ZXJuXCIpXSkiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKFxwYXJhbWV0ZXJpemVkLXNvcnQoIktleXdvcmRBcmd1bWVudHMiLFtzb3J0KCJQYXR0ZXJuIildKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgibm9uZSIsXHBhcmFtZXRlcml6ZWQtc29ydCgiS2V5d29yZEFyZ3VtZW50cyIsW3NvcnQoIlBhdHRlcm4iKV0pKSxbXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new EpsilonStackNode(9169, 0); + tmp[0] = new EpsilonStackNode(9106, 0); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgibm9uZSIsXHBhcmFtZXRlcml6ZWQtc29ydCgiS2V5d29yZEFyZ3VtZW50cyIsW3NvcnQoIlBhdHRlcm4iKV0pKSxbXSx7fSk00, tmp); } public static void init(ExpectBuilder builder){ @@ -10820,24 +10805,24 @@ protected static class DecimalIntegerLiteral { protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIkRlY2ltYWxJbnRlZ2VyTGl0ZXJhbCIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJEZWNpbWFsSW50ZWdlckxpdGVyYWxcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKGxleCgiRGVjaW1hbEludGVnZXJMaXRlcmFsIikpKX0p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[3] = new ListStackNode(9177, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(9176, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[1] = new LiteralStackNode(9174, 1, cHJvZChsaXQoInNvcnQoXCJEZWNpbWFsSW50ZWdlckxpdGVyYWxcIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNjgsNjgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk5LDk5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDksMTA5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNzMsNzMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMywxMDMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDc2LDc2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {115,111,114,116,40,34,68,101,99,105,109,97,108,73,110,116,101,103,101,114,76,105,116,101,114,97,108,34,41}, null, null); - tmp[0] = new CharStackNode(9173, 0, new int[][]{{0,0}}, null, null); - tmp[4] = new CharStackNode(9178, 4, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(9175, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[3] = new ListStackNode(9114, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(9113, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[1] = new LiteralStackNode(9111, 1, cHJvZChsaXQoInNvcnQoXCJEZWNpbWFsSW50ZWdlckxpdGVyYWxcIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNjgsNjgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk5LDk5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDksMTA5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNzMsNzMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMywxMDMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDc2LDc2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {115,111,114,116,40,34,68,101,99,105,109,97,108,73,110,116,101,103,101,114,76,105,116,101,114,97,108,34,41}, null, null); + tmp[0] = new CharStackNode(9110, 0, new int[][]{{0,0}}, null, null); + tmp[4] = new CharStackNode(9115, 4, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(9112, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIkRlY2ltYWxJbnRlZ2VyTGl0ZXJhbCIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJEZWNpbWFsSW50ZWdlckxpdGVyYWxcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKGxleCgiRGVjaW1hbEludGVnZXJMaXRlcmFsIikpKX0p, tmp); } protected static final void _init_cHJvZChsZXgoIkRlY2ltYWxJbnRlZ2VyTGl0ZXJhbCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoNDksNTcpXSksY29uZGl0aW9uYWwoXGl0ZXItc3RhcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLHtcbm90LWZvbGxvdyhcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpLHJhbmdlKDY1LDkwKSxyYW5nZSg5NSw5NSkscmFuZ2UoOTcsMTIyKV0pKX0pXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[2]; - tmp[0] = new CharStackNode(9181, 0, new int[][]{{49,57}}, null, null); - tmp[1] = new ListStackNode(9185, 1, cmVndWxhcihcaXRlci1zdGFyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(9182, 0, new int[][]{{48,57}}, null, null), false, null, new ICompletionFilter[] {new CharFollowRestriction(new int[][]{{48,57},{65,90},{95,95},{97,122}})}); + tmp[0] = new CharStackNode(9118, 0, new int[][]{{49,57}}, null, null); + tmp[1] = new ListStackNode(9122, 1, cmVndWxhcihcaXRlci1zdGFyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(9119, 0, new int[][]{{48,57}}, null, null), false, null, new ICompletionFilter[] {new CharFollowRestriction(new int[][]{{48,57},{65,90},{95,95},{97,122}})}); builder.addAlternative(RascalParser.cHJvZChsZXgoIkRlY2ltYWxJbnRlZ2VyTGl0ZXJhbCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoNDksNTcpXSksY29uZGl0aW9uYWwoXGl0ZXItc3RhcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLHtcbm90LWZvbGxvdyhcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpLHJhbmdlKDY1LDkwKSxyYW5nZSg5NSw5NSkscmFuZ2UoOTcsMTIyKV0pKX0pXSx7fSk00, tmp); } protected static final void _init_cHJvZChsZXgoIkRlY2ltYWxJbnRlZ2VyTGl0ZXJhbCIpLFtjb25kaXRpb25hbChsaXQoIjAiKSx7XG5vdC1mb2xsb3coXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KSxyYW5nZSg2NSw5MCkscmFuZ2UoOTUsOTUpLHJhbmdlKDk3LDEyMildKSl9KV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(9189, 0, cHJvZChsaXQoIjAiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDQ4KV0pXSx7fSk00, new int[] {48}, null, new ICompletionFilter[] {new CharFollowRestriction(new int[][]{{48,57},{65,90},{95,95},{97,122}})}); + tmp[0] = new LiteralStackNode(9126, 0, cHJvZChsaXQoIjAiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDQ4KV0pXSx7fSk00, new int[] {48}, null, new ICompletionFilter[] {new CharFollowRestriction(new int[][]{{48,57},{65,90},{95,95},{97,122}})}); builder.addAlternative(RascalParser.cHJvZChsZXgoIkRlY2ltYWxJbnRlZ2VyTGl0ZXJhbCIpLFtjb25kaXRpb25hbChsaXQoIjAiKSx7XG5vdC1mb2xsb3coXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KSxyYW5nZSg2NSw5MCkscmFuZ2UoOTUsOTUpLHJhbmdlKDk3LDEyMildKSl9KV0se30p, tmp); } public static void init(ExpectBuilder builder){ @@ -10862,48 +10847,48 @@ protected static class NamedRegExp { protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIk5hbWVkUmVnRXhwIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgiXFxpdGVyLXN0YXIoc29ydChcIk5hbWVkUmVnRXhwXCIpKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoXGl0ZXItc3RhcihsZXgoIk5hbWVkUmVnRXhwIikpKSl9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[1] = new LiteralStackNode(9292, 1, cHJvZChsaXQoIlxcaXRlci1zdGFyKHNvcnQoXCJOYW1lZFJlZ0V4cFwiKSkiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkyLDkyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NSw0NSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDc4LDc4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAwLDEwMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODIsODIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMywxMDMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDY5LDY5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMjAsMTIwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTIsMTEyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {92,105,116,101,114,45,115,116,97,114,40,115,111,114,116,40,34,78,97,109,101,100,82,101,103,69,120,112,34,41,41}, null, null); - tmp[4] = new CharStackNode(9296, 4, new int[][]{{0,0}}, null, null); - tmp[0] = new CharStackNode(9291, 0, new int[][]{{0,0}}, null, null); - tmp[3] = new ListStackNode(9295, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(9294, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[2] = new LiteralStackNode(9293, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[1] = new LiteralStackNode(9229, 1, cHJvZChsaXQoIlxcaXRlci1zdGFyKHNvcnQoXCJOYW1lZFJlZ0V4cFwiKSkiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkyLDkyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NSw0NSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDc4LDc4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAwLDEwMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODIsODIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMywxMDMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDY5LDY5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMjAsMTIwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTIsMTEyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {92,105,116,101,114,45,115,116,97,114,40,115,111,114,116,40,34,78,97,109,101,100,82,101,103,69,120,112,34,41,41}, null, null); + tmp[4] = new CharStackNode(9233, 4, new int[][]{{0,0}}, null, null); + tmp[0] = new CharStackNode(9228, 0, new int[][]{{0,0}}, null, null); + tmp[3] = new ListStackNode(9232, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(9231, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[2] = new LiteralStackNode(9230, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIk5hbWVkUmVnRXhwIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgiXFxpdGVyLXN0YXIoc29ydChcIk5hbWVkUmVnRXhwXCIpKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoXGl0ZXItc3RhcihsZXgoIk5hbWVkUmVnRXhwIikpKSl9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIk5hbWVkUmVnRXhwIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIk5hbWVkUmVnRXhwXCIpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihsZXgoIk5hbWVkUmVnRXhwIikpKX0p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[4] = new CharStackNode(9306, 4, new int[][]{{0,0}}, null, null); - tmp[0] = new CharStackNode(9301, 0, new int[][]{{0,0}}, null, null); - tmp[1] = new LiteralStackNode(9302, 1, cHJvZChsaXQoInNvcnQoXCJOYW1lZFJlZ0V4cFwiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg3OCw3OCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOSwxMDkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMCwxMDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDgyLDgyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDMsMTAzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg2OSw2OSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTIwLDEyMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEyLDExMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {115,111,114,116,40,34,78,97,109,101,100,82,101,103,69,120,112,34,41}, null, null); - tmp[2] = new LiteralStackNode(9303, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[3] = new ListStackNode(9305, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(9304, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[4] = new CharStackNode(9243, 4, new int[][]{{0,0}}, null, null); + tmp[0] = new CharStackNode(9238, 0, new int[][]{{0,0}}, null, null); + tmp[1] = new LiteralStackNode(9239, 1, cHJvZChsaXQoInNvcnQoXCJOYW1lZFJlZ0V4cFwiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg3OCw3OCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOSwxMDkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMCwxMDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDgyLDgyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDMsMTAzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg2OSw2OSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTIwLDEyMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEyLDExMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {115,111,114,116,40,34,78,97,109,101,100,82,101,103,69,120,112,34,41}, null, null); + tmp[2] = new LiteralStackNode(9240, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[3] = new ListStackNode(9242, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(9241, 0, new int[][]{{48,57}}, null, null), true, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIk5hbWVkUmVnRXhwIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIk5hbWVkUmVnRXhwXCIpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihsZXgoIk5hbWVkUmVnRXhwIikpKX0p, tmp); } protected static final void _init_cHJvZChsZXgoIk5hbWVkUmVnRXhwIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg5Miw5MildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDcsNDcpLHJhbmdlKDYwLDYwKSxyYW5nZSg2Miw2MikscmFuZ2UoOTIsOTIpXSldLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[2]; - tmp[0] = new CharStackNode(9309, 0, new int[][]{{92,92}}, null, null); - tmp[1] = new CharStackNode(9310, 1, new int[][]{{47,47},{60,60},{62,62},{92,92}}, null, null); + tmp[0] = new CharStackNode(9246, 0, new int[][]{{92,92}}, null, null); + tmp[1] = new CharStackNode(9247, 1, new int[][]{{47,47},{60,60},{62,62},{92,92}}, null, null); builder.addAlternative(RascalParser.cHJvZChsZXgoIk5hbWVkUmVnRXhwIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg5Miw5MildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDcsNDcpLHJhbmdlKDYwLDYwKSxyYW5nZSg2Miw2MikscmFuZ2UoOTIsOTIpXSldLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsZXgoIk5hbWVkUmVnRXhwIiksW2xpdCgiXDwiKSxsZXgoIk5hbWUiKSxsaXQoIlw11IildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[3]; - tmp[0] = new LiteralStackNode(9312, 0, cHJvZChsaXQoIlw8IiksW1xjaGFyLWNsYXNzKFtyYW5nZSg2MCw2MCldKV0se30p, new int[] {60}, null, null); - tmp[2] = new LiteralStackNode(9314, 2, cHJvZChsaXQoIlw11IiksW1xjaGFyLWNsYXNzKFtyYW5nZSg2Miw2MildKV0se30p, new int[] {62}, null, null); - tmp[1] = new NonTerminalStackNode(9313, 1, "Name", null, null); + tmp[0] = new LiteralStackNode(9249, 0, cHJvZChsaXQoIlw8IiksW1xjaGFyLWNsYXNzKFtyYW5nZSg2MCw2MCldKV0se30p, new int[] {60}, null, null); + tmp[2] = new LiteralStackNode(9251, 2, cHJvZChsaXQoIlw11IiksW1xjaGFyLWNsYXNzKFtyYW5nZSg2Miw2MildKV0se30p, new int[] {62}, null, null); + tmp[1] = new NonTerminalStackNode(9250, 1, "Name", null, null); builder.addAlternative(RascalParser.cHJvZChsZXgoIk5hbWVkUmVnRXhwIiksW2xpdCgiXDwiKSxsZXgoIk5hbWUiKSxsaXQoIlw11IildLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsZXgoIk5hbWVkUmVnRXhwIiksW2xleCgiTmFtZWRCYWNrc2xhc2giKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new NonTerminalStackNode(9316, 0, "NamedBackslash", null, null); + tmp[0] = new NonTerminalStackNode(9253, 0, "NamedBackslash", null, null); builder.addAlternative(RascalParser.cHJvZChsZXgoIk5hbWVkUmVnRXhwIiksW2xleCgiTmFtZWRCYWNrc2xhc2giKV0se30p, tmp); } protected static final void _init_cHJvZChsZXgoIk5hbWVkUmVnRXhwIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxLDQ2KSxyYW5nZSg0OCw1OSkscmFuZ2UoNjEsNjEpLHJhbmdlKDYzLDkxKSxyYW5nZSg5MywxMTE0MTExKV0pXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new CharStackNode(9318, 0, new int[][]{{1,46},{48,59},{61,61},{63,91},{93,1114111}}, null, null); + tmp[0] = new CharStackNode(9255, 0, new int[][]{{1,46},{48,59},{61,61},{63,91},{93,1114111}}, null, null); builder.addAlternative(RascalParser.cHJvZChsZXgoIk5hbWVkUmVnRXhwIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxLDQ2KSxyYW5nZSg0OCw1OSkscmFuZ2UoNjEsNjEpLHJhbmdlKDYzLDkxKSxyYW5nZSg5MywxMTE0MTExKV0pXSx7fSk00, tmp); } public static void init(ExpectBuilder builder){ @@ -10934,19 +10919,19 @@ protected static class PreProtocolChars { protected static final void _init_cHJvZChsZXgoIlByZVByb3RvY29sQ2hhcnMiKSxbbGl0KCJ8IiksbGV4KCJVUkxDaGFycyIpLGxpdCgiXDwiKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[3]; - tmp[1] = new NonTerminalStackNode(9367, 1, "URLChars", null, null); - tmp[2] = new LiteralStackNode(9368, 2, cHJvZChsaXQoIlw8IiksW1xjaGFyLWNsYXNzKFtyYW5nZSg2MCw2MCldKV0se30p, new int[] {60}, null, null); - tmp[0] = new LiteralStackNode(9366, 0, cHJvZChsaXQoInwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyNCwxMjQpXSldLHt9KQ0000, new int[] {124}, null, null); + tmp[1] = new NonTerminalStackNode(9304, 1, "URLChars", null, null); + tmp[2] = new LiteralStackNode(9305, 2, cHJvZChsaXQoIlw8IiksW1xjaGFyLWNsYXNzKFtyYW5nZSg2MCw2MCldKV0se30p, new int[] {60}, null, null); + tmp[0] = new LiteralStackNode(9303, 0, cHJvZChsaXQoInwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyNCwxMjQpXSldLHt9KQ0000, new int[] {124}, null, null); builder.addAlternative(RascalParser.cHJvZChsZXgoIlByZVByb3RvY29sQ2hhcnMiKSxbbGl0KCJ8IiksbGV4KCJVUkxDaGFycyIpLGxpdCgiXDwiKV0se30p, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIlByZVByb3RvY29sQ2hhcnMiKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJzb3J0KFwiUHJlUHJvdG9jb2xDaGFyc1wiKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIobGV4KCJQcmVQcm90b2NvbENoYXJzIikpKX0p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[3] = new ListStackNode(9375, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(9374, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[1] = new LiteralStackNode(9372, 1, cHJvZChsaXQoInNvcnQoXCJQcmVQcm90b2NvbENoYXJzXCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDgwLDgwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4MCw4MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTksOTkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDY3LDY3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDQsMTA0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {115,111,114,116,40,34,80,114,101,80,114,111,116,111,99,111,108,67,104,97,114,115,34,41}, null, null); - tmp[4] = new CharStackNode(9376, 4, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(9373, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[0] = new CharStackNode(9371, 0, new int[][]{{0,0}}, null, null); + tmp[3] = new ListStackNode(9312, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(9311, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[1] = new LiteralStackNode(9309, 1, cHJvZChsaXQoInNvcnQoXCJQcmVQcm90b2NvbENoYXJzXCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDgwLDgwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4MCw4MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTksOTkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDY3LDY3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDQsMTA0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {115,111,114,116,40,34,80,114,101,80,114,111,116,111,99,111,108,67,104,97,114,115,34,41}, null, null); + tmp[4] = new CharStackNode(9313, 4, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(9310, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[0] = new CharStackNode(9308, 0, new int[][]{{0,0}}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIlByZVByb3RvY29sQ2hhcnMiKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJzb3J0KFwiUHJlUHJvdG9jb2xDaGFyc1wiKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIobGV4KCJQcmVQcm90b2NvbENoYXJzIikpKX0p, tmp); } public static void init(ExpectBuilder builder){ @@ -10969,37 +10954,37 @@ protected static class Header { protected static final void _init_cHJvZChsYWJlbCgicGFyYW1ldGVycyIsc29ydCgiSGVhZGVyIikpLFtsYWJlbCgidGFncyIsc29ydCgiVGFncyIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJtb2R1bGUiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoIm5hbWUiLHNvcnQoIlF1YWxpZmllZE5hbWUiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJwYXJhbXMiLHNvcnQoIk1vZHVsZVBhcmFtZXRlcnMiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJpbXBvcnRzIixcaXRlci1zdGFyLXNlcHMoc29ydCgiSW1wb3J0IiksW2xheW91dHMoIkxBWU9VVExJU1QiKV0pKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[9]; - tmp[3] = new NonTerminalStackNode(9419, 3, "layouts_LAYOUTLIST", null, null); - tmp[8] = new SeparatedListStackNode(9428, 8, cmVndWxhcihcaXRlci1zdGFyLXNlcHMoc29ydCgiSW1wb3J0IiksW2xheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(9426, 0, "Import", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(9427, 1, "layouts_LAYOUTLIST", null, null)}, false, null, null); - tmp[6] = new NonTerminalStackNode(9423, 6, "ModuleParameters", null, null); - tmp[2] = new LiteralStackNode(9418, 2, cHJvZChsaXQoIm1vZHVsZSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAwLDEwMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE3LDExNyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKV0se30p, new int[] {109,111,100,117,108,101}, null, null); - tmp[4] = new NonTerminalStackNode(9420, 4, "QualifiedName", null, null); - tmp[0] = new NonTerminalStackNode(9415, 0, "Tags", null, null); - tmp[5] = new NonTerminalStackNode(9422, 5, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(9417, 1, "layouts_LAYOUTLIST", null, null); - tmp[7] = new NonTerminalStackNode(9425, 7, "layouts_LAYOUTLIST", null, null); + tmp[3] = new NonTerminalStackNode(9356, 3, "layouts_LAYOUTLIST", null, null); + tmp[8] = new SeparatedListStackNode(9365, 8, cmVndWxhcihcaXRlci1zdGFyLXNlcHMoc29ydCgiSW1wb3J0IiksW2xheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(9363, 0, "Import", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(9364, 1, "layouts_LAYOUTLIST", null, null)}, false, null, null); + tmp[6] = new NonTerminalStackNode(9360, 6, "ModuleParameters", null, null); + tmp[2] = new LiteralStackNode(9355, 2, cHJvZChsaXQoIm1vZHVsZSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAwLDEwMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE3LDExNyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKV0se30p, new int[] {109,111,100,117,108,101}, null, null); + tmp[4] = new NonTerminalStackNode(9357, 4, "QualifiedName", null, null); + tmp[0] = new NonTerminalStackNode(9352, 0, "Tags", null, null); + tmp[5] = new NonTerminalStackNode(9359, 5, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(9354, 1, "layouts_LAYOUTLIST", null, null); + tmp[7] = new NonTerminalStackNode(9362, 7, "layouts_LAYOUTLIST", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgicGFyYW1ldGVycyIsc29ydCgiSGVhZGVyIikpLFtsYWJlbCgidGFncyIsc29ydCgiVGFncyIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJtb2R1bGUiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoIm5hbWUiLHNvcnQoIlF1YWxpZmllZE5hbWUiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJwYXJhbXMiLHNvcnQoIk1vZHVsZVBhcmFtZXRlcnMiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJpbXBvcnRzIixcaXRlci1zdGFyLXNlcHMoc29ydCgiSW1wb3J0IiksW2xheW91dHMoIkxBWU9VVExJU1QiKV0pKV0se30p, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJIZWFkZXIiKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJzb3J0KFwiSGVhZGVyXCIpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihzb3J0KCJIZWFkZXIiKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[4] = new CharStackNode(9437, 4, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(9434, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[0] = new CharStackNode(9432, 0, new int[][]{{0,0}}, null, null); - tmp[3] = new ListStackNode(9436, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(9435, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[1] = new LiteralStackNode(9433, 1, cHJvZChsaXQoInNvcnQoXCJIZWFkZXJcIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNzIsNzIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDAsMTAwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {115,111,114,116,40,34,72,101,97,100,101,114,34,41}, null, null); + tmp[4] = new CharStackNode(9374, 4, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(9371, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[0] = new CharStackNode(9369, 0, new int[][]{{0,0}}, null, null); + tmp[3] = new ListStackNode(9373, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(9372, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[1] = new LiteralStackNode(9370, 1, cHJvZChsaXQoInNvcnQoXCJIZWFkZXJcIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNzIsNzIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDAsMTAwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {115,111,114,116,40,34,72,101,97,100,101,114,34,41}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJIZWFkZXIiKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJzb3J0KFwiSGVhZGVyXCIpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihzb3J0KCJIZWFkZXIiKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiZGVmYXVsdCIsc29ydCgiSGVhZGVyIikpLFtsYWJlbCgidGFncyIsc29ydCgiVGFncyIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJtb2R1bGUiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoIm5hbWUiLHNvcnQoIlF1YWxpZmllZE5hbWUiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJpbXBvcnRzIixcaXRlci1zdGFyLXNlcHMoc29ydCgiSW1wb3J0IiksW2xheW91dHMoIkxBWU9VVExJU1QiKV0pKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[7]; - tmp[6] = new SeparatedListStackNode(9451, 6, cmVndWxhcihcaXRlci1zdGFyLXNlcHMoc29ydCgiSW1wb3J0IiksW2xheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(9449, 0, "Import", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(9450, 1, "layouts_LAYOUTLIST", null, null)}, false, null, null); - tmp[4] = new NonTerminalStackNode(9446, 4, "QualifiedName", null, null); - tmp[2] = new LiteralStackNode(9444, 2, cHJvZChsaXQoIm1vZHVsZSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAwLDEwMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE3LDExNyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKV0se30p, new int[] {109,111,100,117,108,101}, null, null); - tmp[0] = new NonTerminalStackNode(9441, 0, "Tags", null, null); - tmp[3] = new NonTerminalStackNode(9445, 3, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(9443, 1, "layouts_LAYOUTLIST", null, null); - tmp[5] = new NonTerminalStackNode(9448, 5, "layouts_LAYOUTLIST", null, null); + tmp[6] = new SeparatedListStackNode(9388, 6, cmVndWxhcihcaXRlci1zdGFyLXNlcHMoc29ydCgiSW1wb3J0IiksW2xheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(9386, 0, "Import", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(9387, 1, "layouts_LAYOUTLIST", null, null)}, false, null, null); + tmp[4] = new NonTerminalStackNode(9383, 4, "QualifiedName", null, null); + tmp[2] = new LiteralStackNode(9381, 2, cHJvZChsaXQoIm1vZHVsZSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAwLDEwMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE3LDExNyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKV0se30p, new int[] {109,111,100,117,108,101}, null, null); + tmp[0] = new NonTerminalStackNode(9378, 0, "Tags", null, null); + tmp[3] = new NonTerminalStackNode(9382, 3, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(9380, 1, "layouts_LAYOUTLIST", null, null); + tmp[5] = new NonTerminalStackNode(9385, 5, "layouts_LAYOUTLIST", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiZGVmYXVsdCIsc29ydCgiSGVhZGVyIikpLFtsYWJlbCgidGFncyIsc29ydCgiVGFncyIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJtb2R1bGUiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoIm5hbWUiLHNvcnQoIlF1YWxpZmllZE5hbWUiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJpbXBvcnRzIixcaXRlci1zdGFyLXNlcHMoc29ydCgiSW1wb3J0IiksW2xheW91dHMoIkxBWU9VVExJU1QiKV0pKV0se30p, tmp); } public static void init(ExpectBuilder builder){ @@ -11024,19 +11009,19 @@ protected static class ProtocolChars { protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIlByb3RvY29sQ2hhcnMiKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJzb3J0KFwiUHJvdG9jb2xDaGFyc1wiKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIobGV4KCJQcm90b2NvbENoYXJzIikpKX0p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[3] = new ListStackNode(9720, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(9719, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[1] = new LiteralStackNode(9717, 1, cHJvZChsaXQoInNvcnQoXCJQcm90b2NvbENoYXJzXCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDgwLDgwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5OSw5OSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNjcsNjcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNCwxMDQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {115,111,114,116,40,34,80,114,111,116,111,99,111,108,67,104,97,114,115,34,41}, null, null); - tmp[4] = new CharStackNode(9721, 4, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(9718, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[0] = new CharStackNode(9716, 0, new int[][]{{0,0}}, null, null); + tmp[3] = new ListStackNode(9657, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(9656, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[1] = new LiteralStackNode(9654, 1, cHJvZChsaXQoInNvcnQoXCJQcm90b2NvbENoYXJzXCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDgwLDgwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5OSw5OSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNjcsNjcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNCwxMDQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {115,111,114,116,40,34,80,114,111,116,111,99,111,108,67,104,97,114,115,34,41}, null, null); + tmp[4] = new CharStackNode(9658, 4, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(9655, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[0] = new CharStackNode(9653, 0, new int[][]{{0,0}}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIlByb3RvY29sQ2hhcnMiKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJzb3J0KFwiUHJvdG9jb2xDaGFyc1wiKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIobGV4KCJQcm90b2NvbENoYXJzIikpKX0p, tmp); } protected static final void _init_cHJvZChsZXgoIlByb3RvY29sQ2hhcnMiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyNCwxMjQpXSksbGV4KCJVUkxDaGFycyIpLGNvbmRpdGlvbmFsKGxpdCgiOi8vIikse1xub3QtZm9sbG93KFxjaGFyLWNsYXNzKFtyYW5nZSg5LDEwKSxyYW5nZSgxMywxMykscmFuZ2UoMzIsMzIpLHJhbmdlKDE2MCwxNjApLHJhbmdlKDU3NjAsNTc2MCkscmFuZ2UoODE5Miw4MjAyKSxyYW5nZSg4MjM5LDgyMzkpLHJhbmdlKDgyODcsODI4NykscmFuZ2UoMTIyODgsMTIyODgpXSkpfSldLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[3]; - tmp[0] = new CharStackNode(9724, 0, new int[][]{{124,124}}, null, null); - tmp[2] = new LiteralStackNode(9728, 2, cHJvZChsaXQoIjovLyIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoNTgsNTgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ3LDQ3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0Nyw0NyldKV0se30p, new int[] {58,47,47}, null, new ICompletionFilter[] {new CharFollowRestriction(new int[][]{{9,10},{13,13},{32,32},{160,160},{5760,5760},{8192,8202},{8239,8239},{8287,8287},{12288,12288}})}); - tmp[1] = new NonTerminalStackNode(9725, 1, "URLChars", null, null); + tmp[0] = new CharStackNode(9661, 0, new int[][]{{124,124}}, null, null); + tmp[2] = new LiteralStackNode(9665, 2, cHJvZChsaXQoIjovLyIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoNTgsNTgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ3LDQ3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0Nyw0NyldKV0se30p, new int[] {58,47,47}, null, new ICompletionFilter[] {new CharFollowRestriction(new int[][]{{9,10},{13,13},{32,32},{160,160},{5760,5760},{8192,8202},{8239,8239},{8287,8287},{12288,12288}})}); + tmp[1] = new NonTerminalStackNode(9662, 1, "URLChars", null, null); builder.addAlternative(RascalParser.cHJvZChsZXgoIlByb3RvY29sQ2hhcnMiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyNCwxMjQpXSksbGV4KCJVUkxDaGFycyIpLGNvbmRpdGlvbmFsKGxpdCgiOi8vIikse1xub3QtZm9sbG93KFxjaGFyLWNsYXNzKFtyYW5nZSg5LDEwKSxyYW5nZSgxMywxMykscmFuZ2UoMzIsMzIpLHJhbmdlKDE2MCwxNjApLHJhbmdlKDU3NjAsNTc2MCkscmFuZ2UoODE5Miw4MjAyKSxyYW5nZSg4MjM5LDgyMzkpLHJhbmdlKDgyODcsODI4NykscmFuZ2UoMTIyODgsMTIyODgpXSkpfSldLHt9KQ0000, tmp); } public static void init(ExpectBuilder builder){ @@ -11059,59 +11044,59 @@ protected static class Assignment { protected static final void _init_cHJvZChsYWJlbCgicHJvZHVjdCIsc29ydCgiQXNzaWdubWVudCIpKSxbbGl0KCIqPSIpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(9760, 0, cHJvZChsaXQoIio9IiksW1xjaGFyLWNsYXNzKFtyYW5nZSg0Miw0MildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNjEsNjEpXSldLHt9KQ0000, new int[] {42,61}, null, null); + tmp[0] = new LiteralStackNode(9697, 0, cHJvZChsaXQoIio9IiksW1xjaGFyLWNsYXNzKFtyYW5nZSg0Miw0MildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNjEsNjEpXSldLHt9KQ0000, new int[] {42,61}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgicHJvZHVjdCIsc29ydCgiQXNzaWdubWVudCIpKSxbbGl0KCIqPSIpXSx7fSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiZGl2aXNpb24iLHNvcnQoIkFzc2lnbm1lbnQiKSksW2xpdCgiLz0iKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(9763, 0, cHJvZChsaXQoIi89IiksW1xjaGFyLWNsYXNzKFtyYW5nZSg0Nyw0NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNjEsNjEpXSldLHt9KQ0000, new int[] {47,61}, null, null); + tmp[0] = new LiteralStackNode(9700, 0, cHJvZChsaXQoIi89IiksW1xjaGFyLWNsYXNzKFtyYW5nZSg0Nyw0NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNjEsNjEpXSldLHt9KQ0000, new int[] {47,61}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiZGl2aXNpb24iLHNvcnQoIkFzc2lnbm1lbnQiKSksW2xpdCgiLz0iKV0se30p, tmp); } protected static final void _init_cHJvZChsYWJlbCgiZGVmYXVsdCIsc29ydCgiQXNzaWdubWVudCIpKSxbbGl0KCI9IildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(9766, 0, cHJvZChsaXQoIj0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDYxLDYxKV0pXSx7fSk00, new int[] {61}, null, null); + tmp[0] = new LiteralStackNode(9703, 0, cHJvZChsaXQoIj0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDYxLDYxKV0pXSx7fSk00, new int[] {61}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiZGVmYXVsdCIsc29ydCgiQXNzaWdubWVudCIpKSxbbGl0KCI9IildLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgiaW50ZXJzZWN0aW9uIixzb3J0KCJBc3NpZ25tZW50IikpLFtsaXQoIiY9IildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(9769, 0, cHJvZChsaXQoIiY9IiksW1xjaGFyLWNsYXNzKFtyYW5nZSgzOCwzOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNjEsNjEpXSldLHt9KQ0000, new int[] {38,61}, null, null); + tmp[0] = new LiteralStackNode(9706, 0, cHJvZChsaXQoIiY9IiksW1xjaGFyLWNsYXNzKFtyYW5nZSgzOCwzOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNjEsNjEpXSldLHt9KQ0000, new int[] {38,61}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiaW50ZXJzZWN0aW9uIixzb3J0KCJBc3NpZ25tZW50IikpLFtsaXQoIiY9IildLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJBc3NpZ25tZW50IikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIkFzc2lnbm1lbnRcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKHNvcnQoIkFzc2lnbm1lbnQiKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[3] = new ListStackNode(9776, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(9775, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[0] = new CharStackNode(9772, 0, new int[][]{{0,0}}, null, null); - tmp[4] = new CharStackNode(9777, 4, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(9774, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[1] = new LiteralStackNode(9773, 1, cHJvZChsaXQoInNvcnQoXCJBc3NpZ25tZW50XCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDY1LDY1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDMsMTAzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDksMTA5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {115,111,114,116,40,34,65,115,115,105,103,110,109,101,110,116,34,41}, null, null); + tmp[3] = new ListStackNode(9713, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(9712, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[0] = new CharStackNode(9709, 0, new int[][]{{0,0}}, null, null); + tmp[4] = new CharStackNode(9714, 4, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(9711, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[1] = new LiteralStackNode(9710, 1, cHJvZChsaXQoInNvcnQoXCJBc3NpZ25tZW50XCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDY1LDY1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDMsMTAzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDksMTA5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {115,111,114,116,40,34,65,115,115,105,103,110,109,101,110,116,34,41}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJBc3NpZ25tZW50IikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIkFzc2lnbm1lbnRcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKHNvcnQoIkFzc2lnbm1lbnQiKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiYWRkaXRpb24iLHNvcnQoIkFzc2lnbm1lbnQiKSksW2xpdCgiKz0iKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(9781, 0, cHJvZChsaXQoIis9IiksW1xjaGFyLWNsYXNzKFtyYW5nZSg0Myw0MyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNjEsNjEpXSldLHt9KQ0000, new int[] {43,61}, null, null); + tmp[0] = new LiteralStackNode(9718, 0, cHJvZChsaXQoIis9IiksW1xjaGFyLWNsYXNzKFtyYW5nZSg0Myw0MyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNjEsNjEpXSldLHt9KQ0000, new int[] {43,61}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiYWRkaXRpb24iLHNvcnQoIkFzc2lnbm1lbnQiKSksW2xpdCgiKz0iKV0se30p, tmp); } protected static final void _init_cHJvZChsYWJlbCgiaWZEZWZpbmVkIixzb3J0KCJBc3NpZ25tZW50IikpLFtsaXQoIj89IildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(9784, 0, cHJvZChsaXQoIj89IiksW1xjaGFyLWNsYXNzKFtyYW5nZSg2Myw2MyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNjEsNjEpXSldLHt9KQ0000, new int[] {63,61}, null, null); + tmp[0] = new LiteralStackNode(9721, 0, cHJvZChsaXQoIj89IiksW1xjaGFyLWNsYXNzKFtyYW5nZSg2Myw2MyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNjEsNjEpXSldLHt9KQ0000, new int[] {63,61}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiaWZEZWZpbmVkIixzb3J0KCJBc3NpZ25tZW50IikpLFtsaXQoIj89IildLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgiYXBwZW5kIixzb3J0KCJBc3NpZ25tZW50IikpLFtsaXQoIlw8XDw9IildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(9787, 0, cHJvZChsaXQoIlw8XDw9IiksW1xjaGFyLWNsYXNzKFtyYW5nZSg2MCw2MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNjAsNjApXSksXGNoYXItY2xhc3MoW3JhbmdlKDYxLDYxKV0pXSx7fSk00, new int[] {60,60,61}, null, null); + tmp[0] = new LiteralStackNode(9724, 0, cHJvZChsaXQoIlw8XDw9IiksW1xjaGFyLWNsYXNzKFtyYW5nZSg2MCw2MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNjAsNjApXSksXGNoYXItY2xhc3MoW3JhbmdlKDYxLDYxKV0pXSx7fSk00, new int[] {60,60,61}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiYXBwZW5kIixzb3J0KCJBc3NpZ25tZW50IikpLFtsaXQoIlw8XDw9IildLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgic3VidHJhY3Rpb24iLHNvcnQoIkFzc2lnbm1lbnQiKSksW2xpdCgiLT0iKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(9790, 0, cHJvZChsaXQoIi09IiksW1xjaGFyLWNsYXNzKFtyYW5nZSg0NSw0NSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNjEsNjEpXSldLHt9KQ0000, new int[] {45,61}, null, null); + tmp[0] = new LiteralStackNode(9727, 0, cHJvZChsaXQoIi09IiksW1xjaGFyLWNsYXNzKFtyYW5nZSg0NSw0NSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNjEsNjEpXSldLHt9KQ0000, new int[] {45,61}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgic3VidHJhY3Rpb24iLHNvcnQoIkFzc2lnbm1lbnQiKSksW2xpdCgiLT0iKV0se30p, tmp); } public static void init(ExpectBuilder builder){ @@ -11148,41 +11133,41 @@ protected static class TypeVar { protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJUeXBlVmFyIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgiXFxpdGVyLXNlcHMoc29ydChcIlR5cGVWYXJcIiksW2xpdChcIixcIildKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoXGl0ZXItc2Vwcyhzb3J0KCJUeXBlVmFyIiksW2xheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIiwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIildKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[1] = new LiteralStackNode(9813, 1, cHJvZChsaXQoIlxcaXRlci1zZXBzKHNvcnQoXCJUeXBlVmFyXCIpLFtsaXQoXCIsXCIpXSkiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkyLDkyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NSw0NSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEyLDExMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODQsODQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEyMSwxMjEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDg2LDg2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NCw0NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTEsOTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDQsNDQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTMsOTMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {92,105,116,101,114,45,115,101,112,115,40,115,111,114,116,40,34,84,121,112,101,86,97,114,34,41,44,91,108,105,116,40,34,44,34,41,93,41}, null, null); - tmp[0] = new CharStackNode(9812, 0, new int[][]{{0,0}}, null, null); - tmp[4] = new CharStackNode(9817, 4, new int[][]{{0,0}}, null, null); - tmp[3] = new ListStackNode(9816, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(9815, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[2] = new LiteralStackNode(9814, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[1] = new LiteralStackNode(9750, 1, cHJvZChsaXQoIlxcaXRlci1zZXBzKHNvcnQoXCJUeXBlVmFyXCIpLFtsaXQoXCIsXCIpXSkiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkyLDkyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NSw0NSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEyLDExMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODQsODQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEyMSwxMjEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDg2LDg2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NCw0NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTEsOTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDQsNDQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTMsOTMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {92,105,116,101,114,45,115,101,112,115,40,115,111,114,116,40,34,84,121,112,101,86,97,114,34,41,44,91,108,105,116,40,34,44,34,41,93,41}, null, null); + tmp[0] = new CharStackNode(9749, 0, new int[][]{{0,0}}, null, null); + tmp[4] = new CharStackNode(9754, 4, new int[][]{{0,0}}, null, null); + tmp[3] = new ListStackNode(9753, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(9752, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[2] = new LiteralStackNode(9751, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJUeXBlVmFyIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgiXFxpdGVyLXNlcHMoc29ydChcIlR5cGVWYXJcIiksW2xpdChcIixcIildKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoXGl0ZXItc2Vwcyhzb3J0KCJUeXBlVmFyIiksW2xheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIiwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIildKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJUeXBlVmFyIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIlR5cGVWYXJcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKHNvcnQoIlR5cGVWYXIiKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[0] = new CharStackNode(9825, 0, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(9827, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[1] = new LiteralStackNode(9826, 1, cHJvZChsaXQoInNvcnQoXCJUeXBlVmFyXCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDg0LDg0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMjEsMTIxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTIsMTEyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4Niw4NildKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,84,121,112,101,86,97,114,34,41}, null, null); - tmp[3] = new ListStackNode(9829, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(9828, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[4] = new CharStackNode(9830, 4, new int[][]{{0,0}}, null, null); + tmp[0] = new CharStackNode(9762, 0, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(9764, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[1] = new LiteralStackNode(9763, 1, cHJvZChsaXQoInNvcnQoXCJUeXBlVmFyXCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDg0LDg0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMjEsMTIxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTIsMTEyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4Niw4NildKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,84,121,112,101,86,97,114,34,41}, null, null); + tmp[3] = new ListStackNode(9766, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(9765, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[4] = new CharStackNode(9767, 4, new int[][]{{0,0}}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJUeXBlVmFyIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIlR5cGVWYXJcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKHNvcnQoIlR5cGVWYXIiKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiYm91bmRlZCIsc29ydCgiVHlwZVZhciIpKSxbbGl0KCImIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJuYW1lIixsZXgoIk5hbWUiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiXDw6IiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJib3VuZCIsc29ydCgiVHlwZSIpKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[7]; - tmp[0] = new LiteralStackNode(9834, 0, cHJvZChsaXQoIiYiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDM4LDM4KV0pXSx7fSk00, new int[] {38}, null, null); - tmp[4] = new LiteralStackNode(9839, 4, cHJvZChsaXQoIlw8OiIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoNjAsNjApXSksXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {60,58}, null, null); - tmp[6] = new NonTerminalStackNode(9841, 6, "Type", null, null); - tmp[2] = new NonTerminalStackNode(9836, 2, "Name", null, null); - tmp[3] = new NonTerminalStackNode(9838, 3, "layouts_LAYOUTLIST", null, null); - tmp[5] = new NonTerminalStackNode(9840, 5, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(9835, 1, "layouts_LAYOUTLIST", null, null); + tmp[0] = new LiteralStackNode(9771, 0, cHJvZChsaXQoIiYiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDM4LDM4KV0pXSx7fSk00, new int[] {38}, null, null); + tmp[4] = new LiteralStackNode(9776, 4, cHJvZChsaXQoIlw8OiIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoNjAsNjApXSksXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {60,58}, null, null); + tmp[6] = new NonTerminalStackNode(9778, 6, "Type", null, null); + tmp[2] = new NonTerminalStackNode(9773, 2, "Name", null, null); + tmp[3] = new NonTerminalStackNode(9775, 3, "layouts_LAYOUTLIST", null, null); + tmp[5] = new NonTerminalStackNode(9777, 5, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(9772, 1, "layouts_LAYOUTLIST", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiYm91bmRlZCIsc29ydCgiVHlwZVZhciIpKSxbbGl0KCImIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJuYW1lIixsZXgoIk5hbWUiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiXDw6IiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJib3VuZCIsc29ydCgiVHlwZSIpKV0se30p, tmp); } protected static final void _init_cHJvZChsYWJlbCgiZnJlZSIsc29ydCgiVHlwZVZhciIpKSxbbGl0KCImIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJuYW1lIixsZXgoIk5hbWUiKSldLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[3]; - tmp[0] = new LiteralStackNode(9845, 0, cHJvZChsaXQoIiYiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDM4LDM4KV0pXSx7fSk00, new int[] {38}, null, null); - tmp[2] = new NonTerminalStackNode(9847, 2, "Name", null, null); - tmp[1] = new NonTerminalStackNode(9846, 1, "layouts_LAYOUTLIST", null, null); + tmp[0] = new LiteralStackNode(9782, 0, cHJvZChsaXQoIiYiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDM4LDM4KV0pXSx7fSk00, new int[] {38}, null, null); + tmp[2] = new NonTerminalStackNode(9784, 2, "Name", null, null); + tmp[1] = new NonTerminalStackNode(9783, 1, "layouts_LAYOUTLIST", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiZnJlZSIsc29ydCgiVHlwZVZhciIpKSxbbGl0KCImIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJuYW1lIixsZXgoIk5hbWUiKSldLHt9KQ0000, tmp); } public static void init(ExpectBuilder builder){ @@ -11209,19 +11194,19 @@ protected static class PostProtocolChars { protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIlBvc3RQcm90b2NvbENoYXJzIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIlBvc3RQcm90b2NvbENoYXJzXCIpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihsZXgoIlBvc3RQcm90b2NvbENoYXJzIikpKX0p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[2] = new LiteralStackNode(9938, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[4] = new CharStackNode(9941, 4, new int[][]{{0,0}}, null, null); - tmp[0] = new CharStackNode(9936, 0, new int[][]{{0,0}}, null, null); - tmp[1] = new LiteralStackNode(9937, 1, cHJvZChsaXQoInNvcnQoXCJQb3N0UHJvdG9jb2xDaGFyc1wiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4MCw4MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoODAsODApXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk5LDk5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg2Nyw2NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA0LDEwNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,80,111,115,116,80,114,111,116,111,99,111,108,67,104,97,114,115,34,41}, null, null); - tmp[3] = new ListStackNode(9940, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(9939, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[2] = new LiteralStackNode(9875, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[4] = new CharStackNode(9878, 4, new int[][]{{0,0}}, null, null); + tmp[0] = new CharStackNode(9873, 0, new int[][]{{0,0}}, null, null); + tmp[1] = new LiteralStackNode(9874, 1, cHJvZChsaXQoInNvcnQoXCJQb3N0UHJvdG9jb2xDaGFyc1wiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4MCw4MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoODAsODApXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk5LDk5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg2Nyw2NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA0LDEwNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,80,111,115,116,80,114,111,116,111,99,111,108,67,104,97,114,115,34,41}, null, null); + tmp[3] = new ListStackNode(9877, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(9876, 0, new int[][]{{48,57}}, null, null), true, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIlBvc3RQcm90b2NvbENoYXJzIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIlBvc3RQcm90b2NvbENoYXJzXCIpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihsZXgoIlBvc3RQcm90b2NvbENoYXJzIikpKX0p, tmp); } protected static final void _init_cHJvZChsZXgoIlBvc3RQcm90b2NvbENoYXJzIiksW2xpdCgiXD4iKSxsZXgoIlVSTENoYXJzIiksbGl0KCI6Ly8iKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[3]; - tmp[2] = new LiteralStackNode(9946, 2, cHJvZChsaXQoIjovLyIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoNTgsNTgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ3LDQ3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0Nyw0NyldKV0se30p, new int[] {58,47,47}, null, null); - tmp[0] = new LiteralStackNode(9944, 0, cHJvZChsaXQoIlw11IiksW1xjaGFyLWNsYXNzKFtyYW5nZSg2Miw2MildKV0se30p, new int[] {62}, null, null); - tmp[1] = new NonTerminalStackNode(9945, 1, "URLChars", null, null); + tmp[2] = new LiteralStackNode(9883, 2, cHJvZChsaXQoIjovLyIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoNTgsNTgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ3LDQ3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0Nyw0NyldKV0se30p, new int[] {58,47,47}, null, null); + tmp[0] = new LiteralStackNode(9881, 0, cHJvZChsaXQoIlw11IiksW1xjaGFyLWNsYXNzKFtyYW5nZSg2Miw2MildKV0se30p, new int[] {62}, null, null); + tmp[1] = new NonTerminalStackNode(9882, 1, "URLChars", null, null); builder.addAlternative(RascalParser.cHJvZChsZXgoIlBvc3RQcm90b2NvbENoYXJzIiksW2xpdCgiXD4iKSxsZXgoIlVSTENoYXJzIiksbGl0KCI6Ly8iKV0se30p, tmp); } public static void init(ExpectBuilder builder){ @@ -11244,25 +11229,25 @@ protected static class Concrete { protected static final void _init_cHJvZChsYWJlbCgidHlwZWQiLGxleCgiQ29uY3JldGUiKSksW2xpdCgiKCIpLGxhYmVsKCJsMSIsbGF5b3V0cygiTEFZT1VUTElTVCIpKSxsYWJlbCgic3ltYm9sIixzb3J0KCJTeW0iKSksbGFiZWwoImwyIixsYXlvdXRzKCJMQVlPVVRMSVNUIikpLGxpdCgiKSIpLGxhYmVsKCJsMyIsbGF5b3V0cygiTEFZT1VUTElTVCIpKSxsaXQoImAiKSxsYWJlbCgicGFydHMiLFxpdGVyLXN0YXIobGV4KCJDb25jcmV0ZVBhcnQiKSkpLGxpdCgiYCIpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[9]; - tmp[7] = new ListStackNode(9962, 7, cmVndWxhcihcaXRlci1zdGFyKGxleCgiQ29uY3JldGVQYXJ0IikpKQ0000, new NonTerminalStackNode(9961, 0, "ConcretePart", null, null), false, null, null); - tmp[3] = new NonTerminalStackNode(9955, 3, "layouts_LAYOUTLIST", null, null); - tmp[6] = new LiteralStackNode(9960, 6, cHJvZChsaXQoImAiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDk2LDk2KV0pXSx7fSk00, new int[] {96}, null, null); - tmp[2] = new NonTerminalStackNode(9953, 2, "Sym", null, null); - tmp[4] = new LiteralStackNode(9957, 4, cHJvZChsaXQoIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {41}, null, null); - tmp[0] = new LiteralStackNode(9950, 0, cHJvZChsaXQoIigiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pXSx7fSk00, new int[] {40}, null, null); - tmp[5] = new NonTerminalStackNode(9958, 5, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(9951, 1, "layouts_LAYOUTLIST", null, null); - tmp[8] = new LiteralStackNode(9964, 8, cHJvZChsaXQoImAiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDk2LDk2KV0pXSx7fSk00, new int[] {96}, null, null); + tmp[7] = new ListStackNode(9899, 7, cmVndWxhcihcaXRlci1zdGFyKGxleCgiQ29uY3JldGVQYXJ0IikpKQ0000, new NonTerminalStackNode(9898, 0, "ConcretePart", null, null), false, null, null); + tmp[3] = new NonTerminalStackNode(9892, 3, "layouts_LAYOUTLIST", null, null); + tmp[6] = new LiteralStackNode(9897, 6, cHJvZChsaXQoImAiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDk2LDk2KV0pXSx7fSk00, new int[] {96}, null, null); + tmp[2] = new NonTerminalStackNode(9890, 2, "Sym", null, null); + tmp[4] = new LiteralStackNode(9894, 4, cHJvZChsaXQoIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {41}, null, null); + tmp[0] = new LiteralStackNode(9887, 0, cHJvZChsaXQoIigiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pXSx7fSk00, new int[] {40}, null, null); + tmp[5] = new NonTerminalStackNode(9895, 5, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(9888, 1, "layouts_LAYOUTLIST", null, null); + tmp[8] = new LiteralStackNode(9901, 8, cHJvZChsaXQoImAiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDk2LDk2KV0pXSx7fSk00, new int[] {96}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgidHlwZWQiLGxleCgiQ29uY3JldGUiKSksW2xpdCgiKCIpLGxhYmVsKCJsMSIsbGF5b3V0cygiTEFZT1VUTElTVCIpKSxsYWJlbCgic3ltYm9sIixzb3J0KCJTeW0iKSksbGFiZWwoImwyIixsYXlvdXRzKCJMQVlPVVRMSVNUIikpLGxpdCgiKSIpLGxhYmVsKCJsMyIsbGF5b3V0cygiTEFZT1VUTElTVCIpKSxsaXQoImAiKSxsYWJlbCgicGFydHMiLFxpdGVyLXN0YXIobGV4KCJDb25jcmV0ZVBhcnQiKSkpLGxpdCgiYCIpXSx7fSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIkNvbmNyZXRlIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIkNvbmNyZXRlXCIpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihsZXgoIkNvbmNyZXRlIikpKX0p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[0] = new CharStackNode(9967, 0, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(9969, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[1] = new LiteralStackNode(9968, 1, cHJvZChsaXQoInNvcnQoXCJDb25jcmV0ZVwiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg2Nyw2NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTksOTkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,67,111,110,99,114,101,116,101,34,41}, null, null); - tmp[3] = new ListStackNode(9971, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(9970, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[4] = new CharStackNode(9972, 4, new int[][]{{0,0}}, null, null); + tmp[0] = new CharStackNode(9904, 0, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(9906, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[1] = new LiteralStackNode(9905, 1, cHJvZChsaXQoInNvcnQoXCJDb25jcmV0ZVwiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg2Nyw2NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTksOTkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,67,111,110,99,114,101,116,101,34,41}, null, null); + tmp[3] = new ListStackNode(9908, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(9907, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[4] = new CharStackNode(9909, 4, new int[][]{{0,0}}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIkNvbmNyZXRlIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIkNvbmNyZXRlXCIpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihsZXgoIkNvbmNyZXRlIikpKX0p, tmp); } public static void init(ExpectBuilder builder){ @@ -11285,31 +11270,31 @@ protected static class PatternWithAction { protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJQYXR0ZXJuV2l0aEFjdGlvbiIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJQYXR0ZXJuV2l0aEFjdGlvblwiKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoc29ydCgiUGF0dGVybldpdGhBY3Rpb24iKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[4] = new CharStackNode(10034, 4, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(10031, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[0] = new CharStackNode(10029, 0, new int[][]{{0,0}}, null, null); - tmp[3] = new ListStackNode(10033, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(10032, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[1] = new LiteralStackNode(10030, 1, cHJvZChsaXQoInNvcnQoXCJQYXR0ZXJuV2l0aEFjdGlvblwiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4MCw4MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDg3LDg3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDQsMTA0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg2NSw2NSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTksOTkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,80,97,116,116,101,114,110,87,105,116,104,65,99,116,105,111,110,34,41}, null, null); + tmp[4] = new CharStackNode(9971, 4, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(9968, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[0] = new CharStackNode(9966, 0, new int[][]{{0,0}}, null, null); + tmp[3] = new ListStackNode(9970, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(9969, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[1] = new LiteralStackNode(9967, 1, cHJvZChsaXQoInNvcnQoXCJQYXR0ZXJuV2l0aEFjdGlvblwiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4MCw4MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDg3LDg3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDQsMTA0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg2NSw2NSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTksOTkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,80,97,116,116,101,114,110,87,105,116,104,65,99,116,105,111,110,34,41}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJQYXR0ZXJuV2l0aEFjdGlvbiIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJQYXR0ZXJuV2l0aEFjdGlvblwiKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoc29ydCgiUGF0dGVybldpdGhBY3Rpb24iKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiYXJiaXRyYXJ5Iixzb3J0KCJQYXR0ZXJuV2l0aEFjdGlvbiIpKSxbbGFiZWwoInBhdHRlcm4iLHNvcnQoIlBhdHRlcm4iKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiOiIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgic3RhdGVtZW50Iixzb3J0KCJTdGF0ZW1lbnQiKSldLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[0] = new NonTerminalStackNode(10038, 0, "Pattern", null, null); - tmp[2] = new LiteralStackNode(10041, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[4] = new NonTerminalStackNode(10043, 4, "Statement", null, null); - tmp[1] = new NonTerminalStackNode(10040, 1, "layouts_LAYOUTLIST", null, null); - tmp[3] = new NonTerminalStackNode(10042, 3, "layouts_LAYOUTLIST", null, null); + tmp[0] = new NonTerminalStackNode(9975, 0, "Pattern", null, null); + tmp[2] = new LiteralStackNode(9978, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[4] = new NonTerminalStackNode(9980, 4, "Statement", null, null); + tmp[1] = new NonTerminalStackNode(9977, 1, "layouts_LAYOUTLIST", null, null); + tmp[3] = new NonTerminalStackNode(9979, 3, "layouts_LAYOUTLIST", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiYXJiaXRyYXJ5Iixzb3J0KCJQYXR0ZXJuV2l0aEFjdGlvbiIpKSxbbGFiZWwoInBhdHRlcm4iLHNvcnQoIlBhdHRlcm4iKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiOiIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgic3RhdGVtZW50Iixzb3J0KCJTdGF0ZW1lbnQiKSldLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgicmVwbGFjaW5nIixzb3J0KCJQYXR0ZXJuV2l0aEFjdGlvbiIpKSxbbGFiZWwoInBhdHRlcm4iLHNvcnQoIlBhdHRlcm4iKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiPVw11IiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJyZXBsYWNlbWVudCIsc29ydCgiUmVwbGFjZW1lbnQiKSldLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[0] = new NonTerminalStackNode(10047, 0, "Pattern", null, null); - tmp[4] = new NonTerminalStackNode(10052, 4, "Replacement", null, null); - tmp[2] = new LiteralStackNode(10050, 2, cHJvZChsaXQoIj1cPiIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoNjEsNjEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDYyLDYyKV0pXSx7fSk00, new int[] {61,62}, null, null); - tmp[3] = new NonTerminalStackNode(10051, 3, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(10049, 1, "layouts_LAYOUTLIST", null, null); + tmp[0] = new NonTerminalStackNode(9984, 0, "Pattern", null, null); + tmp[4] = new NonTerminalStackNode(9989, 4, "Replacement", null, null); + tmp[2] = new LiteralStackNode(9987, 2, cHJvZChsaXQoIj1cPiIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoNjEsNjEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDYyLDYyKV0pXSx7fSk00, new int[] {61,62}, null, null); + tmp[3] = new NonTerminalStackNode(9988, 3, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(9986, 1, "layouts_LAYOUTLIST", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgicmVwbGFjaW5nIixzb3J0KCJQYXR0ZXJuV2l0aEFjdGlvbiIpKSxbbGFiZWwoInBhdHRlcm4iLHNvcnQoIlBhdHRlcm4iKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiPVw11IiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJyZXBsYWNlbWVudCIsc29ydCgiUmVwbGFjZW1lbnQiKSldLHt9KQ0000, tmp); } public static void init(ExpectBuilder builder){ @@ -11334,19 +11319,19 @@ protected static class Module { protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJNb2R1bGUiKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJzb3J0KFwiTW9kdWxlXCIpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihzb3J0KCJNb2R1bGUiKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[1] = new LiteralStackNode(10106, 1, cHJvZChsaXQoInNvcnQoXCJNb2R1bGVcIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNzcsNzcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMCwxMDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNywxMTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,77,111,100,117,108,101,34,41}, null, null); - tmp[3] = new ListStackNode(10109, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(10108, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[0] = new CharStackNode(10105, 0, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(10107, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[4] = new CharStackNode(10110, 4, new int[][]{{0,0}}, null, null); + tmp[1] = new LiteralStackNode(10043, 1, cHJvZChsaXQoInNvcnQoXCJNb2R1bGVcIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNzcsNzcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMCwxMDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNywxMTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,77,111,100,117,108,101,34,41}, null, null); + tmp[3] = new ListStackNode(10046, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(10045, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[0] = new CharStackNode(10042, 0, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(10044, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[4] = new CharStackNode(10047, 4, new int[][]{{0,0}}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJNb2R1bGUiKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJzb3J0KFwiTW9kdWxlXCIpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihzb3J0KCJNb2R1bGUiKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiZGVmYXVsdCIsc29ydCgiTW9kdWxlIikpLFtsYWJlbCgiaGVhZGVyIixzb3J0KCJIZWFkZXIiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJib2R5Iixzb3J0KCJCb2R5IikpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[3]; - tmp[0] = new NonTerminalStackNode(10114, 0, "Header", null, null); - tmp[2] = new NonTerminalStackNode(10117, 2, "Body", null, null); - tmp[1] = new NonTerminalStackNode(10116, 1, "layouts_LAYOUTLIST", null, null); + tmp[0] = new NonTerminalStackNode(10051, 0, "Header", null, null); + tmp[2] = new NonTerminalStackNode(10054, 2, "Body", null, null); + tmp[1] = new NonTerminalStackNode(10053, 1, "layouts_LAYOUTLIST", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiZGVmYXVsdCIsc29ydCgiTW9kdWxlIikpLFtsYWJlbCgiaGVhZGVyIixzb3J0KCJIZWFkZXIiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJib2R5Iixzb3J0KCJCb2R5IikpXSx7fSk00, tmp); } public static void init(ExpectBuilder builder){ @@ -11369,19 +11354,19 @@ protected static class MidStringChars { protected static final void _init_cHJvZChsZXgoIk1pZFN0cmluZ0NoYXJzIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg2Miw2MildKSxcaXRlci1zdGFyKGxleCgiU3RyaW5nQ2hhcmFjdGVyIikpLFxjaGFyLWNsYXNzKFtyYW5nZSg2MCw2MCldKV0se3RhZygiY2F0ZWdvcnkiKCJzdHJpbmciKSl9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[3]; - tmp[2] = new CharStackNode(10170, 2, new int[][]{{60,60}}, null, null); - tmp[0] = new CharStackNode(10167, 0, new int[][]{{62,62}}, null, null); - tmp[1] = new ListStackNode(10169, 1, cmVndWxhcihcaXRlci1zdGFyKGxleCgiU3RyaW5nQ2hhcmFjdGVyIikpKQ0000, new NonTerminalStackNode(10168, 0, "StringCharacter", null, null), false, null, null); + tmp[2] = new CharStackNode(10107, 2, new int[][]{{60,60}}, null, null); + tmp[0] = new CharStackNode(10104, 0, new int[][]{{62,62}}, null, null); + tmp[1] = new ListStackNode(10106, 1, cmVndWxhcihcaXRlci1zdGFyKGxleCgiU3RyaW5nQ2hhcmFjdGVyIikpKQ0000, new NonTerminalStackNode(10105, 0, "StringCharacter", null, null), false, null, null); builder.addAlternative(RascalParser.cHJvZChsZXgoIk1pZFN0cmluZ0NoYXJzIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg2Miw2MildKSxcaXRlci1zdGFyKGxleCgiU3RyaW5nQ2hhcmFjdGVyIikpLFxjaGFyLWNsYXNzKFtyYW5nZSg2MCw2MCldKV0se3RhZygiY2F0ZWdvcnkiKCJzdHJpbmciKSl9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIk1pZFN0cmluZ0NoYXJzIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIk1pZFN0cmluZ0NoYXJzXCIpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihsZXgoIk1pZFN0cmluZ0NoYXJzIikpKX0p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[0] = new CharStackNode(10173, 0, new int[][]{{0,0}}, null, null); - tmp[4] = new CharStackNode(10178, 4, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(10175, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[3] = new ListStackNode(10177, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(10176, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[1] = new LiteralStackNode(10174, 1, cHJvZChsaXQoInNvcnQoXCJNaWRTdHJpbmdDaGFyc1wiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg3Nyw3NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAwLDEwMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODMsODMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMywxMDMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDY3LDY3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDQsMTA0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {115,111,114,116,40,34,77,105,100,83,116,114,105,110,103,67,104,97,114,115,34,41}, null, null); + tmp[0] = new CharStackNode(10110, 0, new int[][]{{0,0}}, null, null); + tmp[4] = new CharStackNode(10115, 4, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(10112, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[3] = new ListStackNode(10114, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(10113, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[1] = new LiteralStackNode(10111, 1, cHJvZChsaXQoInNvcnQoXCJNaWRTdHJpbmdDaGFyc1wiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg3Nyw3NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAwLDEwMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODMsODMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMywxMDMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDY3LDY3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDQsMTA0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {115,111,114,116,40,34,77,105,100,83,116,114,105,110,103,67,104,97,114,115,34,41}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIk1pZFN0cmluZ0NoYXJzIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIk1pZFN0cmluZ0NoYXJzXCIpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihsZXgoIk1pZFN0cmluZ0NoYXJzIikpKX0p, tmp); } public static void init(ExpectBuilder builder){ @@ -11404,27 +11389,27 @@ protected static class Toplevel { protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJUb3BsZXZlbCIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJUb3BsZXZlbFwiKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoc29ydCgiVG9wbGV2ZWwiKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[1] = new LiteralStackNode(10381, 1, cHJvZChsaXQoInNvcnQoXCJUb3BsZXZlbFwiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4NCw4NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEyLDExMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE4LDExOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {115,111,114,116,40,34,84,111,112,108,101,118,101,108,34,41}, null, null); - tmp[3] = new ListStackNode(10384, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(10383, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[0] = new CharStackNode(10380, 0, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(10382, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[4] = new CharStackNode(10385, 4, new int[][]{{0,0}}, null, null); + tmp[1] = new LiteralStackNode(10318, 1, cHJvZChsaXQoInNvcnQoXCJUb3BsZXZlbFwiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4NCw4NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEyLDExMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE4LDExOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {115,111,114,116,40,34,84,111,112,108,101,118,101,108,34,41}, null, null); + tmp[3] = new ListStackNode(10321, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(10320, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[0] = new CharStackNode(10317, 0, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(10319, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[4] = new CharStackNode(10322, 4, new int[][]{{0,0}}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJUb3BsZXZlbCIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJUb3BsZXZlbFwiKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoc29ydCgiVG9wbGV2ZWwiKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiZ2l2ZW5WaXNpYmlsaXR5Iixzb3J0KCJUb3BsZXZlbCIpKSxbbGFiZWwoImRlY2xhcmF0aW9uIixzb3J0KCJEZWNsYXJhdGlvbiIpKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new NonTerminalStackNode(10389, 0, "Declaration", null, null); + tmp[0] = new NonTerminalStackNode(10326, 0, "Declaration", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiZ2l2ZW5WaXNpYmlsaXR5Iixzb3J0KCJUb3BsZXZlbCIpKSxbbGFiZWwoImRlY2xhcmF0aW9uIixzb3J0KCJEZWNsYXJhdGlvbiIpKV0se30p, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJUb3BsZXZlbCIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoIlxcaXRlci1zdGFyKHNvcnQoXCJUb3BsZXZlbFwiKSkiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKFxpdGVyLXN0YXItc2Vwcyhzb3J0KCJUb3BsZXZlbCIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIildKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[2] = new LiteralStackNode(10395, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[4] = new CharStackNode(10398, 4, new int[][]{{0,0}}, null, null); - tmp[0] = new CharStackNode(10393, 0, new int[][]{{0,0}}, null, null); - tmp[3] = new ListStackNode(10397, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(10396, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[1] = new LiteralStackNode(10394, 1, cHJvZChsaXQoIlxcaXRlci1zdGFyKHNvcnQoXCJUb3BsZXZlbFwiKSkiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkyLDkyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NSw0NSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDg0LDg0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTIsMTEyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTgsMTE4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {92,105,116,101,114,45,115,116,97,114,40,115,111,114,116,40,34,84,111,112,108,101,118,101,108,34,41,41}, null, null); + tmp[2] = new LiteralStackNode(10332, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[4] = new CharStackNode(10335, 4, new int[][]{{0,0}}, null, null); + tmp[0] = new CharStackNode(10330, 0, new int[][]{{0,0}}, null, null); + tmp[3] = new ListStackNode(10334, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(10333, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[1] = new LiteralStackNode(10331, 1, cHJvZChsaXQoIlxcaXRlci1zdGFyKHNvcnQoXCJUb3BsZXZlbFwiKSkiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkyLDkyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NSw0NSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDg0LDg0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTIsMTEyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTgsMTE4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {92,105,116,101,114,45,115,116,97,114,40,115,111,114,116,40,34,84,111,112,108,101,118,101,108,34,41,41}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJUb3BsZXZlbCIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoIlxcaXRlci1zdGFyKHNvcnQoXCJUb3BsZXZlbFwiKSkiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKFxpdGVyLXN0YXItc2Vwcyhzb3J0KCJUb3BsZXZlbCIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIildKSkpfSk00, tmp); } public static void init(ExpectBuilder builder){ @@ -11449,349 +11434,349 @@ protected static class Statement { protected static final void _init_cHJvZChsYWJlbCgidHJ5RmluYWxseSIsc29ydCgiU3RhdGVtZW50IikpLFtsaXQoInRyeSIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgiYm9keSIsc29ydCgiU3RhdGVtZW50IikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgiaGFuZGxlcnMiLFxpdGVyLXNlcHMoc29ydCgiQ2F0Y2giKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpXSkpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoImZpbmFsbHkiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImZpbmFsbHlCb2R5Iixjb25kaXRpb25hbChzb3J0KCJTdGF0ZW1lbnQiKSx7ZXhjZXB0KCJ2YXJpYWJsZURlY2xhcmF0aW9uIiksZXhjZXB0KCJmdW5jdGlvbkRlY2xhcmF0aW9uIil9KSldLHt0YWcoImJyZWFrYWJsZSIoKSl9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[9]; - tmp[1] = new NonTerminalStackNode(10646, 1, "layouts_LAYOUTLIST", null, null); - tmp[5] = new NonTerminalStackNode(10654, 5, "layouts_LAYOUTLIST", null, null); - tmp[7] = new NonTerminalStackNode(10656, 7, "layouts_LAYOUTLIST", null, null); - tmp[3] = new NonTerminalStackNode(10649, 3, "layouts_LAYOUTLIST", null, null); - tmp[8] = new NonTerminalStackNode(10658, 8, "Statement", null, null); - tmp[6] = new LiteralStackNode(10655, 6, cHJvZChsaXQoImZpbmFsbHkiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEwMiwxMDIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMjEsMTIxKV0pXSx7fSk00, new int[] {102,105,110,97,108,108,121}, null, null); - tmp[2] = new NonTerminalStackNode(10647, 2, "Statement", null, null); - tmp[4] = new SeparatedListStackNode(10652, 4, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIkNhdGNoIiksW2xheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(10650, 0, "Catch", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(10651, 1, "layouts_LAYOUTLIST", null, null)}, true, null, null); - tmp[0] = new LiteralStackNode(10645, 0, cHJvZChsaXQoInRyeSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTIxLDEyMSldKV0se30p, new int[] {116,114,121}, null, null); + tmp[1] = new NonTerminalStackNode(10583, 1, "layouts_LAYOUTLIST", null, null); + tmp[5] = new NonTerminalStackNode(10591, 5, "layouts_LAYOUTLIST", null, null); + tmp[7] = new NonTerminalStackNode(10593, 7, "layouts_LAYOUTLIST", null, null); + tmp[3] = new NonTerminalStackNode(10586, 3, "layouts_LAYOUTLIST", null, null); + tmp[8] = new NonTerminalStackNode(10595, 8, "Statement", null, null); + tmp[6] = new LiteralStackNode(10592, 6, cHJvZChsaXQoImZpbmFsbHkiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEwMiwxMDIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMjEsMTIxKV0pXSx7fSk00, new int[] {102,105,110,97,108,108,121}, null, null); + tmp[2] = new NonTerminalStackNode(10584, 2, "Statement", null, null); + tmp[4] = new SeparatedListStackNode(10589, 4, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIkNhdGNoIiksW2xheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(10587, 0, "Catch", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(10588, 1, "layouts_LAYOUTLIST", null, null)}, true, null, null); + tmp[0] = new LiteralStackNode(10582, 0, cHJvZChsaXQoInRyeSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTIxLDEyMSldKV0se30p, new int[] {116,114,121}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgidHJ5RmluYWxseSIsc29ydCgiU3RhdGVtZW50IikpLFtsaXQoInRyeSIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgiYm9keSIsc29ydCgiU3RhdGVtZW50IikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgiaGFuZGxlcnMiLFxpdGVyLXNlcHMoc29ydCgiQ2F0Y2giKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpXSkpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoImZpbmFsbHkiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImZpbmFsbHlCb2R5Iixjb25kaXRpb25hbChzb3J0KCJTdGF0ZW1lbnQiKSx7ZXhjZXB0KCJ2YXJpYWJsZURlY2xhcmF0aW9uIiksZXhjZXB0KCJmdW5jdGlvbkRlY2xhcmF0aW9uIil9KSldLHt0YWcoImJyZWFrYWJsZSIoKSl9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgiY29udGludWUiLHNvcnQoIlN0YXRlbWVudCIpKSxbbGl0KCJjb250aW51ZSIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgidGFyZ2V0Iixzb3J0KCJUYXJnZXQiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiOyIpXSx7dGFnKCJicmVha2FibGUiKCkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[3] = new NonTerminalStackNode(10526, 3, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(10523, 1, "layouts_LAYOUTLIST", null, null); - tmp[4] = new LiteralStackNode(10527, 4, cHJvZChsaXQoIjsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU5LDU5KV0pXSx7fSk00, new int[] {59}, null, null); - tmp[2] = new NonTerminalStackNode(10524, 2, "Target", null, null); - tmp[0] = new LiteralStackNode(10522, 0, cHJvZChsaXQoImNvbnRpbnVlIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg5OSw5OSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE3LDExNyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKV0se30p, new int[] {99,111,110,116,105,110,117,101}, null, null); + tmp[3] = new NonTerminalStackNode(10463, 3, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(10460, 1, "layouts_LAYOUTLIST", null, null); + tmp[4] = new LiteralStackNode(10464, 4, cHJvZChsaXQoIjsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU5LDU5KV0pXSx7fSk00, new int[] {59}, null, null); + tmp[2] = new NonTerminalStackNode(10461, 2, "Target", null, null); + tmp[0] = new LiteralStackNode(10459, 0, cHJvZChsaXQoImNvbnRpbnVlIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg5OSw5OSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE3LDExNyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKV0se30p, new int[] {99,111,110,116,105,110,117,101}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiY29udGludWUiLHNvcnQoIlN0YXRlbWVudCIpKSxbbGl0KCJjb250aW51ZSIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgidGFyZ2V0Iixzb3J0KCJUYXJnZXQiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiOyIpXSx7dGFnKCJicmVha2FibGUiKCkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiaW5zZXJ0Iixzb3J0KCJTdGF0ZW1lbnQiKSksW2xpdCgiaW5zZXJ0IiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJkYXRhVGFyZ2V0Iixzb3J0KCJEYXRhVGFyZ2V0IikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgic3RhdGVtZW50Iixjb25kaXRpb25hbChzb3J0KCJTdGF0ZW1lbnQiKSx7ZXhjZXB0KCJ2YXJpYWJsZURlY2xhcmF0aW9uIiksZXhjZXB0KCJmdW5jdGlvbkRlY2xhcmF0aW9uIil9KSldLHt0YWcoImJyZWFrYWJsZSIoKSl9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[1] = new NonTerminalStackNode(10582, 1, "layouts_LAYOUTLIST", null, null); - tmp[3] = new NonTerminalStackNode(10585, 3, "layouts_LAYOUTLIST", null, null); - tmp[0] = new LiteralStackNode(10581, 0, cHJvZChsaXQoImluc2VydCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKV0se30p, new int[] {105,110,115,101,114,116}, null, null); - tmp[2] = new NonTerminalStackNode(10583, 2, "DataTarget", null, null); - tmp[4] = new NonTerminalStackNode(10587, 4, "Statement", null, null); + tmp[1] = new NonTerminalStackNode(10519, 1, "layouts_LAYOUTLIST", null, null); + tmp[3] = new NonTerminalStackNode(10522, 3, "layouts_LAYOUTLIST", null, null); + tmp[0] = new LiteralStackNode(10518, 0, cHJvZChsaXQoImluc2VydCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKV0se30p, new int[] {105,110,115,101,114,116}, null, null); + tmp[2] = new NonTerminalStackNode(10520, 2, "DataTarget", null, null); + tmp[4] = new NonTerminalStackNode(10524, 4, "Statement", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiaW5zZXJ0Iixzb3J0KCJTdGF0ZW1lbnQiKSksW2xpdCgiaW5zZXJ0IiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJkYXRhVGFyZ2V0Iixzb3J0KCJEYXRhVGFyZ2V0IikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgic3RhdGVtZW50Iixjb25kaXRpb25hbChzb3J0KCJTdGF0ZW1lbnQiKSx7ZXhjZXB0KCJ2YXJpYWJsZURlY2xhcmF0aW9uIiksZXhjZXB0KCJmdW5jdGlvbkRlY2xhcmF0aW9uIil9KSldLHt0YWcoImJyZWFrYWJsZSIoKSl9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgiYXNzaWdubWVudCIsc29ydCgiU3RhdGVtZW50IikpLFtsYWJlbCgiYXNzaWduYWJsZSIsc29ydCgiQXNzaWduYWJsZSIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoIm9wZXJhdG9yIixzb3J0KCJBc3NpZ25tZW50IikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgic3RhdGVtZW50Iixjb25kaXRpb25hbChzb3J0KCJTdGF0ZW1lbnQiKSx7ZXhjZXB0KCJ2YXJpYWJsZURlY2xhcmF0aW9uIiksZXhjZXB0KCJmdW5jdGlvbkRlY2xhcmF0aW9uIil9KSldLHt0YWcoImJyZWFrYWJsZSIoKSl9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[1] = new NonTerminalStackNode(10532, 1, "layouts_LAYOUTLIST", null, null); - tmp[3] = new NonTerminalStackNode(10535, 3, "layouts_LAYOUTLIST", null, null); - tmp[0] = new NonTerminalStackNode(10530, 0, "Assignable", null, null); - tmp[2] = new NonTerminalStackNode(10533, 2, "Assignment", null, null); - tmp[4] = new NonTerminalStackNode(10537, 4, "Statement", null, null); + tmp[1] = new NonTerminalStackNode(10469, 1, "layouts_LAYOUTLIST", null, null); + tmp[3] = new NonTerminalStackNode(10472, 3, "layouts_LAYOUTLIST", null, null); + tmp[0] = new NonTerminalStackNode(10467, 0, "Assignable", null, null); + tmp[2] = new NonTerminalStackNode(10470, 2, "Assignment", null, null); + tmp[4] = new NonTerminalStackNode(10474, 4, "Statement", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiYXNzaWdubWVudCIsc29ydCgiU3RhdGVtZW50IikpLFtsYWJlbCgiYXNzaWduYWJsZSIsc29ydCgiQXNzaWduYWJsZSIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoIm9wZXJhdG9yIixzb3J0KCJBc3NpZ25tZW50IikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgic3RhdGVtZW50Iixjb25kaXRpb25hbChzb3J0KCJTdGF0ZW1lbnQiKSx7ZXhjZXB0KCJ2YXJpYWJsZURlY2xhcmF0aW9uIiksZXhjZXB0KCJmdW5jdGlvbkRlY2xhcmF0aW9uIil9KSldLHt0YWcoImJyZWFrYWJsZSIoKSl9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgidHJ5Iixzb3J0KCJTdGF0ZW1lbnQiKSksW2xpdCgidHJ5IiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJib2R5Iixzb3J0KCJTdGF0ZW1lbnQiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJoYW5kbGVycyIsXGl0ZXItc2Vwcyhzb3J0KCJDYXRjaCIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIildKSldLHthc3NvYyhcbm9uLWFzc29jKCkpLHRhZygiYnJlYWthYmxlIigpKX0p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[3] = new NonTerminalStackNode(10667, 3, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(10664, 1, "layouts_LAYOUTLIST", null, null); - tmp[0] = new LiteralStackNode(10663, 0, cHJvZChsaXQoInRyeSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTIxLDEyMSldKV0se30p, new int[] {116,114,121}, null, null); - tmp[4] = new SeparatedListStackNode(10670, 4, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIkNhdGNoIiksW2xheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(10668, 0, "Catch", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(10669, 1, "layouts_LAYOUTLIST", null, null)}, true, null, null); - tmp[2] = new NonTerminalStackNode(10665, 2, "Statement", null, null); + tmp[3] = new NonTerminalStackNode(10604, 3, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(10601, 1, "layouts_LAYOUTLIST", null, null); + tmp[0] = new LiteralStackNode(10600, 0, cHJvZChsaXQoInRyeSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTIxLDEyMSldKV0se30p, new int[] {116,114,121}, null, null); + tmp[4] = new SeparatedListStackNode(10607, 4, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIkNhdGNoIiksW2xheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(10605, 0, "Catch", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(10606, 1, "layouts_LAYOUTLIST", null, null)}, true, null, null); + tmp[2] = new NonTerminalStackNode(10602, 2, "Statement", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgidHJ5Iixzb3J0KCJTdGF0ZW1lbnQiKSksW2xpdCgidHJ5IiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJib2R5Iixzb3J0KCJTdGF0ZW1lbnQiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJoYW5kbGVycyIsXGl0ZXItc2Vwcyhzb3J0KCJDYXRjaCIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIildKSldLHthc3NvYyhcbm9uLWFzc29jKCkpLHRhZygiYnJlYWthYmxlIigpKX0p, tmp); } protected static final void _init_cHJvZChsYWJlbCgidmFyaWFibGVEZWNsYXJhdGlvbiIsc29ydCgiU3RhdGVtZW50IikpLFtsYWJlbCgiZGVjbGFyYXRpb24iLHNvcnQoIkxvY2FsVmFyaWFibGVEZWNsYXJhdGlvbiIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCI7IildLHt0YWcoImJyZWFrYWJsZSIoKSl9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[3]; - tmp[1] = new NonTerminalStackNode(10543, 1, "layouts_LAYOUTLIST", null, null); - tmp[0] = new NonTerminalStackNode(10541, 0, "LocalVariableDeclaration", null, null); - tmp[2] = new LiteralStackNode(10544, 2, cHJvZChsaXQoIjsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU5LDU5KV0pXSx7fSk00, new int[] {59}, null, null); + tmp[1] = new NonTerminalStackNode(10480, 1, "layouts_LAYOUTLIST", null, null); + tmp[0] = new NonTerminalStackNode(10478, 0, "LocalVariableDeclaration", null, null); + tmp[2] = new LiteralStackNode(10481, 2, cHJvZChsaXQoIjsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU5LDU5KV0pXSx7fSk00, new int[] {59}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgidmFyaWFibGVEZWNsYXJhdGlvbiIsc29ydCgiU3RhdGVtZW50IikpLFtsYWJlbCgiZGVjbGFyYXRpb24iLHNvcnQoIkxvY2FsVmFyaWFibGVEZWNsYXJhdGlvbiIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCI7IildLHt0YWcoImJyZWFrYWJsZSIoKSl9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgidmlzaXQiLHNvcnQoIlN0YXRlbWVudCIpKSxbbGFiZWwoImxhYmVsIixzb3J0KCJMYWJlbCIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInZpc2l0Iixzb3J0KCJWaXNpdCIpKV0se3RhZygiYnJlYWthYmxlIigpKX0p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[3]; - tmp[2] = new NonTerminalStackNode(10550, 2, "Visit", null, null); - tmp[0] = new NonTerminalStackNode(10547, 0, "Label", null, null); - tmp[1] = new NonTerminalStackNode(10549, 1, "layouts_LAYOUTLIST", null, null); + tmp[2] = new NonTerminalStackNode(10487, 2, "Visit", null, null); + tmp[0] = new NonTerminalStackNode(10484, 0, "Label", null, null); + tmp[1] = new NonTerminalStackNode(10486, 1, "layouts_LAYOUTLIST", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgidmlzaXQiLHNvcnQoIlN0YXRlbWVudCIpKSxbbGFiZWwoImxhYmVsIixzb3J0KCJMYWJlbCIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInZpc2l0Iixzb3J0KCJWaXNpdCIpKV0se3RhZygiYnJlYWthYmxlIigpKX0p, tmp); } protected static final void _init_cHJvZChsYWJlbCgidGhyb3ciLHNvcnQoIlN0YXRlbWVudCIpKSxbbGl0KCJ0aHJvdyIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgic3RhdGVtZW50Iixjb25kaXRpb25hbChzb3J0KCJTdGF0ZW1lbnQiKSx7ZXhjZXB0KCJ2YXJpYWJsZURlY2xhcmF0aW9uIiksZXhjZXB0KCJmdW5jdGlvbkRlY2xhcmF0aW9uIil9KSldLHt0YWcoImJyZWFrYWJsZSIoKSl9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[3]; - tmp[2] = new NonTerminalStackNode(10594, 2, "Statement", null, null); - tmp[0] = new LiteralStackNode(10591, 0, cHJvZChsaXQoInRocm93IiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDQsMTA0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTksMTE5KV0pXSx7fSk00, new int[] {116,104,114,111,119}, null, null); - tmp[1] = new NonTerminalStackNode(10592, 1, "layouts_LAYOUTLIST", null, null); + tmp[2] = new NonTerminalStackNode(10531, 2, "Statement", null, null); + tmp[0] = new LiteralStackNode(10528, 0, cHJvZChsaXQoInRocm93IiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDQsMTA0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTksMTE5KV0pXSx7fSk00, new int[] {116,104,114,111,119}, null, null); + tmp[1] = new NonTerminalStackNode(10529, 1, "layouts_LAYOUTLIST", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgidGhyb3ciLHNvcnQoIlN0YXRlbWVudCIpKSxbbGl0KCJ0aHJvdyIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgic3RhdGVtZW50Iixjb25kaXRpb25hbChzb3J0KCJTdGF0ZW1lbnQiKSx7ZXhjZXB0KCJ2YXJpYWJsZURlY2xhcmF0aW9uIiksZXhjZXB0KCJmdW5jdGlvbkRlY2xhcmF0aW9uIil9KSldLHt0YWcoImJyZWFrYWJsZSIoKSl9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgic29sdmUiLHNvcnQoIlN0YXRlbWVudCIpKSxbbGl0KCJzb2x2ZSIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIigiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInZhcmlhYmxlcyIsXGl0ZXItc2Vwcyhzb3J0KCJRdWFsaWZpZWROYW1lIiksW2xheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIiwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIildKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJib3VuZCIsc29ydCgiQm91bmQiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiKSIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgiYm9keSIsY29uZGl0aW9uYWwoc29ydCgiU3RhdGVtZW50Iikse2V4Y2VwdCgidmFyaWFibGVEZWNsYXJhdGlvbiIpLGV4Y2VwdCgiZnVuY3Rpb25EZWNsYXJhdGlvbiIpfSkpXSx7dGFnKCJicmVha2FibGUiKCkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[11]; - tmp[4] = new SeparatedListStackNode(10562, 4, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIlF1YWxpZmllZE5hbWUiKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(10558, 0, "QualifiedName", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(10559, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(10560, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(10561, 3, "layouts_LAYOUTLIST", null, null)}, true, null, null); - tmp[6] = new NonTerminalStackNode(10565, 6, "Bound", null, null); - tmp[2] = new LiteralStackNode(10556, 2, cHJvZChsaXQoIigiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pXSx7fSk00, new int[] {40}, null, null); - tmp[10] = new NonTerminalStackNode(10571, 10, "Statement", null, null); - tmp[0] = new LiteralStackNode(10554, 0, cHJvZChsaXQoInNvbHZlIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTgsMTE4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pXSx7fSk00, new int[] {115,111,108,118,101}, null, null); - tmp[9] = new NonTerminalStackNode(10569, 9, "layouts_LAYOUTLIST", null, null); - tmp[3] = new NonTerminalStackNode(10557, 3, "layouts_LAYOUTLIST", null, null); - tmp[5] = new NonTerminalStackNode(10564, 5, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(10555, 1, "layouts_LAYOUTLIST", null, null); - tmp[7] = new NonTerminalStackNode(10567, 7, "layouts_LAYOUTLIST", null, null); - tmp[8] = new LiteralStackNode(10568, 8, cHJvZChsaXQoIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {41}, null, null); + tmp[4] = new SeparatedListStackNode(10499, 4, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIlF1YWxpZmllZE5hbWUiKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(10495, 0, "QualifiedName", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(10496, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(10497, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(10498, 3, "layouts_LAYOUTLIST", null, null)}, true, null, null); + tmp[6] = new NonTerminalStackNode(10502, 6, "Bound", null, null); + tmp[2] = new LiteralStackNode(10493, 2, cHJvZChsaXQoIigiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pXSx7fSk00, new int[] {40}, null, null); + tmp[10] = new NonTerminalStackNode(10508, 10, "Statement", null, null); + tmp[0] = new LiteralStackNode(10491, 0, cHJvZChsaXQoInNvbHZlIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTgsMTE4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pXSx7fSk00, new int[] {115,111,108,118,101}, null, null); + tmp[9] = new NonTerminalStackNode(10506, 9, "layouts_LAYOUTLIST", null, null); + tmp[3] = new NonTerminalStackNode(10494, 3, "layouts_LAYOUTLIST", null, null); + tmp[5] = new NonTerminalStackNode(10501, 5, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(10492, 1, "layouts_LAYOUTLIST", null, null); + tmp[7] = new NonTerminalStackNode(10504, 7, "layouts_LAYOUTLIST", null, null); + tmp[8] = new LiteralStackNode(10505, 8, cHJvZChsaXQoIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {41}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgic29sdmUiLHNvcnQoIlN0YXRlbWVudCIpKSxbbGl0KCJzb2x2ZSIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIigiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInZhcmlhYmxlcyIsXGl0ZXItc2Vwcyhzb3J0KCJRdWFsaWZpZWROYW1lIiksW2xheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIiwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIildKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJib3VuZCIsc29ydCgiQm91bmQiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiKSIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgiYm9keSIsY29uZGl0aW9uYWwoc29ydCgiU3RhdGVtZW50Iikse2V4Y2VwdCgidmFyaWFibGVEZWNsYXJhdGlvbiIpLGV4Y2VwdCgiZnVuY3Rpb25EZWNsYXJhdGlvbiIpfSkpXSx7dGFnKCJicmVha2FibGUiKCkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiZmlsdGVyIixzb3J0KCJTdGF0ZW1lbnQiKSksW2xpdCgiZmlsdGVyIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiOyIpXSx7dGFnKCJicmVha2FibGUiKCkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[3]; - tmp[2] = new LiteralStackNode(10577, 2, cHJvZChsaXQoIjsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU5LDU5KV0pXSx7fSk00, new int[] {59}, null, null); - tmp[0] = new LiteralStackNode(10575, 0, cHJvZChsaXQoImZpbHRlciIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTAyLDEwMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKV0se30p, new int[] {102,105,108,116,101,114}, null, null); - tmp[1] = new NonTerminalStackNode(10576, 1, "layouts_LAYOUTLIST", null, null); + tmp[2] = new LiteralStackNode(10514, 2, cHJvZChsaXQoIjsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU5LDU5KV0pXSx7fSk00, new int[] {59}, null, null); + tmp[0] = new LiteralStackNode(10512, 0, cHJvZChsaXQoImZpbHRlciIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTAyLDEwMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKV0se30p, new int[] {102,105,108,116,101,114}, null, null); + tmp[1] = new NonTerminalStackNode(10513, 1, "layouts_LAYOUTLIST", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiZmlsdGVyIixzb3J0KCJTdGF0ZW1lbnQiKSksW2xpdCgiZmlsdGVyIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiOyIpXSx7dGFnKCJicmVha2FibGUiKCkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgicmV0dXJuIixzb3J0KCJTdGF0ZW1lbnQiKSksW2xpdCgicmV0dXJuIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJzdGF0ZW1lbnQiLGNvbmRpdGlvbmFsKHNvcnQoIlN0YXRlbWVudCIpLHtleGNlcHQoInZhcmlhYmxlRGVjbGFyYXRpb24iKSxleGNlcHQoImZ1bmN0aW9uRGVjbGFyYXRpb24iKX0pKV0se3RhZygiYnJlYWthYmxlIigpKX0p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[3]; - tmp[0] = new LiteralStackNode(10608, 0, cHJvZChsaXQoInJldHVybiIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE3LDExNyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKV0se30p, new int[] {114,101,116,117,114,110}, null, null); - tmp[2] = new NonTerminalStackNode(10611, 2, "Statement", null, null); - tmp[1] = new NonTerminalStackNode(10609, 1, "layouts_LAYOUTLIST", null, null); + tmp[0] = new LiteralStackNode(10545, 0, cHJvZChsaXQoInJldHVybiIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE3LDExNyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKV0se30p, new int[] {114,101,116,117,114,110}, null, null); + tmp[2] = new NonTerminalStackNode(10548, 2, "Statement", null, null); + tmp[1] = new NonTerminalStackNode(10546, 1, "layouts_LAYOUTLIST", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgicmV0dXJuIixzb3J0KCJTdGF0ZW1lbnQiKSksW2xpdCgicmV0dXJuIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJzdGF0ZW1lbnQiLGNvbmRpdGlvbmFsKHNvcnQoIlN0YXRlbWVudCIpLHtleGNlcHQoInZhcmlhYmxlRGVjbGFyYXRpb24iKSxleGNlcHQoImZ1bmN0aW9uRGVjbGFyYXRpb24iKX0pKV0se3RhZygiYnJlYWthYmxlIigpKX0p, tmp); } protected static final void _init_cHJvZChsYWJlbCgic3dpdGNoIixzb3J0KCJTdGF0ZW1lbnQiKSksW2xhYmVsKCJsYWJlbCIsc29ydCgiTGFiZWwiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgic3dpdGNoIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiKCIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgiZXhwcmVzc2lvbiIsc29ydCgiRXhwcmVzc2lvbiIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIpIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgieyIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgiY2FzZXMiLFxpdGVyLXNlcHMoc29ydCgiQ2FzZSIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIildKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgifSIpXSx7dGFnKCJicmVha2FibGUiKCkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[15]; - tmp[7] = new NonTerminalStackNode(10624, 7, "layouts_LAYOUTLIST", null, null); - tmp[5] = new NonTerminalStackNode(10621, 5, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(10617, 1, "layouts_LAYOUTLIST", null, null); - tmp[13] = new NonTerminalStackNode(10633, 13, "layouts_LAYOUTLIST", null, null); - tmp[11] = new NonTerminalStackNode(10628, 11, "layouts_LAYOUTLIST", null, null); - tmp[3] = new NonTerminalStackNode(10619, 3, "layouts_LAYOUTLIST", null, null); - tmp[8] = new LiteralStackNode(10625, 8, cHJvZChsaXQoIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {41}, null, null); - tmp[6] = new NonTerminalStackNode(10622, 6, "Expression", null, null); - tmp[2] = new LiteralStackNode(10618, 2, cHJvZChsaXQoInN3aXRjaCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE5LDExOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTksOTkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNCwxMDQpXSldLHt9KQ0000, new int[] {115,119,105,116,99,104}, null, null); - tmp[14] = new LiteralStackNode(10634, 14, cHJvZChsaXQoIn0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyNSwxMjUpXSldLHt9KQ0000, new int[] {125}, null, null); - tmp[12] = new SeparatedListStackNode(10631, 12, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIkNhc2UiKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpXSkp, new NonTerminalStackNode(10629, 0, "Case", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(10630, 1, "layouts_LAYOUTLIST", null, null)}, true, null, null); - tmp[4] = new LiteralStackNode(10620, 4, cHJvZChsaXQoIigiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pXSx7fSk00, new int[] {40}, null, null); - tmp[9] = new NonTerminalStackNode(10626, 9, "layouts_LAYOUTLIST", null, null); - tmp[10] = new LiteralStackNode(10627, 10, cHJvZChsaXQoInsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyMywxMjMpXSldLHt9KQ0000, new int[] {123}, null, null); - tmp[0] = new NonTerminalStackNode(10615, 0, "Label", null, null); + tmp[7] = new NonTerminalStackNode(10561, 7, "layouts_LAYOUTLIST", null, null); + tmp[5] = new NonTerminalStackNode(10558, 5, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(10554, 1, "layouts_LAYOUTLIST", null, null); + tmp[13] = new NonTerminalStackNode(10570, 13, "layouts_LAYOUTLIST", null, null); + tmp[11] = new NonTerminalStackNode(10565, 11, "layouts_LAYOUTLIST", null, null); + tmp[3] = new NonTerminalStackNode(10556, 3, "layouts_LAYOUTLIST", null, null); + tmp[8] = new LiteralStackNode(10562, 8, cHJvZChsaXQoIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {41}, null, null); + tmp[6] = new NonTerminalStackNode(10559, 6, "Expression", null, null); + tmp[2] = new LiteralStackNode(10555, 2, cHJvZChsaXQoInN3aXRjaCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE5LDExOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTksOTkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNCwxMDQpXSldLHt9KQ0000, new int[] {115,119,105,116,99,104}, null, null); + tmp[14] = new LiteralStackNode(10571, 14, cHJvZChsaXQoIn0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyNSwxMjUpXSldLHt9KQ0000, new int[] {125}, null, null); + tmp[12] = new SeparatedListStackNode(10568, 12, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIkNhc2UiKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpXSkp, new NonTerminalStackNode(10566, 0, "Case", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(10567, 1, "layouts_LAYOUTLIST", null, null)}, true, null, null); + tmp[4] = new LiteralStackNode(10557, 4, cHJvZChsaXQoIigiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pXSx7fSk00, new int[] {40}, null, null); + tmp[9] = new NonTerminalStackNode(10563, 9, "layouts_LAYOUTLIST", null, null); + tmp[10] = new LiteralStackNode(10564, 10, cHJvZChsaXQoInsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyMywxMjMpXSldLHt9KQ0000, new int[] {123}, null, null); + tmp[0] = new NonTerminalStackNode(10552, 0, "Label", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgic3dpdGNoIixzb3J0KCJTdGF0ZW1lbnQiKSksW2xhYmVsKCJsYWJlbCIsc29ydCgiTGFiZWwiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgic3dpdGNoIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiKCIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgiZXhwcmVzc2lvbiIsc29ydCgiRXhwcmVzc2lvbiIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIpIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgieyIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgiY2FzZXMiLFxpdGVyLXNlcHMoc29ydCgiQ2FzZSIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIildKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgifSIpXSx7dGFnKCJicmVha2FibGUiKCkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiZmFpbCIsc29ydCgiU3RhdGVtZW50IikpLFtsaXQoImZhaWwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInRhcmdldCIsc29ydCgiVGFyZ2V0IikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIjsiKV0se3RhZygiYnJlYWthYmxlIigpKX0p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[1] = new NonTerminalStackNode(10638, 1, "layouts_LAYOUTLIST", null, null); - tmp[3] = new NonTerminalStackNode(10641, 3, "layouts_LAYOUTLIST", null, null); - tmp[2] = new NonTerminalStackNode(10639, 2, "Target", null, null); - tmp[4] = new LiteralStackNode(10642, 4, cHJvZChsaXQoIjsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU5LDU5KV0pXSx7fSk00, new int[] {59}, null, null); - tmp[0] = new LiteralStackNode(10637, 0, cHJvZChsaXQoImZhaWwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEwMiwxMDIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pXSx7fSk00, new int[] {102,97,105,108}, null, null); + tmp[1] = new NonTerminalStackNode(10575, 1, "layouts_LAYOUTLIST", null, null); + tmp[3] = new NonTerminalStackNode(10578, 3, "layouts_LAYOUTLIST", null, null); + tmp[2] = new NonTerminalStackNode(10576, 2, "Target", null, null); + tmp[4] = new LiteralStackNode(10579, 4, cHJvZChsaXQoIjsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU5LDU5KV0pXSx7fSk00, new int[] {59}, null, null); + tmp[0] = new LiteralStackNode(10574, 0, cHJvZChsaXQoImZhaWwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEwMiwxMDIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pXSx7fSk00, new int[] {102,97,105,108}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiZmFpbCIsc29ydCgiU3RhdGVtZW50IikpLFtsaXQoImZhaWwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInRhcmdldCIsc29ydCgiVGFyZ2V0IikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIjsiKV0se3RhZygiYnJlYWthYmxlIigpKX0p, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJTdGF0ZW1lbnQiKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJpdGVyKHNvcnQoXCJTdGF0ZW1lbnRcIikpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihcaXRlci1zZXBzKHNvcnQoIlN0YXRlbWVudCIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIildKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[3] = new ListStackNode(10678, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(10677, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[1] = new LiteralStackNode(10675, 1, cHJvZChsaXQoIml0ZXIoc29ydChcIlN0YXRlbWVudFwiKSkiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDgzLDgzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {105,116,101,114,40,115,111,114,116,40,34,83,116,97,116,101,109,101,110,116,34,41,41}, null, null); - tmp[4] = new CharStackNode(10679, 4, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(10676, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[0] = new CharStackNode(10674, 0, new int[][]{{0,0}}, null, null); + tmp[3] = new ListStackNode(10615, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(10614, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[1] = new LiteralStackNode(10612, 1, cHJvZChsaXQoIml0ZXIoc29ydChcIlN0YXRlbWVudFwiKSkiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDgzLDgzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {105,116,101,114,40,115,111,114,116,40,34,83,116,97,116,101,109,101,110,116,34,41,41}, null, null); + tmp[4] = new CharStackNode(10616, 4, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(10613, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[0] = new CharStackNode(10611, 0, new int[][]{{0,0}}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJTdGF0ZW1lbnQiKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJpdGVyKHNvcnQoXCJTdGF0ZW1lbnRcIikpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihcaXRlci1zZXBzKHNvcnQoIlN0YXRlbWVudCIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIildKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiZXhwcmVzc2lvbiIsc29ydCgiU3RhdGVtZW50IikpLFtsYWJlbCgiZXhwcmVzc2lvbiIsY29uZGl0aW9uYWwoc29ydCgiRXhwcmVzc2lvbiIpLHtleGNlcHQoIm5vbkVtcHR5QmxvY2siKSxleGNlcHQoInZpc2l0Iil9KSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiOyIpXSx7dGFnKCJicmVha2FibGUiKCkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[3]; - tmp[1] = new NonTerminalStackNode(10688, 1, "layouts_LAYOUTLIST", null, null); - tmp[2] = new LiteralStackNode(10689, 2, cHJvZChsaXQoIjsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU5LDU5KV0pXSx7fSk00, new int[] {59}, null, null); - tmp[0] = new NonTerminalStackNode(10686, 0, "Expression", null, null); + tmp[1] = new NonTerminalStackNode(10625, 1, "layouts_LAYOUTLIST", null, null); + tmp[2] = new LiteralStackNode(10626, 2, cHJvZChsaXQoIjsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU5LDU5KV0pXSx7fSk00, new int[] {59}, null, null); + tmp[0] = new NonTerminalStackNode(10623, 0, "Expression", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiZXhwcmVzc2lvbiIsc29ydCgiU3RhdGVtZW50IikpLFtsYWJlbCgiZXhwcmVzc2lvbiIsY29uZGl0aW9uYWwoc29ydCgiRXhwcmVzc2lvbiIpLHtleGNlcHQoIm5vbkVtcHR5QmxvY2siKSxleGNlcHQoInZpc2l0Iil9KSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiOyIpXSx7dGFnKCJicmVha2FibGUiKCkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiYXNzZXJ0Iixzb3J0KCJTdGF0ZW1lbnQiKSksW2xpdCgiYXNzZXJ0IiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJleHByZXNzaW9uIixzb3J0KCJFeHByZXNzaW9uIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIjsiKV0se3RhZygiYnJlYWthYmxlIigpKX0p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[3] = new NonTerminalStackNode(10696, 3, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(10693, 1, "layouts_LAYOUTLIST", null, null); - tmp[4] = new LiteralStackNode(10697, 4, cHJvZChsaXQoIjsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU5LDU5KV0pXSx7fSk00, new int[] {59}, null, null); - tmp[2] = new NonTerminalStackNode(10694, 2, "Expression", null, null); - tmp[0] = new LiteralStackNode(10692, 0, cHJvZChsaXQoImFzc2VydCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSldLHt9KQ0000, new int[] {97,115,115,101,114,116}, null, null); + tmp[3] = new NonTerminalStackNode(10633, 3, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(10630, 1, "layouts_LAYOUTLIST", null, null); + tmp[4] = new LiteralStackNode(10634, 4, cHJvZChsaXQoIjsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU5LDU5KV0pXSx7fSk00, new int[] {59}, null, null); + tmp[2] = new NonTerminalStackNode(10631, 2, "Expression", null, null); + tmp[0] = new LiteralStackNode(10629, 0, cHJvZChsaXQoImFzc2VydCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSldLHt9KQ0000, new int[] {97,115,115,101,114,116}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiYXNzZXJ0Iixzb3J0KCJTdGF0ZW1lbnQiKSksW2xpdCgiYXNzZXJ0IiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJleHByZXNzaW9uIixzb3J0KCJFeHByZXNzaW9uIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIjsiKV0se3RhZygiYnJlYWthYmxlIigpKX0p, tmp); } protected static final void _init_cHJvZChsYWJlbCgibm9uRW1wdHlCbG9jayIsc29ydCgiU3RhdGVtZW50IikpLFtsYWJlbCgibGFiZWwiLHNvcnQoIkxhYmVsIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoInsiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInN0YXRlbWVudHMiLFxpdGVyLXNlcHMoc29ydCgiU3RhdGVtZW50IiksW2xheW91dHMoIkxBWU9VVExJU1QiKV0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJ9IildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[7]; - tmp[3] = new NonTerminalStackNode(10704, 3, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(10702, 1, "layouts_LAYOUTLIST", null, null); - tmp[5] = new NonTerminalStackNode(10709, 5, "layouts_LAYOUTLIST", null, null); - tmp[4] = new SeparatedListStackNode(10707, 4, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIlN0YXRlbWVudCIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIildKSk00, new NonTerminalStackNode(10705, 0, "Statement", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(10706, 1, "layouts_LAYOUTLIST", null, null)}, true, null, null); - tmp[2] = new LiteralStackNode(10703, 2, cHJvZChsaXQoInsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyMywxMjMpXSldLHt9KQ0000, new int[] {123}, null, null); - tmp[6] = new LiteralStackNode(10710, 6, cHJvZChsaXQoIn0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyNSwxMjUpXSldLHt9KQ0000, new int[] {125}, null, null); - tmp[0] = new NonTerminalStackNode(10700, 0, "Label", null, null); + tmp[3] = new NonTerminalStackNode(10641, 3, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(10639, 1, "layouts_LAYOUTLIST", null, null); + tmp[5] = new NonTerminalStackNode(10646, 5, "layouts_LAYOUTLIST", null, null); + tmp[4] = new SeparatedListStackNode(10644, 4, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIlN0YXRlbWVudCIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIildKSk00, new NonTerminalStackNode(10642, 0, "Statement", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(10643, 1, "layouts_LAYOUTLIST", null, null)}, true, null, null); + tmp[2] = new LiteralStackNode(10640, 2, cHJvZChsaXQoInsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyMywxMjMpXSldLHt9KQ0000, new int[] {123}, null, null); + tmp[6] = new LiteralStackNode(10647, 6, cHJvZChsaXQoIn0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyNSwxMjUpXSldLHt9KQ0000, new int[] {125}, null, null); + tmp[0] = new NonTerminalStackNode(10637, 0, "Label", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgibm9uRW1wdHlCbG9jayIsc29ydCgiU3RhdGVtZW50IikpLFtsYWJlbCgibGFiZWwiLHNvcnQoIkxhYmVsIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoInsiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInN0YXRlbWVudHMiLFxpdGVyLXNlcHMoc29ydCgiU3RhdGVtZW50IiksW2xheW91dHMoIkxBWU9VVExJU1QiKV0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJ9IildLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgiZnVuY3Rpb25EZWNsYXJhdGlvbiIsc29ydCgiU3RhdGVtZW50IikpLFtsYWJlbCgiZnVuY3Rpb25EZWNsYXJhdGlvbiIsc29ydCgiRnVuY3Rpb25EZWNsYXJhdGlvbiIpKV0se3RhZygiYnJlYWthYmxlIigpKX0p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new NonTerminalStackNode(10713, 0, "FunctionDeclaration", null, null); + tmp[0] = new NonTerminalStackNode(10650, 0, "FunctionDeclaration", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiZnVuY3Rpb25EZWNsYXJhdGlvbiIsc29ydCgiU3RhdGVtZW50IikpLFtsYWJlbCgiZnVuY3Rpb25EZWNsYXJhdGlvbiIsc29ydCgiRnVuY3Rpb25EZWNsYXJhdGlvbiIpKV0se3RhZygiYnJlYWthYmxlIigpKX0p, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJTdGF0ZW1lbnQiKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJcXGl0ZXItc3Rhcihzb3J0KFwiU3RhdGVtZW50XCIpKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoXGl0ZXItc3Rhci1zZXBzKHNvcnQoIlN0YXRlbWVudCIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIildKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[3] = new ListStackNode(10721, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(10720, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[1] = new LiteralStackNode(10718, 1, cHJvZChsaXQoIlxcaXRlci1zdGFyKHNvcnQoXCJTdGF0ZW1lbnRcIikpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg5Miw5MildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDUsNDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4Myw4MyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOSwxMDkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {92,105,116,101,114,45,115,116,97,114,40,115,111,114,116,40,34,83,116,97,116,101,109,101,110,116,34,41,41}, null, null); - tmp[4] = new CharStackNode(10722, 4, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(10719, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[0] = new CharStackNode(10717, 0, new int[][]{{0,0}}, null, null); + tmp[3] = new ListStackNode(10658, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(10657, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[1] = new LiteralStackNode(10655, 1, cHJvZChsaXQoIlxcaXRlci1zdGFyKHNvcnQoXCJTdGF0ZW1lbnRcIikpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg5Miw5MildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDUsNDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4Myw4MyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOSwxMDkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {92,105,116,101,114,45,115,116,97,114,40,115,111,114,116,40,34,83,116,97,116,101,109,101,110,116,34,41,41}, null, null); + tmp[4] = new CharStackNode(10659, 4, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(10656, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[0] = new CharStackNode(10654, 0, new int[][]{{0,0}}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJTdGF0ZW1lbnQiKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJcXGl0ZXItc3Rhcihzb3J0KFwiU3RhdGVtZW50XCIpKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoXGl0ZXItc3Rhci1zZXBzKHNvcnQoIlN0YXRlbWVudCIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIildKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgid2hpbGUiLHNvcnQoIlN0YXRlbWVudCIpKSxbbGFiZWwoImxhYmVsIixzb3J0KCJMYWJlbCIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJ3aGlsZSIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIigiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImNvbmRpdGlvbnMiLFxpdGVyLXNlcHMoc29ydCgiRXhwcmVzc2lvbiIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpXSkpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIikiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImJvZHkiLGNvbmRpdGlvbmFsKHNvcnQoIlN0YXRlbWVudCIpLHtleGNlcHQoInZhcmlhYmxlRGVjbGFyYXRpb24iKSxleGNlcHQoImZ1bmN0aW9uRGVjbGFyYXRpb24iKX0pKV0se3RhZygiYnJlYWthYmxlIigpKX0p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[11]; - tmp[8] = new LiteralStackNode(10742, 8, cHJvZChsaXQoIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {41}, null, null); - tmp[3] = new NonTerminalStackNode(10732, 3, "layouts_LAYOUTLIST", null, null); - tmp[7] = new NonTerminalStackNode(10741, 7, "layouts_LAYOUTLIST", null, null); - tmp[5] = new NonTerminalStackNode(10734, 5, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(10730, 1, "layouts_LAYOUTLIST", null, null); - tmp[10] = new NonTerminalStackNode(10745, 10, "Statement", null, null); - tmp[0] = new NonTerminalStackNode(10728, 0, "Label", null, null); - tmp[9] = new NonTerminalStackNode(10743, 9, "layouts_LAYOUTLIST", null, null); - tmp[4] = new LiteralStackNode(10733, 4, cHJvZChsaXQoIigiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pXSx7fSk00, new int[] {40}, null, null); - tmp[6] = new SeparatedListStackNode(10739, 6, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIkV4cHJlc3Npb24iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(10735, 0, "Expression", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(10736, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(10737, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(10738, 3, "layouts_LAYOUTLIST", null, null)}, true, null, null); - tmp[2] = new LiteralStackNode(10731, 2, cHJvZChsaXQoIndoaWxlIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTksMTE5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDQsMTA0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pXSx7fSk00, new int[] {119,104,105,108,101}, null, null); + tmp[8] = new LiteralStackNode(10679, 8, cHJvZChsaXQoIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {41}, null, null); + tmp[3] = new NonTerminalStackNode(10669, 3, "layouts_LAYOUTLIST", null, null); + tmp[7] = new NonTerminalStackNode(10678, 7, "layouts_LAYOUTLIST", null, null); + tmp[5] = new NonTerminalStackNode(10671, 5, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(10667, 1, "layouts_LAYOUTLIST", null, null); + tmp[10] = new NonTerminalStackNode(10682, 10, "Statement", null, null); + tmp[0] = new NonTerminalStackNode(10665, 0, "Label", null, null); + tmp[9] = new NonTerminalStackNode(10680, 9, "layouts_LAYOUTLIST", null, null); + tmp[4] = new LiteralStackNode(10670, 4, cHJvZChsaXQoIigiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pXSx7fSk00, new int[] {40}, null, null); + tmp[6] = new SeparatedListStackNode(10676, 6, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIkV4cHJlc3Npb24iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(10672, 0, "Expression", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(10673, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(10674, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(10675, 3, "layouts_LAYOUTLIST", null, null)}, true, null, null); + tmp[2] = new LiteralStackNode(10668, 2, cHJvZChsaXQoIndoaWxlIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTksMTE5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDQsMTA0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pXSx7fSk00, new int[] {119,104,105,108,101}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgid2hpbGUiLHNvcnQoIlN0YXRlbWVudCIpKSxbbGFiZWwoImxhYmVsIixzb3J0KCJMYWJlbCIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJ3aGlsZSIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIigiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImNvbmRpdGlvbnMiLFxpdGVyLXNlcHMoc29ydCgiRXhwcmVzc2lvbiIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpXSkpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIikiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImJvZHkiLGNvbmRpdGlvbmFsKHNvcnQoIlN0YXRlbWVudCIpLHtleGNlcHQoInZhcmlhYmxlRGVjbGFyYXRpb24iKSxleGNlcHQoImZ1bmN0aW9uRGVjbGFyYXRpb24iKX0pKV0se3RhZygiYnJlYWthYmxlIigpKX0p, tmp); } protected static final void _init_cHJvZChsYWJlbCgiZG9XaGlsZSIsc29ydCgiU3RhdGVtZW50IikpLFtsYWJlbCgibGFiZWwiLHNvcnQoIkxhYmVsIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoImRvIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJib2R5Iixzb3J0KCJTdGF0ZW1lbnQiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgid2hpbGUiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIoIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJjb25kaXRpb24iLHNvcnQoIkV4cHJlc3Npb24iKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiKSIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIjsiKV0se3RhZygiYnJlYWthYmxlIigpKX0p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[15]; - tmp[8] = new LiteralStackNode(10759, 8, cHJvZChsaXQoIigiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pXSx7fSk00, new int[] {40}, null, null); - tmp[11] = new NonTerminalStackNode(10763, 11, "layouts_LAYOUTLIST", null, null); - tmp[3] = new NonTerminalStackNode(10753, 3, "layouts_LAYOUTLIST", null, null); - tmp[7] = new NonTerminalStackNode(10758, 7, "layouts_LAYOUTLIST", null, null); - tmp[5] = new NonTerminalStackNode(10756, 5, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(10751, 1, "layouts_LAYOUTLIST", null, null); - tmp[13] = new NonTerminalStackNode(10765, 13, "layouts_LAYOUTLIST", null, null); - tmp[0] = new NonTerminalStackNode(10749, 0, "Label", null, null); - tmp[10] = new NonTerminalStackNode(10761, 10, "Expression", null, null); - tmp[9] = new NonTerminalStackNode(10760, 9, "layouts_LAYOUTLIST", null, null); - tmp[14] = new LiteralStackNode(10766, 14, cHJvZChsaXQoIjsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU5LDU5KV0pXSx7fSk00, new int[] {59}, null, null); - tmp[12] = new LiteralStackNode(10764, 12, cHJvZChsaXQoIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {41}, null, null); - tmp[4] = new NonTerminalStackNode(10754, 4, "Statement", null, null); - tmp[6] = new LiteralStackNode(10757, 6, cHJvZChsaXQoIndoaWxlIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTksMTE5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDQsMTA0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pXSx7fSk00, new int[] {119,104,105,108,101}, null, null); - tmp[2] = new LiteralStackNode(10752, 2, cHJvZChsaXQoImRvIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMDAsMTAwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pXSx7fSk00, new int[] {100,111}, null, null); + tmp[8] = new LiteralStackNode(10696, 8, cHJvZChsaXQoIigiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pXSx7fSk00, new int[] {40}, null, null); + tmp[11] = new NonTerminalStackNode(10700, 11, "layouts_LAYOUTLIST", null, null); + tmp[3] = new NonTerminalStackNode(10690, 3, "layouts_LAYOUTLIST", null, null); + tmp[7] = new NonTerminalStackNode(10695, 7, "layouts_LAYOUTLIST", null, null); + tmp[5] = new NonTerminalStackNode(10693, 5, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(10688, 1, "layouts_LAYOUTLIST", null, null); + tmp[13] = new NonTerminalStackNode(10702, 13, "layouts_LAYOUTLIST", null, null); + tmp[0] = new NonTerminalStackNode(10686, 0, "Label", null, null); + tmp[10] = new NonTerminalStackNode(10698, 10, "Expression", null, null); + tmp[9] = new NonTerminalStackNode(10697, 9, "layouts_LAYOUTLIST", null, null); + tmp[14] = new LiteralStackNode(10703, 14, cHJvZChsaXQoIjsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU5LDU5KV0pXSx7fSk00, new int[] {59}, null, null); + tmp[12] = new LiteralStackNode(10701, 12, cHJvZChsaXQoIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {41}, null, null); + tmp[4] = new NonTerminalStackNode(10691, 4, "Statement", null, null); + tmp[6] = new LiteralStackNode(10694, 6, cHJvZChsaXQoIndoaWxlIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTksMTE5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDQsMTA0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pXSx7fSk00, new int[] {119,104,105,108,101}, null, null); + tmp[2] = new LiteralStackNode(10689, 2, cHJvZChsaXQoImRvIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMDAsMTAwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pXSx7fSk00, new int[] {100,111}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiZG9XaGlsZSIsc29ydCgiU3RhdGVtZW50IikpLFtsYWJlbCgibGFiZWwiLHNvcnQoIkxhYmVsIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoImRvIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJib2R5Iixzb3J0KCJTdGF0ZW1lbnQiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgid2hpbGUiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIoIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJjb25kaXRpb24iLHNvcnQoIkV4cHJlc3Npb24iKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiKSIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIjsiKV0se3RhZygiYnJlYWthYmxlIigpKX0p, tmp); } protected static final void _init_cHJvZChsYWJlbCgiYnJlYWsiLHNvcnQoIlN0YXRlbWVudCIpKSxbbGl0KCJicmVhayIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgidGFyZ2V0Iixzb3J0KCJUYXJnZXQiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiOyIpXSx7dGFnKCJicmVha2FibGUiKCkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[2] = new NonTerminalStackNode(10771, 2, "Target", null, null); - tmp[4] = new LiteralStackNode(10774, 4, cHJvZChsaXQoIjsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU5LDU5KV0pXSx7fSk00, new int[] {59}, null, null); - tmp[0] = new LiteralStackNode(10769, 0, cHJvZChsaXQoImJyZWFrIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg5OCw5OCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNywxMDcpXSldLHt9KQ0000, new int[] {98,114,101,97,107}, null, null); - tmp[1] = new NonTerminalStackNode(10770, 1, "layouts_LAYOUTLIST", null, null); - tmp[3] = new NonTerminalStackNode(10773, 3, "layouts_LAYOUTLIST", null, null); + tmp[2] = new NonTerminalStackNode(10708, 2, "Target", null, null); + tmp[4] = new LiteralStackNode(10711, 4, cHJvZChsaXQoIjsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU5LDU5KV0pXSx7fSk00, new int[] {59}, null, null); + tmp[0] = new LiteralStackNode(10706, 0, cHJvZChsaXQoImJyZWFrIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg5OCw5OCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNywxMDcpXSldLHt9KQ0000, new int[] {98,114,101,97,107}, null, null); + tmp[1] = new NonTerminalStackNode(10707, 1, "layouts_LAYOUTLIST", null, null); + tmp[3] = new NonTerminalStackNode(10710, 3, "layouts_LAYOUTLIST", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiYnJlYWsiLHNvcnQoIlN0YXRlbWVudCIpKSxbbGl0KCJicmVhayIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgidGFyZ2V0Iixzb3J0KCJUYXJnZXQiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiOyIpXSx7dGFnKCJicmVha2FibGUiKCkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiZm9yIixzb3J0KCJTdGF0ZW1lbnQiKSksW2xhYmVsKCJsYWJlbCIsc29ydCgiTGFiZWwiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiZm9yIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiKCIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgiZ2VuZXJhdG9ycyIsXGl0ZXItc2Vwcyhzb3J0KCJFeHByZXNzaW9uIiksW2xheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIiwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIildKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiKSIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgiYm9keSIsc29ydCgiU3RhdGVtZW50IikpXSx7dGFnKCJicmVha2FibGUiKCkpLHRhZygiYnJlYWthYmxlIigie2dlbmVyYXRvcnN9IikpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[11]; - tmp[6] = new SeparatedListStackNode(10788, 6, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIkV4cHJlc3Npb24iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(10784, 0, "Expression", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(10785, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(10786, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(10787, 3, "layouts_LAYOUTLIST", null, null)}, true, null, null); - tmp[2] = new LiteralStackNode(10780, 2, cHJvZChsaXQoImZvciIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTAyLDEwMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKV0se30p, new int[] {102,111,114}, null, null); - tmp[4] = new LiteralStackNode(10782, 4, cHJvZChsaXQoIigiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pXSx7fSk00, new int[] {40}, null, null); - tmp[9] = new NonTerminalStackNode(10792, 9, "layouts_LAYOUTLIST", null, null); - tmp[10] = new NonTerminalStackNode(10793, 10, "Statement", null, null); - tmp[0] = new NonTerminalStackNode(10777, 0, "Label", null, null); - tmp[1] = new NonTerminalStackNode(10779, 1, "layouts_LAYOUTLIST", null, null); - tmp[5] = new NonTerminalStackNode(10783, 5, "layouts_LAYOUTLIST", null, null); - tmp[7] = new NonTerminalStackNode(10790, 7, "layouts_LAYOUTLIST", null, null); - tmp[3] = new NonTerminalStackNode(10781, 3, "layouts_LAYOUTLIST", null, null); - tmp[8] = new LiteralStackNode(10791, 8, cHJvZChsaXQoIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {41}, null, null); + tmp[6] = new SeparatedListStackNode(10725, 6, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIkV4cHJlc3Npb24iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(10721, 0, "Expression", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(10722, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(10723, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(10724, 3, "layouts_LAYOUTLIST", null, null)}, true, null, null); + tmp[2] = new LiteralStackNode(10717, 2, cHJvZChsaXQoImZvciIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTAyLDEwMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKV0se30p, new int[] {102,111,114}, null, null); + tmp[4] = new LiteralStackNode(10719, 4, cHJvZChsaXQoIigiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pXSx7fSk00, new int[] {40}, null, null); + tmp[9] = new NonTerminalStackNode(10729, 9, "layouts_LAYOUTLIST", null, null); + tmp[10] = new NonTerminalStackNode(10730, 10, "Statement", null, null); + tmp[0] = new NonTerminalStackNode(10714, 0, "Label", null, null); + tmp[1] = new NonTerminalStackNode(10716, 1, "layouts_LAYOUTLIST", null, null); + tmp[5] = new NonTerminalStackNode(10720, 5, "layouts_LAYOUTLIST", null, null); + tmp[7] = new NonTerminalStackNode(10727, 7, "layouts_LAYOUTLIST", null, null); + tmp[3] = new NonTerminalStackNode(10718, 3, "layouts_LAYOUTLIST", null, null); + tmp[8] = new LiteralStackNode(10728, 8, cHJvZChsaXQoIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {41}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiZm9yIixzb3J0KCJTdGF0ZW1lbnQiKSksW2xhYmVsKCJsYWJlbCIsc29ydCgiTGFiZWwiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiZm9yIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiKCIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgiZ2VuZXJhdG9ycyIsXGl0ZXItc2Vwcyhzb3J0KCJFeHByZXNzaW9uIiksW2xheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIiwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIildKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiKSIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgiYm9keSIsc29ydCgiU3RhdGVtZW50IikpXSx7dGFnKCJicmVha2FibGUiKCkpLHRhZygiYnJlYWthYmxlIigie2dlbmVyYXRvcnN9IikpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiaWZUaGVuIixzb3J0KCJTdGF0ZW1lbnQiKSksW2xhYmVsKCJsYWJlbCIsc29ydCgiTGFiZWwiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiaWYiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIoIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJjb25kaXRpb25zIixcaXRlci1zZXBzKHNvcnQoIkV4cHJlc3Npb24iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIpIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJ0aGVuU3RhdGVtZW50Iixjb25kaXRpb25hbChzb3J0KCJTdGF0ZW1lbnQiKSx7ZXhjZXB0KCJ2YXJpYWJsZURlY2xhcmF0aW9uIiksZXhjZXB0KCJmdW5jdGlvbkRlY2xhcmF0aW9uIil9KSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGNvbmRpdGlvbmFsKGVtcHR5KCkse1xub3QtZm9sbG93KGxpdCgiZWxzZSIpKX0pXSx7dGFnKCJicmVha2FibGUiKCkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[13]; - tmp[12] = new EmptyStackNode(10819, 12, cmVndWxhcihlbXB0eSgpKQ0000, null, new ICompletionFilter[] {new StringFollowRestriction(new int[] {101,108,115,101})}); - tmp[4] = new LiteralStackNode(10802, 4, cHJvZChsaXQoIigiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pXSx7fSk00, new int[] {40}, null, null); - tmp[6] = new SeparatedListStackNode(10808, 6, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIkV4cHJlc3Npb24iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(10804, 0, "Expression", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(10805, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(10806, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(10807, 3, "layouts_LAYOUTLIST", null, null)}, true, null, null); - tmp[2] = new LiteralStackNode(10800, 2, cHJvZChsaXQoImlmIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDIsMTAyKV0pXSx7fSk00, new int[] {105,102}, null, null); - tmp[0] = new NonTerminalStackNode(10797, 0, "Label", null, null); - tmp[10] = new NonTerminalStackNode(10814, 10, "Statement", null, null); - tmp[9] = new NonTerminalStackNode(10812, 9, "layouts_LAYOUTLIST", null, null); - tmp[11] = new NonTerminalStackNode(10816, 11, "layouts_LAYOUTLIST", null, null); - tmp[3] = new NonTerminalStackNode(10801, 3, "layouts_LAYOUTLIST", null, null); - tmp[7] = new NonTerminalStackNode(10810, 7, "layouts_LAYOUTLIST", null, null); - tmp[5] = new NonTerminalStackNode(10803, 5, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(10799, 1, "layouts_LAYOUTLIST", null, null); - tmp[8] = new LiteralStackNode(10811, 8, cHJvZChsaXQoIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {41}, null, null); + tmp[12] = new EmptyStackNode(10756, 12, cmVndWxhcihlbXB0eSgpKQ0000, null, new ICompletionFilter[] {new StringFollowRestriction(new int[] {101,108,115,101})}); + tmp[4] = new LiteralStackNode(10739, 4, cHJvZChsaXQoIigiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pXSx7fSk00, new int[] {40}, null, null); + tmp[6] = new SeparatedListStackNode(10745, 6, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIkV4cHJlc3Npb24iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(10741, 0, "Expression", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(10742, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(10743, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(10744, 3, "layouts_LAYOUTLIST", null, null)}, true, null, null); + tmp[2] = new LiteralStackNode(10737, 2, cHJvZChsaXQoImlmIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDIsMTAyKV0pXSx7fSk00, new int[] {105,102}, null, null); + tmp[0] = new NonTerminalStackNode(10734, 0, "Label", null, null); + tmp[10] = new NonTerminalStackNode(10751, 10, "Statement", null, null); + tmp[9] = new NonTerminalStackNode(10749, 9, "layouts_LAYOUTLIST", null, null); + tmp[11] = new NonTerminalStackNode(10753, 11, "layouts_LAYOUTLIST", null, null); + tmp[3] = new NonTerminalStackNode(10738, 3, "layouts_LAYOUTLIST", null, null); + tmp[7] = new NonTerminalStackNode(10747, 7, "layouts_LAYOUTLIST", null, null); + tmp[5] = new NonTerminalStackNode(10740, 5, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(10736, 1, "layouts_LAYOUTLIST", null, null); + tmp[8] = new LiteralStackNode(10748, 8, cHJvZChsaXQoIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {41}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiaWZUaGVuIixzb3J0KCJTdGF0ZW1lbnQiKSksW2xhYmVsKCJsYWJlbCIsc29ydCgiTGFiZWwiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiaWYiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIoIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJjb25kaXRpb25zIixcaXRlci1zZXBzKHNvcnQoIkV4cHJlc3Npb24iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIpIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJ0aGVuU3RhdGVtZW50Iixjb25kaXRpb25hbChzb3J0KCJTdGF0ZW1lbnQiKSx7ZXhjZXB0KCJ2YXJpYWJsZURlY2xhcmF0aW9uIiksZXhjZXB0KCJmdW5jdGlvbkRlY2xhcmF0aW9uIil9KSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGNvbmRpdGlvbmFsKGVtcHR5KCkse1xub3QtZm9sbG93KGxpdCgiZWxzZSIpKX0pXSx7dGFnKCJicmVha2FibGUiKCkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJTdGF0ZW1lbnQiKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJzb3J0KFwiU3RhdGVtZW50XCIpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihzb3J0KCJTdGF0ZW1lbnQiKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[4] = new CharStackNode(10827, 4, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(10824, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[0] = new CharStackNode(10822, 0, new int[][]{{0,0}}, null, null); - tmp[3] = new ListStackNode(10826, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(10825, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[1] = new LiteralStackNode(10823, 1, cHJvZChsaXQoInNvcnQoXCJTdGF0ZW1lbnRcIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODMsODMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDksMTA5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {115,111,114,116,40,34,83,116,97,116,101,109,101,110,116,34,41}, null, null); + tmp[4] = new CharStackNode(10764, 4, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(10761, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[0] = new CharStackNode(10759, 0, new int[][]{{0,0}}, null, null); + tmp[3] = new ListStackNode(10763, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(10762, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[1] = new LiteralStackNode(10760, 1, cHJvZChsaXQoInNvcnQoXCJTdGF0ZW1lbnRcIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODMsODMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDksMTA5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {115,111,114,116,40,34,83,116,97,116,101,109,101,110,116,34,41}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJTdGF0ZW1lbnQiKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJzb3J0KFwiU3RhdGVtZW50XCIpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihzb3J0KCJTdGF0ZW1lbnQiKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiaWZUaGVuRWxzZSIsc29ydCgiU3RhdGVtZW50IikpLFtsYWJlbCgibGFiZWwiLHNvcnQoIkxhYmVsIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoImlmIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiKCIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgiY29uZGl0aW9ucyIsXGl0ZXItc2Vwcyhzb3J0KCJFeHByZXNzaW9uIiksW2xheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIiwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIildKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiKSIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgidGhlblN0YXRlbWVudCIsc29ydCgiU3RhdGVtZW50IikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoImVsc2UiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImVsc2VTdGF0ZW1lbnQiLGNvbmRpdGlvbmFsKHNvcnQoIlN0YXRlbWVudCIpLHtleGNlcHQoInZhcmlhYmxlRGVjbGFyYXRpb24iKSxleGNlcHQoImZ1bmN0aW9uRGVjbGFyYXRpb24iKX0pKV0se3RhZygiYnJlYWthYmxlIigpKX0p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[15]; - tmp[9] = new NonTerminalStackNode(10846, 9, "layouts_LAYOUTLIST", null, null); - tmp[0] = new NonTerminalStackNode(10831, 0, "Label", null, null); - tmp[10] = new NonTerminalStackNode(10847, 10, "Statement", null, null); - tmp[6] = new SeparatedListStackNode(10842, 6, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIkV4cHJlc3Npb24iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(10838, 0, "Expression", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(10839, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(10840, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(10841, 3, "layouts_LAYOUTLIST", null, null)}, true, null, null); - tmp[2] = new LiteralStackNode(10834, 2, cHJvZChsaXQoImlmIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDIsMTAyKV0pXSx7fSk00, new int[] {105,102}, null, null); - tmp[12] = new LiteralStackNode(10850, 12, cHJvZChsaXQoImVsc2UiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSldLHt9KQ0000, new int[] {101,108,115,101}, null, null); - tmp[14] = new NonTerminalStackNode(10853, 14, "Statement", null, null); - tmp[4] = new LiteralStackNode(10836, 4, cHJvZChsaXQoIigiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pXSx7fSk00, new int[] {40}, null, null); - tmp[8] = new LiteralStackNode(10845, 8, cHJvZChsaXQoIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {41}, null, null); - tmp[5] = new NonTerminalStackNode(10837, 5, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(10833, 1, "layouts_LAYOUTLIST", null, null); - tmp[7] = new NonTerminalStackNode(10844, 7, "layouts_LAYOUTLIST", null, null); - tmp[13] = new NonTerminalStackNode(10851, 13, "layouts_LAYOUTLIST", null, null); - tmp[11] = new NonTerminalStackNode(10849, 11, "layouts_LAYOUTLIST", null, null); - tmp[3] = new NonTerminalStackNode(10835, 3, "layouts_LAYOUTLIST", null, null); + tmp[9] = new NonTerminalStackNode(10783, 9, "layouts_LAYOUTLIST", null, null); + tmp[0] = new NonTerminalStackNode(10768, 0, "Label", null, null); + tmp[10] = new NonTerminalStackNode(10784, 10, "Statement", null, null); + tmp[6] = new SeparatedListStackNode(10779, 6, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIkV4cHJlc3Npb24iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(10775, 0, "Expression", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(10776, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(10777, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(10778, 3, "layouts_LAYOUTLIST", null, null)}, true, null, null); + tmp[2] = new LiteralStackNode(10771, 2, cHJvZChsaXQoImlmIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDIsMTAyKV0pXSx7fSk00, new int[] {105,102}, null, null); + tmp[12] = new LiteralStackNode(10787, 12, cHJvZChsaXQoImVsc2UiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSldLHt9KQ0000, new int[] {101,108,115,101}, null, null); + tmp[14] = new NonTerminalStackNode(10790, 14, "Statement", null, null); + tmp[4] = new LiteralStackNode(10773, 4, cHJvZChsaXQoIigiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pXSx7fSk00, new int[] {40}, null, null); + tmp[8] = new LiteralStackNode(10782, 8, cHJvZChsaXQoIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {41}, null, null); + tmp[5] = new NonTerminalStackNode(10774, 5, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(10770, 1, "layouts_LAYOUTLIST", null, null); + tmp[7] = new NonTerminalStackNode(10781, 7, "layouts_LAYOUTLIST", null, null); + tmp[13] = new NonTerminalStackNode(10788, 13, "layouts_LAYOUTLIST", null, null); + tmp[11] = new NonTerminalStackNode(10786, 11, "layouts_LAYOUTLIST", null, null); + tmp[3] = new NonTerminalStackNode(10772, 3, "layouts_LAYOUTLIST", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiaWZUaGVuRWxzZSIsc29ydCgiU3RhdGVtZW50IikpLFtsYWJlbCgibGFiZWwiLHNvcnQoIkxhYmVsIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoImlmIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiKCIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgiY29uZGl0aW9ucyIsXGl0ZXItc2Vwcyhzb3J0KCJFeHByZXNzaW9uIiksW2xheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIiwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIildKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiKSIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgidGhlblN0YXRlbWVudCIsc29ydCgiU3RhdGVtZW50IikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoImVsc2UiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImVsc2VTdGF0ZW1lbnQiLGNvbmRpdGlvbmFsKHNvcnQoIlN0YXRlbWVudCIpLHtleGNlcHQoInZhcmlhYmxlRGVjbGFyYXRpb24iKSxleGNlcHQoImZ1bmN0aW9uRGVjbGFyYXRpb24iKX0pKV0se3RhZygiYnJlYWthYmxlIigpKX0p, tmp); } protected static final void _init_cHJvZChsYWJlbCgiZW1wdHlTdGF0ZW1lbnQiLHNvcnQoIlN0YXRlbWVudCIpKSxbbGl0KCI7IildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(10857, 0, cHJvZChsaXQoIjsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU5LDU5KV0pXSx7fSk00, new int[] {59}, null, null); + tmp[0] = new LiteralStackNode(10794, 0, cHJvZChsaXQoIjsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU5LDU5KV0pXSx7fSk00, new int[] {59}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiZW1wdHlTdGF0ZW1lbnQiLHNvcnQoIlN0YXRlbWVudCIpKSxbbGl0KCI7IildLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgiZ2xvYmFsRGlyZWN0aXZlIixzb3J0KCJTdGF0ZW1lbnQiKSksW2xpdCgiZ2xvYmFsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJ0eXBlIixzb3J0KCJUeXBlIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgibmFtZXMiLFxpdGVyLXNlcHMoc29ydCgiUXVhbGlmaWVkTmFtZSIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpXSkpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIjsiKV0se3RhZygiYnJlYWthYmxlIigpKX0p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[7]; - tmp[0] = new LiteralStackNode(10860, 0, cHJvZChsaXQoImdsb2JhbCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTAzLDEwMyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTgsOTgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pXSx7fSk00, new int[] {103,108,111,98,97,108}, null, null); - tmp[2] = new NonTerminalStackNode(10862, 2, "Type", null, null); - tmp[6] = new LiteralStackNode(10872, 6, cHJvZChsaXQoIjsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU5LDU5KV0pXSx7fSk00, new int[] {59}, null, null); - tmp[4] = new SeparatedListStackNode(10869, 4, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIlF1YWxpZmllZE5hbWUiKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(10865, 0, "QualifiedName", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(10866, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(10867, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(10868, 3, "layouts_LAYOUTLIST", null, null)}, true, null, null); - tmp[5] = new NonTerminalStackNode(10871, 5, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(10861, 1, "layouts_LAYOUTLIST", null, null); - tmp[3] = new NonTerminalStackNode(10864, 3, "layouts_LAYOUTLIST", null, null); + tmp[0] = new LiteralStackNode(10797, 0, cHJvZChsaXQoImdsb2JhbCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTAzLDEwMyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTgsOTgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pXSx7fSk00, new int[] {103,108,111,98,97,108}, null, null); + tmp[2] = new NonTerminalStackNode(10799, 2, "Type", null, null); + tmp[6] = new LiteralStackNode(10809, 6, cHJvZChsaXQoIjsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU5LDU5KV0pXSx7fSk00, new int[] {59}, null, null); + tmp[4] = new SeparatedListStackNode(10806, 4, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIlF1YWxpZmllZE5hbWUiKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(10802, 0, "QualifiedName", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(10803, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(10804, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(10805, 3, "layouts_LAYOUTLIST", null, null)}, true, null, null); + tmp[5] = new NonTerminalStackNode(10808, 5, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(10798, 1, "layouts_LAYOUTLIST", null, null); + tmp[3] = new NonTerminalStackNode(10801, 3, "layouts_LAYOUTLIST", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiZ2xvYmFsRGlyZWN0aXZlIixzb3J0KCJTdGF0ZW1lbnQiKSksW2xpdCgiZ2xvYmFsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJ0eXBlIixzb3J0KCJUeXBlIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgibmFtZXMiLFxpdGVyLXNlcHMoc29ydCgiUXVhbGlmaWVkTmFtZSIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpXSkpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIjsiKV0se3RhZygiYnJlYWthYmxlIigpKX0p, tmp); } protected static final void _init_cHJvZChsYWJlbCgiYXBwZW5kIixzb3J0KCJTdGF0ZW1lbnQiKSksW2xpdCgiYXBwZW5kIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJkYXRhVGFyZ2V0Iixzb3J0KCJEYXRhVGFyZ2V0IikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgic3RhdGVtZW50Iixjb25kaXRpb25hbChzb3J0KCJTdGF0ZW1lbnQiKSx7ZXhjZXB0KCJ2YXJpYWJsZURlY2xhcmF0aW9uIiksZXhjZXB0KCJmdW5jdGlvbkRlY2xhcmF0aW9uIil9KSldLHt0YWcoImJyZWFrYWJsZSIoKSl9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[0] = new LiteralStackNode(10598, 0, cHJvZChsaXQoImFwcGVuZCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMCwxMDApXSldLHt9KQ0000, new int[] {97,112,112,101,110,100}, null, null); - tmp[2] = new NonTerminalStackNode(10600, 2, "DataTarget", null, null); - tmp[4] = new NonTerminalStackNode(10604, 4, "Statement", null, null); - tmp[1] = new NonTerminalStackNode(10599, 1, "layouts_LAYOUTLIST", null, null); - tmp[3] = new NonTerminalStackNode(10602, 3, "layouts_LAYOUTLIST", null, null); + tmp[0] = new LiteralStackNode(10535, 0, cHJvZChsaXQoImFwcGVuZCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMCwxMDApXSldLHt9KQ0000, new int[] {97,112,112,101,110,100}, null, null); + tmp[2] = new NonTerminalStackNode(10537, 2, "DataTarget", null, null); + tmp[4] = new NonTerminalStackNode(10541, 4, "Statement", null, null); + tmp[1] = new NonTerminalStackNode(10536, 1, "layouts_LAYOUTLIST", null, null); + tmp[3] = new NonTerminalStackNode(10539, 3, "layouts_LAYOUTLIST", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiYXBwZW5kIixzb3J0KCJTdGF0ZW1lbnQiKSksW2xpdCgiYXBwZW5kIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJkYXRhVGFyZ2V0Iixzb3J0KCJEYXRhVGFyZ2V0IikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgic3RhdGVtZW50Iixjb25kaXRpb25hbChzb3J0KCJTdGF0ZW1lbnQiKSx7ZXhjZXB0KCJ2YXJpYWJsZURlY2xhcmF0aW9uIiksZXhjZXB0KCJmdW5jdGlvbkRlY2xhcmF0aW9uIil9KSldLHt0YWcoImJyZWFrYWJsZSIoKSl9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgiYXNzZXJ0V2l0aE1lc3NhZ2UiLHNvcnQoIlN0YXRlbWVudCIpKSxbbGl0KCJhc3NlcnQiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImV4cHJlc3Npb24iLHNvcnQoIkV4cHJlc3Npb24iKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiOiIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgibWVzc2FnZSIsc29ydCgiRXhwcmVzc2lvbiIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCI7IildLHt0YWcoImJyZWFrYWJsZSIoKSl9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[9]; - tmp[0] = new LiteralStackNode(10875, 0, cHJvZChsaXQoImFzc2VydCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSldLHt9KQ0000, new int[] {97,115,115,101,114,116}, null, null); - tmp[2] = new NonTerminalStackNode(10877, 2, "Expression", null, null); - tmp[6] = new NonTerminalStackNode(10882, 6, "Expression", null, null); - tmp[4] = new LiteralStackNode(10880, 4, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[8] = new LiteralStackNode(10885, 8, cHJvZChsaXQoIjsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU5LDU5KV0pXSx7fSk00, new int[] {59}, null, null); - tmp[7] = new NonTerminalStackNode(10884, 7, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(10876, 1, "layouts_LAYOUTLIST", null, null); - tmp[5] = new NonTerminalStackNode(10881, 5, "layouts_LAYOUTLIST", null, null); - tmp[3] = new NonTerminalStackNode(10879, 3, "layouts_LAYOUTLIST", null, null); + tmp[0] = new LiteralStackNode(10812, 0, cHJvZChsaXQoImFzc2VydCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSldLHt9KQ0000, new int[] {97,115,115,101,114,116}, null, null); + tmp[2] = new NonTerminalStackNode(10814, 2, "Expression", null, null); + tmp[6] = new NonTerminalStackNode(10819, 6, "Expression", null, null); + tmp[4] = new LiteralStackNode(10817, 4, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[8] = new LiteralStackNode(10822, 8, cHJvZChsaXQoIjsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU5LDU5KV0pXSx7fSk00, new int[] {59}, null, null); + tmp[7] = new NonTerminalStackNode(10821, 7, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(10813, 1, "layouts_LAYOUTLIST", null, null); + tmp[5] = new NonTerminalStackNode(10818, 5, "layouts_LAYOUTLIST", null, null); + tmp[3] = new NonTerminalStackNode(10816, 3, "layouts_LAYOUTLIST", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiYXNzZXJ0V2l0aE1lc3NhZ2UiLHNvcnQoIlN0YXRlbWVudCIpKSxbbGl0KCJhc3NlcnQiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImV4cHJlc3Npb24iLHNvcnQoIkV4cHJlc3Npb24iKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiOiIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgibWVzc2FnZSIsc29ydCgiRXhwcmVzc2lvbiIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCI7IildLHt0YWcoImJyZWFrYWJsZSIoKSl9KQ0000, tmp); } public static void init(ExpectBuilder builder){ @@ -11870,37 +11855,37 @@ protected static class TimePartNoTZ { protected static final void _init_cHJvZChsZXgoIlRpbWVQYXJ0Tm9UWiIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pLGxpdCgiOiIpLFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1MyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSksbGl0KCI6IiksXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDUzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSxvcHQoc2VxKFtcY2hhci1jbGFzcyhbcmFuZ2UoNDQsNDQpLHJhbmdlKDQ2LDQ2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSxvcHQoc2VxKFtcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSksb3B0KFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSldKSldKSldLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[9]; - tmp[3] = new CharStackNode(10971, 3, new int[][]{{48,53}}, null, null); - tmp[8] = new OptionalStackNode(10984, 8, cmVndWxhcihvcHQoc2VxKFtcY2hhci1jbGFzcyhbcmFuZ2UoNDQsNDQpLHJhbmdlKDQ2LDQ2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSxvcHQoc2VxKFtcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSksb3B0KFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSldKSldKSkp, new SequenceStackNode(10983, 0, cmVndWxhcihzZXEoW1xjaGFyLWNsYXNzKFtyYW5nZSg0NCw0NCkscmFuZ2UoNDYsNDYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pLG9wdChzZXEoW1xjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSxvcHQoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKV0pKV0pKQ0000, (AbstractStackNode[]) new AbstractStackNode[]{new CharStackNode(10976, 0, new int[][]{{44,44},{46,46}}, null, null), new CharStackNode(10977, 1, new int[][]{{48,57}}, null, null), new OptionalStackNode(10982, 2, cmVndWxhcihvcHQoc2VxKFtcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSksb3B0KFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSldKSkp, new SequenceStackNode(10981, 0, cmVndWxhcihzZXEoW1xjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSxvcHQoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKV0pKQ0000, (AbstractStackNode[]) new AbstractStackNode[]{new CharStackNode(10978, 0, new int[][]{{48,57}}, null, null), new OptionalStackNode(10980, 1, cmVndWxhcihvcHQoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSk00, new CharStackNode(10979, 0, new int[][]{{48,57}}, null, null), null, null)}, null, null), null, null)}, null, null), null, null); - tmp[4] = new CharStackNode(10972, 4, new int[][]{{48,57}}, null, null); - tmp[2] = new LiteralStackNode(10970, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[0] = new CharStackNode(10968, 0, new int[][]{{48,50}}, null, null); - tmp[7] = new CharStackNode(10975, 7, new int[][]{{48,57}}, null, null); - tmp[1] = new CharStackNode(10969, 1, new int[][]{{48,57}}, null, null); - tmp[5] = new LiteralStackNode(10973, 5, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[6] = new CharStackNode(10974, 6, new int[][]{{48,53}}, null, null); + tmp[3] = new CharStackNode(10908, 3, new int[][]{{48,53}}, null, null); + tmp[8] = new OptionalStackNode(10921, 8, cmVndWxhcihvcHQoc2VxKFtcY2hhci1jbGFzcyhbcmFuZ2UoNDQsNDQpLHJhbmdlKDQ2LDQ2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSxvcHQoc2VxKFtcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSksb3B0KFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSldKSldKSkp, new SequenceStackNode(10920, 0, cmVndWxhcihzZXEoW1xjaGFyLWNsYXNzKFtyYW5nZSg0NCw0NCkscmFuZ2UoNDYsNDYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pLG9wdChzZXEoW1xjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSxvcHQoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKV0pKV0pKQ0000, (AbstractStackNode[]) new AbstractStackNode[]{new CharStackNode(10913, 0, new int[][]{{44,44},{46,46}}, null, null), new CharStackNode(10914, 1, new int[][]{{48,57}}, null, null), new OptionalStackNode(10919, 2, cmVndWxhcihvcHQoc2VxKFtcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSksb3B0KFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSldKSkp, new SequenceStackNode(10918, 0, cmVndWxhcihzZXEoW1xjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSxvcHQoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKV0pKQ0000, (AbstractStackNode[]) new AbstractStackNode[]{new CharStackNode(10915, 0, new int[][]{{48,57}}, null, null), new OptionalStackNode(10917, 1, cmVndWxhcihvcHQoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSk00, new CharStackNode(10916, 0, new int[][]{{48,57}}, null, null), null, null)}, null, null), null, null)}, null, null), null, null); + tmp[4] = new CharStackNode(10909, 4, new int[][]{{48,57}}, null, null); + tmp[2] = new LiteralStackNode(10907, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[0] = new CharStackNode(10905, 0, new int[][]{{48,50}}, null, null); + tmp[7] = new CharStackNode(10912, 7, new int[][]{{48,57}}, null, null); + tmp[1] = new CharStackNode(10906, 1, new int[][]{{48,57}}, null, null); + tmp[5] = new LiteralStackNode(10910, 5, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[6] = new CharStackNode(10911, 6, new int[][]{{48,53}}, null, null); builder.addAlternative(RascalParser.cHJvZChsZXgoIlRpbWVQYXJ0Tm9UWiIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pLGxpdCgiOiIpLFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1MyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSksbGl0KCI6IiksXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDUzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSxvcHQoc2VxKFtcY2hhci1jbGFzcyhbcmFuZ2UoNDQsNDQpLHJhbmdlKDQ2LDQ2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSxvcHQoc2VxKFtcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSksb3B0KFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSldKSldKSldLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIlRpbWVQYXJ0Tm9UWiIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJUaW1lUGFydE5vVFpcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKGxleCgiVGltZVBhcnROb1RaIikpKX0p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[3] = new ListStackNode(10991, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(10990, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[1] = new LiteralStackNode(10988, 1, cHJvZChsaXQoInNvcnQoXCJUaW1lUGFydE5vVFpcIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODQsODQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOSwxMDkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDgwLDgwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNzgsNzgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDg0LDg0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5MCw5MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {115,111,114,116,40,34,84,105,109,101,80,97,114,116,78,111,84,90,34,41}, null, null); - tmp[4] = new CharStackNode(10992, 4, new int[][]{{0,0}}, null, null); - tmp[0] = new CharStackNode(10987, 0, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(10989, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[3] = new ListStackNode(10928, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(10927, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[1] = new LiteralStackNode(10925, 1, cHJvZChsaXQoInNvcnQoXCJUaW1lUGFydE5vVFpcIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODQsODQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOSwxMDkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDgwLDgwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNzgsNzgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDg0LDg0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5MCw5MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {115,111,114,116,40,34,84,105,109,101,80,97,114,116,78,111,84,90,34,41}, null, null); + tmp[4] = new CharStackNode(10929, 4, new int[][]{{0,0}}, null, null); + tmp[0] = new CharStackNode(10924, 0, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(10926, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIlRpbWVQYXJ0Tm9UWiIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJUaW1lUGFydE5vVFpcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKGxleCgiVGltZVBhcnROb1RaIikpKX0p, tmp); } protected static final void _init_cHJvZChsZXgoIlRpbWVQYXJ0Tm9UWiIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1MyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDUzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSxvcHQoc2VxKFtcY2hhci1jbGFzcyhbcmFuZ2UoNDQsNDQpLHJhbmdlKDQ2LDQ2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSxvcHQoc2VxKFtcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSksb3B0KFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSldKSldKSldLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[7]; - tmp[2] = new CharStackNode(10997, 2, new int[][]{{48,53}}, null, null); - tmp[6] = new OptionalStackNode(11009, 6, cmVndWxhcihvcHQoc2VxKFtcY2hhci1jbGFzcyhbcmFuZ2UoNDQsNDQpLHJhbmdlKDQ2LDQ2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSxvcHQoc2VxKFtcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSksb3B0KFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSldKSldKSkp, new SequenceStackNode(11008, 0, cmVndWxhcihzZXEoW1xjaGFyLWNsYXNzKFtyYW5nZSg0NCw0NCkscmFuZ2UoNDYsNDYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pLG9wdChzZXEoW1xjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSxvcHQoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKV0pKV0pKQ0000, (AbstractStackNode[]) new AbstractStackNode[]{new CharStackNode(11001, 0, new int[][]{{44,44},{46,46}}, null, null), new CharStackNode(11002, 1, new int[][]{{48,57}}, null, null), new OptionalStackNode(11007, 2, cmVndWxhcihvcHQoc2VxKFtcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSksb3B0KFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSldKSkp, new SequenceStackNode(11006, 0, cmVndWxhcihzZXEoW1xjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSxvcHQoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKV0pKQ0000, (AbstractStackNode[]) new AbstractStackNode[]{new CharStackNode(11003, 0, new int[][]{{48,57}}, null, null), new OptionalStackNode(11005, 1, cmVndWxhcihvcHQoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSk00, new CharStackNode(11004, 0, new int[][]{{48,57}}, null, null), null, null)}, null, null), null, null)}, null, null), null, null); - tmp[0] = new CharStackNode(10995, 0, new int[][]{{48,50}}, null, null); - tmp[3] = new CharStackNode(10998, 3, new int[][]{{48,57}}, null, null); - tmp[4] = new CharStackNode(10999, 4, new int[][]{{48,53}}, null, null); - tmp[1] = new CharStackNode(10996, 1, new int[][]{{48,57}}, null, null); - tmp[5] = new CharStackNode(11000, 5, new int[][]{{48,57}}, null, null); + tmp[2] = new CharStackNode(10934, 2, new int[][]{{48,53}}, null, null); + tmp[6] = new OptionalStackNode(10946, 6, cmVndWxhcihvcHQoc2VxKFtcY2hhci1jbGFzcyhbcmFuZ2UoNDQsNDQpLHJhbmdlKDQ2LDQ2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSxvcHQoc2VxKFtcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSksb3B0KFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSldKSldKSkp, new SequenceStackNode(10945, 0, cmVndWxhcihzZXEoW1xjaGFyLWNsYXNzKFtyYW5nZSg0NCw0NCkscmFuZ2UoNDYsNDYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pLG9wdChzZXEoW1xjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSxvcHQoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKV0pKV0pKQ0000, (AbstractStackNode[]) new AbstractStackNode[]{new CharStackNode(10938, 0, new int[][]{{44,44},{46,46}}, null, null), new CharStackNode(10939, 1, new int[][]{{48,57}}, null, null), new OptionalStackNode(10944, 2, cmVndWxhcihvcHQoc2VxKFtcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSksb3B0KFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSldKSkp, new SequenceStackNode(10943, 0, cmVndWxhcihzZXEoW1xjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSxvcHQoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKV0pKQ0000, (AbstractStackNode[]) new AbstractStackNode[]{new CharStackNode(10940, 0, new int[][]{{48,57}}, null, null), new OptionalStackNode(10942, 1, cmVndWxhcihvcHQoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSk00, new CharStackNode(10941, 0, new int[][]{{48,57}}, null, null), null, null)}, null, null), null, null)}, null, null), null, null); + tmp[0] = new CharStackNode(10932, 0, new int[][]{{48,50}}, null, null); + tmp[3] = new CharStackNode(10935, 3, new int[][]{{48,57}}, null, null); + tmp[4] = new CharStackNode(10936, 4, new int[][]{{48,53}}, null, null); + tmp[1] = new CharStackNode(10933, 1, new int[][]{{48,57}}, null, null); + tmp[5] = new CharStackNode(10937, 5, new int[][]{{48,57}}, null, null); builder.addAlternative(RascalParser.cHJvZChsZXgoIlRpbWVQYXJ0Tm9UWiIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1MyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDUzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSxvcHQoc2VxKFtcY2hhci1jbGFzcyhbcmFuZ2UoNDQsNDQpLHJhbmdlKDQ2LDQ2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSxvcHQoc2VxKFtcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSksb3B0KFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSldKSldKSldLHt9KQ0000, tmp); } public static void init(ExpectBuilder builder){ @@ -11925,45 +11910,45 @@ protected static class EvalCommand { protected static final void _init_cHJvZChsYWJlbCgiaW1wb3J0Iixzb3J0KCJFdmFsQ29tbWFuZCIpKSxbbGFiZWwoImltcG9ydGVkIixzb3J0KCJJbXBvcnQiKSldLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new NonTerminalStackNode(11013, 0, "Import", null, null); + tmp[0] = new NonTerminalStackNode(10950, 0, "Import", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiaW1wb3J0Iixzb3J0KCJFdmFsQ29tbWFuZCIpKSxbbGFiZWwoImltcG9ydGVkIixzb3J0KCJJbXBvcnQiKSldLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgiZGVjbGFyYXRpb24iLHNvcnQoIkV2YWxDb21tYW5kIikpLFtsYWJlbCgiZGVjbGFyYXRpb24iLHNvcnQoIkRlY2xhcmF0aW9uIikpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new NonTerminalStackNode(11017, 0, "Declaration", null, null); + tmp[0] = new NonTerminalStackNode(10954, 0, "Declaration", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiZGVjbGFyYXRpb24iLHNvcnQoIkV2YWxDb21tYW5kIikpLFtsYWJlbCgiZGVjbGFyYXRpb24iLHNvcnQoIkRlY2xhcmF0aW9uIikpXSx7fSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgic3RhdGVtZW50Iixzb3J0KCJFdmFsQ29tbWFuZCIpKSxbbGFiZWwoInN0YXRlbWVudCIsY29uZGl0aW9uYWwoc29ydCgiU3RhdGVtZW50Iikse2V4Y2VwdCgidmFyaWFibGVEZWNsYXJhdGlvbiIpLGV4Y2VwdCgidmlzaXQiKSxleGNlcHQoImZ1bmN0aW9uRGVjbGFyYXRpb24iKX0pKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new NonTerminalStackNode(11022, 0, "Statement", null, null); + tmp[0] = new NonTerminalStackNode(10959, 0, "Statement", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgic3RhdGVtZW50Iixzb3J0KCJFdmFsQ29tbWFuZCIpKSxbbGFiZWwoInN0YXRlbWVudCIsY29uZGl0aW9uYWwoc29ydCgiU3RhdGVtZW50Iikse2V4Y2VwdCgidmFyaWFibGVEZWNsYXJhdGlvbiIpLGV4Y2VwdCgidmlzaXQiKSxleGNlcHQoImZ1bmN0aW9uRGVjbGFyYXRpb24iKX0pKV0se30p, tmp); } protected static final void _init_cHJvZChsYWJlbCgib3V0cHV0Iixzb3J0KCJFdmFsQ29tbWFuZCIpKSxbbGV4KCJPdXRwdXQiKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new NonTerminalStackNode(11026, 0, "Output", null, null); + tmp[0] = new NonTerminalStackNode(10963, 0, "Output", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgib3V0cHV0Iixzb3J0KCJFdmFsQ29tbWFuZCIpKSxbbGV4KCJPdXRwdXQiKV0se30p, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJFdmFsQ29tbWFuZCIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoIml0ZXIoc29ydChcIkV2YWxDb21tYW5kXCIpKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoXGl0ZXItc2Vwcyhzb3J0KCJFdmFsQ29tbWFuZCIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIildKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[2] = new LiteralStackNode(11031, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[4] = new CharStackNode(11034, 4, new int[][]{{0,0}}, null, null); - tmp[0] = new CharStackNode(11029, 0, new int[][]{{0,0}}, null, null); - tmp[1] = new LiteralStackNode(11030, 1, cHJvZChsaXQoIml0ZXIoc29ydChcIkV2YWxDb21tYW5kXCIpKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNjksNjkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExOCwxMTgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg2Nyw2NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMCwxMDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {105,116,101,114,40,115,111,114,116,40,34,69,118,97,108,67,111,109,109,97,110,100,34,41,41}, null, null); - tmp[3] = new ListStackNode(11033, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(11032, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[2] = new LiteralStackNode(10968, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[4] = new CharStackNode(10971, 4, new int[][]{{0,0}}, null, null); + tmp[0] = new CharStackNode(10966, 0, new int[][]{{0,0}}, null, null); + tmp[1] = new LiteralStackNode(10967, 1, cHJvZChsaXQoIml0ZXIoc29ydChcIkV2YWxDb21tYW5kXCIpKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNjksNjkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExOCwxMTgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg2Nyw2NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMCwxMDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {105,116,101,114,40,115,111,114,116,40,34,69,118,97,108,67,111,109,109,97,110,100,34,41,41}, null, null); + tmp[3] = new ListStackNode(10970, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(10969, 0, new int[][]{{48,57}}, null, null), true, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJFdmFsQ29tbWFuZCIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoIml0ZXIoc29ydChcIkV2YWxDb21tYW5kXCIpKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoXGl0ZXItc2Vwcyhzb3J0KCJFdmFsQ29tbWFuZCIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIildKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJFdmFsQ29tbWFuZCIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJFdmFsQ29tbWFuZFwiKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoc29ydCgiRXZhbENvbW1hbmQiKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[2] = new LiteralStackNode(11042, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[4] = new CharStackNode(11045, 4, new int[][]{{0,0}}, null, null); - tmp[0] = new CharStackNode(11040, 0, new int[][]{{0,0}}, null, null); - tmp[1] = new LiteralStackNode(11041, 1, cHJvZChsaXQoInNvcnQoXCJFdmFsQ29tbWFuZFwiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg2OSw2OSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE4LDExOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDY3LDY3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDksMTA5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDksMTA5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAwLDEwMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {115,111,114,116,40,34,69,118,97,108,67,111,109,109,97,110,100,34,41}, null, null); - tmp[3] = new ListStackNode(11044, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(11043, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[2] = new LiteralStackNode(10979, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[4] = new CharStackNode(10982, 4, new int[][]{{0,0}}, null, null); + tmp[0] = new CharStackNode(10977, 0, new int[][]{{0,0}}, null, null); + tmp[1] = new LiteralStackNode(10978, 1, cHJvZChsaXQoInNvcnQoXCJFdmFsQ29tbWFuZFwiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg2OSw2OSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE4LDExOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDY3LDY3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDksMTA5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDksMTA5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAwLDEwMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {115,111,114,116,40,34,69,118,97,108,67,111,109,109,97,110,100,34,41}, null, null); + tmp[3] = new ListStackNode(10981, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(10980, 0, new int[][]{{48,57}}, null, null), true, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJFdmFsQ29tbWFuZCIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJFdmFsQ29tbWFuZFwiKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoc29ydCgiRXZhbENvbW1hbmQiKSkpfSk00, tmp); } public static void init(ExpectBuilder builder){ @@ -11994,39 +11979,39 @@ protected static class FunctionModifier { protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJGdW5jdGlvbk1vZGlmaWVyIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIkZ1bmN0aW9uTW9kaWZpZXJcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKHNvcnQoIkZ1bmN0aW9uTW9kaWZpZXIiKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[3] = new ListStackNode(11054, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(11053, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[1] = new LiteralStackNode(11051, 1, cHJvZChsaXQoInNvcnQoXCJGdW5jdGlvbk1vZGlmaWVyXCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDcwLDcwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTcsMTE3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5OSw5OSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNzcsNzcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMCwxMDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMiwxMDIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,70,117,110,99,116,105,111,110,77,111,100,105,102,105,101,114,34,41}, null, null); - tmp[4] = new CharStackNode(11055, 4, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(11052, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[0] = new CharStackNode(11050, 0, new int[][]{{0,0}}, null, null); + tmp[3] = new ListStackNode(10991, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(10990, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[1] = new LiteralStackNode(10988, 1, cHJvZChsaXQoInNvcnQoXCJGdW5jdGlvbk1vZGlmaWVyXCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDcwLDcwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTcsMTE3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5OSw5OSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNzcsNzcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMCwxMDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMiwxMDIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,70,117,110,99,116,105,111,110,77,111,100,105,102,105,101,114,34,41}, null, null); + tmp[4] = new CharStackNode(10992, 4, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(10989, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[0] = new CharStackNode(10987, 0, new int[][]{{0,0}}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJGdW5jdGlvbk1vZGlmaWVyIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIkZ1bmN0aW9uTW9kaWZpZXJcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKHNvcnQoIkZ1bmN0aW9uTW9kaWZpZXIiKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgidGVzdCIsc29ydCgiRnVuY3Rpb25Nb2RpZmllciIpKSxbbGl0KCJ0ZXN0IildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(11059, 0, cHJvZChsaXQoInRlc3QiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSldLHt9KQ0000, new int[] {116,101,115,116}, null, null); + tmp[0] = new LiteralStackNode(10996, 0, cHJvZChsaXQoInRlc3QiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSldLHt9KQ0000, new int[] {116,101,115,116}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgidGVzdCIsc29ydCgiRnVuY3Rpb25Nb2RpZmllciIpKSxbbGl0KCJ0ZXN0IildLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJGdW5jdGlvbk1vZGlmaWVyIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgiXFxpdGVyLXN0YXIoc29ydChcIkZ1bmN0aW9uTW9kaWZpZXJcIikpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihcaXRlci1zdGFyLXNlcHMoc29ydCgiRnVuY3Rpb25Nb2RpZmllciIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIildKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[0] = new CharStackNode(11062, 0, new int[][]{{0,0}}, null, null); - tmp[4] = new CharStackNode(11067, 4, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(11064, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[3] = new ListStackNode(11066, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(11065, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[1] = new LiteralStackNode(11063, 1, cHJvZChsaXQoIlxcaXRlci1zdGFyKHNvcnQoXCJGdW5jdGlvbk1vZGlmaWVyXCIpKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoOTIsOTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ1LDQ1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNzAsNzApXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNywxMTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDk5LDk5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg3Nyw3NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAwLDEwMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAyLDEwMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {92,105,116,101,114,45,115,116,97,114,40,115,111,114,116,40,34,70,117,110,99,116,105,111,110,77,111,100,105,102,105,101,114,34,41,41}, null, null); + tmp[0] = new CharStackNode(10999, 0, new int[][]{{0,0}}, null, null); + tmp[4] = new CharStackNode(11004, 4, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(11001, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[3] = new ListStackNode(11003, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(11002, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[1] = new LiteralStackNode(11000, 1, cHJvZChsaXQoIlxcaXRlci1zdGFyKHNvcnQoXCJGdW5jdGlvbk1vZGlmaWVyXCIpKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoOTIsOTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ1LDQ1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNzAsNzApXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNywxMTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDk5LDk5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg3Nyw3NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAwLDEwMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAyLDEwMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {92,105,116,101,114,45,115,116,97,114,40,115,111,114,116,40,34,70,117,110,99,116,105,111,110,77,111,100,105,102,105,101,114,34,41,41}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJGdW5jdGlvbk1vZGlmaWVyIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgiXFxpdGVyLXN0YXIoc29ydChcIkZ1bmN0aW9uTW9kaWZpZXJcIikpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihcaXRlci1zdGFyLXNlcHMoc29ydCgiRnVuY3Rpb25Nb2RpZmllciIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIildKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiZGVmYXVsdCIsc29ydCgiRnVuY3Rpb25Nb2RpZmllciIpKSxbbGl0KCJkZWZhdWx0IildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(11073, 0, cHJvZChsaXQoImRlZmF1bHQiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEwMCwxMDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMiwxMDIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTcsMTE3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pXSx7fSk00, new int[] {100,101,102,97,117,108,116}, null, null); + tmp[0] = new LiteralStackNode(11010, 0, cHJvZChsaXQoImRlZmF1bHQiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEwMCwxMDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMiwxMDIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTcsMTE3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pXSx7fSk00, new int[] {100,101,102,97,117,108,116}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiZGVmYXVsdCIsc29ydCgiRnVuY3Rpb25Nb2RpZmllciIpKSxbbGl0KCJkZWZhdWx0IildLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgiamF2YSIsc29ydCgiRnVuY3Rpb25Nb2RpZmllciIpKSxbbGl0KCJqYXZhIildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(11076, 0, cHJvZChsaXQoImphdmEiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEwNiwxMDYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTgsMTE4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKV0se30p, new int[] {106,97,118,97}, null, null); + tmp[0] = new LiteralStackNode(11013, 0, cHJvZChsaXQoImphdmEiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEwNiwxMDYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTgsMTE4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKV0se30p, new int[] {106,97,118,97}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiamF2YSIsc29ydCgiRnVuY3Rpb25Nb2RpZmllciIpKSxbbGl0KCJqYXZhIildLHt9KQ0000, tmp); } public static void init(ExpectBuilder builder){ @@ -12055,23 +12040,23 @@ protected static class BooleanLiteral { protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIkJvb2xlYW5MaXRlcmFsIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIkJvb2xlYW5MaXRlcmFsXCIpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihsZXgoIkJvb2xlYW5MaXRlcmFsIikpKX0p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[2] = new LiteralStackNode(11087, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[4] = new CharStackNode(11090, 4, new int[][]{{0,0}}, null, null); - tmp[0] = new CharStackNode(11085, 0, new int[][]{{0,0}}, null, null); - tmp[1] = new LiteralStackNode(11086, 1, cHJvZChsaXQoInNvcnQoXCJCb29sZWFuTGl0ZXJhbFwiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg2Niw2NildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDc2LDc2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {115,111,114,116,40,34,66,111,111,108,101,97,110,76,105,116,101,114,97,108,34,41}, null, null); - tmp[3] = new ListStackNode(11089, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(11088, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[2] = new LiteralStackNode(11024, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[4] = new CharStackNode(11027, 4, new int[][]{{0,0}}, null, null); + tmp[0] = new CharStackNode(11022, 0, new int[][]{{0,0}}, null, null); + tmp[1] = new LiteralStackNode(11023, 1, cHJvZChsaXQoInNvcnQoXCJCb29sZWFuTGl0ZXJhbFwiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg2Niw2NildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDc2LDc2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {115,111,114,116,40,34,66,111,111,108,101,97,110,76,105,116,101,114,97,108,34,41}, null, null); + tmp[3] = new ListStackNode(11026, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(11025, 0, new int[][]{{48,57}}, null, null), true, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIkJvb2xlYW5MaXRlcmFsIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIkJvb2xlYW5MaXRlcmFsXCIpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihsZXgoIkJvb2xlYW5MaXRlcmFsIikpKX0p, tmp); } protected static final void _init_cHJvZChsZXgoIkJvb2xlYW5MaXRlcmFsIiksW2xpdCgiZmFsc2UiKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(11093, 0, cHJvZChsaXQoImZhbHNlIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMDIsMTAyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKV0se30p, new int[] {102,97,108,115,101}, null, null); + tmp[0] = new LiteralStackNode(11030, 0, cHJvZChsaXQoImZhbHNlIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMDIsMTAyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKV0se30p, new int[] {102,97,108,115,101}, null, null); builder.addAlternative(RascalParser.cHJvZChsZXgoIkJvb2xlYW5MaXRlcmFsIiksW2xpdCgiZmFsc2UiKV0se30p, tmp); } protected static final void _init_cHJvZChsZXgoIkJvb2xlYW5MaXRlcmFsIiksW2xpdCgidHJ1ZSIpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(11095, 0, cHJvZChsaXQoInRydWUiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNywxMTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSldLHt9KQ0000, new int[] {116,114,117,101}, null, null); + tmp[0] = new LiteralStackNode(11032, 0, cHJvZChsaXQoInRydWUiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNywxMTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSldLHt9KQ0000, new int[] {116,114,117,101}, null, null); builder.addAlternative(RascalParser.cHJvZChsZXgoIkJvb2xlYW5MaXRlcmFsIiksW2xpdCgidHJ1ZSIpXSx7fSk00, tmp); } public static void init(ExpectBuilder builder){ @@ -12096,31 +12081,31 @@ protected static class KeywordArgument_W3NvcnQoIkV4cHJlc3Npb24iKV000 { protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixccGFyYW1ldGVyaXplZC1zb3J0KCJLZXl3b3JkQXJndW1lbnQiLFtzb3J0KCJFeHByZXNzaW9uIildKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJcXGl0ZXItc2VwcyhcXHBhcmFtZXRlcml6ZWQtc29ydChcIktleXdvcmRBcmd1bWVudFwiLFtzb3J0KFwiRXhwcmVzc2lvblwiKV0pLFtsaXQoXCIsXCIpXSkiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKFxpdGVyLXNlcHMoXHBhcmFtZXRlcml6ZWQtc29ydCgiS2V5d29yZEFyZ3VtZW50Iixbc29ydCgiRXhwcmVzc2lvbiIpXSksW2xheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIiwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIildKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[4] = new CharStackNode(11106, 4, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(11103, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[0] = new CharStackNode(11101, 0, new int[][]{{0,0}}, null, null); - tmp[3] = new ListStackNode(11105, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(11104, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[1] = new LiteralStackNode(11102, 1, cHJvZChsaXQoIlxcaXRlci1zZXBzKFxccGFyYW1ldGVyaXplZC1zb3J0KFwiS2V5d29yZEFyZ3VtZW50XCIsW3NvcnQoXCJFeHByZXNzaW9uXCIpXSksW2xpdChcIixcIildKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoOTIsOTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ1LDQ1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTIsMTEyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTIsOTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTIyLDEyMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAwLDEwMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDUsNDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNzUsNzUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEyMSwxMjEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExOSwxMTkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMCwxMDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDY1LDY1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDMsMTAzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTcsMTE3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDksMTA5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDQsNDQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDkxLDkxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDY5LDY5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMjAsMTIwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTIsMTEyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDkzLDkzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDQsNDQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDkxLDkxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDkzLDkzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {92,105,116,101,114,45,115,101,112,115,40,92,112,97,114,97,109,101,116,101,114,105,122,101,100,45,115,111,114,116,40,34,75,101,121,119,111,114,100,65,114,103,117,109,101,110,116,34,44,91,115,111,114,116,40,34,69,120,112,114,101,115,115,105,111,110,34,41,93,41,44,91,108,105,116,40,34,44,34,41,93,41}, null, null); + tmp[4] = new CharStackNode(11043, 4, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(11040, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[0] = new CharStackNode(11038, 0, new int[][]{{0,0}}, null, null); + tmp[3] = new ListStackNode(11042, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(11041, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[1] = new LiteralStackNode(11039, 1, cHJvZChsaXQoIlxcaXRlci1zZXBzKFxccGFyYW1ldGVyaXplZC1zb3J0KFwiS2V5d29yZEFyZ3VtZW50XCIsW3NvcnQoXCJFeHByZXNzaW9uXCIpXSksW2xpdChcIixcIildKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoOTIsOTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ1LDQ1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTIsMTEyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTIsOTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTIyLDEyMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAwLDEwMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDUsNDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNzUsNzUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEyMSwxMjEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExOSwxMTkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMCwxMDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDY1LDY1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDMsMTAzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTcsMTE3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDksMTA5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDQsNDQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDkxLDkxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDY5LDY5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMjAsMTIwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTIsMTEyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDkzLDkzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDQsNDQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDkxLDkxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDkzLDkzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {92,105,116,101,114,45,115,101,112,115,40,92,112,97,114,97,109,101,116,101,114,105,122,101,100,45,115,111,114,116,40,34,75,101,121,119,111,114,100,65,114,103,117,109,101,110,116,34,44,91,115,111,114,116,40,34,69,120,112,114,101,115,115,105,111,110,34,41,93,41,44,91,108,105,116,40,34,44,34,41,93,41}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixccGFyYW1ldGVyaXplZC1zb3J0KCJLZXl3b3JkQXJndW1lbnQiLFtzb3J0KCJFeHByZXNzaW9uIildKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJcXGl0ZXItc2VwcyhcXHBhcmFtZXRlcml6ZWQtc29ydChcIktleXdvcmRBcmd1bWVudFwiLFtzb3J0KFwiRXhwcmVzc2lvblwiKV0pLFtsaXQoXCIsXCIpXSkiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKFxpdGVyLXNlcHMoXHBhcmFtZXRlcml6ZWQtc29ydCgiS2V5d29yZEFyZ3VtZW50Iixbc29ydCgiRXhwcmVzc2lvbiIpXSksW2xheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIiwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIildKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixccGFyYW1ldGVyaXplZC1zb3J0KCJLZXl3b3JkQXJndW1lbnQiLFtzb3J0KCJFeHByZXNzaW9uIildKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJcXHBhcmFtZXRlcml6ZWQtc29ydChcIktleXdvcmRBcmd1bWVudFwiLFtzb3J0KFwiRXhwcmVzc2lvblwiKV0pIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihccGFyYW1ldGVyaXplZC1zb3J0KCJLZXl3b3JkQXJndW1lbnQiLFtzb3J0KCJFeHByZXNzaW9uIildKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[2] = new LiteralStackNode(11118, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[3] = new ListStackNode(11120, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(11119, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[1] = new LiteralStackNode(11117, 1, cHJvZChsaXQoIlxccGFyYW1ldGVyaXplZC1zb3J0KFwiS2V5d29yZEFyZ3VtZW50XCIsW3NvcnQoXCJFeHByZXNzaW9uXCIpXSkiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkyLDkyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTIsMTEyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOSwxMDkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEyMiwxMjIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMCwxMDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ1LDQ1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDc1LDc1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMjEsMTIxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTksMTE5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDAsMTAwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg2NSw2NSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAzLDEwMyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE3LDExNyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5MSw5MSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg2OSw2OSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTIwLDEyMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEyLDExMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Myw5MyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {92,112,97,114,97,109,101,116,101,114,105,122,101,100,45,115,111,114,116,40,34,75,101,121,119,111,114,100,65,114,103,117,109,101,110,116,34,44,91,115,111,114,116,40,34,69,120,112,114,101,115,115,105,111,110,34,41,93,41}, null, null); - tmp[4] = new CharStackNode(11121, 4, new int[][]{{0,0}}, null, null); - tmp[0] = new CharStackNode(11116, 0, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(11055, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[3] = new ListStackNode(11057, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(11056, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[1] = new LiteralStackNode(11054, 1, cHJvZChsaXQoIlxccGFyYW1ldGVyaXplZC1zb3J0KFwiS2V5d29yZEFyZ3VtZW50XCIsW3NvcnQoXCJFeHByZXNzaW9uXCIpXSkiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkyLDkyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTIsMTEyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOSwxMDkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEyMiwxMjIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMCwxMDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ1LDQ1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDc1LDc1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMjEsMTIxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTksMTE5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDAsMTAwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg2NSw2NSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAzLDEwMyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE3LDExNyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5MSw5MSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg2OSw2OSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTIwLDEyMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEyLDExMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Myw5MyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {92,112,97,114,97,109,101,116,101,114,105,122,101,100,45,115,111,114,116,40,34,75,101,121,119,111,114,100,65,114,103,117,109,101,110,116,34,44,91,115,111,114,116,40,34,69,120,112,114,101,115,115,105,111,110,34,41,93,41}, null, null); + tmp[4] = new CharStackNode(11058, 4, new int[][]{{0,0}}, null, null); + tmp[0] = new CharStackNode(11053, 0, new int[][]{{0,0}}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixccGFyYW1ldGVyaXplZC1zb3J0KCJLZXl3b3JkQXJndW1lbnQiLFtzb3J0KCJFeHByZXNzaW9uIildKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJcXHBhcmFtZXRlcml6ZWQtc29ydChcIktleXdvcmRBcmd1bWVudFwiLFtzb3J0KFwiRXhwcmVzc2lvblwiKV0pIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihccGFyYW1ldGVyaXplZC1zb3J0KCJLZXl3b3JkQXJndW1lbnQiLFtzb3J0KCJFeHByZXNzaW9uIildKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiZGVmYXVsdCIsXHBhcmFtZXRlcml6ZWQtc29ydCgiS2V5d29yZEFyZ3VtZW50Iixbc29ydCgiRXhwcmVzc2lvbiIpXSkpLFtsYWJlbCgibmFtZSIsbGV4KCJOYW1lIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIj0iKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImV4cHJlc3Npb24iLHNvcnQoIkV4cHJlc3Npb24iKSldLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[2] = new LiteralStackNode(11130, 2, cHJvZChsaXQoIj0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDYxLDYxKV0pXSx7fSk00, new int[] {61}, null, null); - tmp[3] = new NonTerminalStackNode(11131, 3, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(11129, 1, "layouts_LAYOUTLIST", null, null); - tmp[0] = new NonTerminalStackNode(11127, 0, "Name", null, null); - tmp[4] = new NonTerminalStackNode(11132, 4, "Expression", null, null); + tmp[2] = new LiteralStackNode(11067, 2, cHJvZChsaXQoIj0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDYxLDYxKV0pXSx7fSk00, new int[] {61}, null, null); + tmp[3] = new NonTerminalStackNode(11068, 3, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(11066, 1, "layouts_LAYOUTLIST", null, null); + tmp[0] = new NonTerminalStackNode(11064, 0, "Name", null, null); + tmp[4] = new NonTerminalStackNode(11069, 4, "Expression", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiZGVmYXVsdCIsXHBhcmFtZXRlcml6ZWQtc29ydCgiS2V5d29yZEFyZ3VtZW50Iixbc29ydCgiRXhwcmVzc2lvbiIpXSkpLFtsYWJlbCgibmFtZSIsbGV4KCJOYW1lIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIj0iKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImV4cHJlc3Npb24iLHNvcnQoIkV4cHJlc3Npb24iKSldLHt9KQ0000, tmp); } public static void init(ExpectBuilder builder){ @@ -12145,59 +12130,59 @@ protected static class Literal { protected static final void _init_cHJvZChsYWJlbCgicmVnRXhwIixzb3J0KCJMaXRlcmFsIikpLFtsYWJlbCgicmVnRXhwTGl0ZXJhbCIsbGV4KCJSZWdFeHBMaXRlcmFsIikpXSx7dGFnKCJjYXRlZ29yeSIoInJlZ2V4cCIpKX0p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new NonTerminalStackNode(11270, 0, "RegExpLiteral", null, null); + tmp[0] = new NonTerminalStackNode(11207, 0, "RegExpLiteral", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgicmVnRXhwIixzb3J0KCJMaXRlcmFsIikpLFtsYWJlbCgicmVnRXhwTGl0ZXJhbCIsbGV4KCJSZWdFeHBMaXRlcmFsIikpXSx7dGFnKCJjYXRlZ29yeSIoInJlZ2V4cCIpKX0p, tmp); } protected static final void _init_cHJvZChsYWJlbCgiZGF0ZVRpbWUiLHNvcnQoIkxpdGVyYWwiKSksW2xhYmVsKCJkYXRlVGltZUxpdGVyYWwiLHNvcnQoIkRhdGVUaW1lTGl0ZXJhbCIpKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new NonTerminalStackNode(11274, 0, "DateTimeLiteral", null, null); + tmp[0] = new NonTerminalStackNode(11211, 0, "DateTimeLiteral", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiZGF0ZVRpbWUiLHNvcnQoIkxpdGVyYWwiKSksW2xhYmVsKCJkYXRlVGltZUxpdGVyYWwiLHNvcnQoIkRhdGVUaW1lTGl0ZXJhbCIpKV0se30p, tmp); } protected static final void _init_cHJvZChsYWJlbCgiYm9vbGVhbiIsc29ydCgiTGl0ZXJhbCIpKSxbbGFiZWwoImJvb2xlYW5MaXRlcmFsIixsZXgoIkJvb2xlYW5MaXRlcmFsIikpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new NonTerminalStackNode(11278, 0, "BooleanLiteral", null, null); + tmp[0] = new NonTerminalStackNode(11215, 0, "BooleanLiteral", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiYm9vbGVhbiIsc29ydCgiTGl0ZXJhbCIpKSxbbGFiZWwoImJvb2xlYW5MaXRlcmFsIixsZXgoIkJvb2xlYW5MaXRlcmFsIikpXSx7fSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJMaXRlcmFsIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIkxpdGVyYWxcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKHNvcnQoIkxpdGVyYWwiKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[4] = new CharStackNode(11287, 4, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(11284, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[0] = new CharStackNode(11282, 0, new int[][]{{0,0}}, null, null); - tmp[3] = new ListStackNode(11286, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(11285, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[1] = new LiteralStackNode(11283, 1, cHJvZChsaXQoInNvcnQoXCJMaXRlcmFsXCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDc2LDc2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {115,111,114,116,40,34,76,105,116,101,114,97,108,34,41}, null, null); + tmp[4] = new CharStackNode(11224, 4, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(11221, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[0] = new CharStackNode(11219, 0, new int[][]{{0,0}}, null, null); + tmp[3] = new ListStackNode(11223, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(11222, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[1] = new LiteralStackNode(11220, 1, cHJvZChsaXQoInNvcnQoXCJMaXRlcmFsXCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDc2LDc2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {115,111,114,116,40,34,76,105,116,101,114,97,108,34,41}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJMaXRlcmFsIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIkxpdGVyYWxcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKHNvcnQoIkxpdGVyYWwiKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgibG9jYXRpb24iLHNvcnQoIkxpdGVyYWwiKSksW2xhYmVsKCJsb2NhdGlvbkxpdGVyYWwiLHNvcnQoIkxvY2F0aW9uTGl0ZXJhbCIpKV0se3RhZygiY2F0ZWdvcnkiKCJzdHJpbmciKSl9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new NonTerminalStackNode(11291, 0, "LocationLiteral", null, null); + tmp[0] = new NonTerminalStackNode(11228, 0, "LocationLiteral", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgibG9jYXRpb24iLHNvcnQoIkxpdGVyYWwiKSksW2xhYmVsKCJsb2NhdGlvbkxpdGVyYWwiLHNvcnQoIkxvY2F0aW9uTGl0ZXJhbCIpKV0se3RhZygiY2F0ZWdvcnkiKCJzdHJpbmciKSl9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgicmVhbCIsc29ydCgiTGl0ZXJhbCIpKSxbbGFiZWwoInJlYWxMaXRlcmFsIixsZXgoIlJlYWxMaXRlcmFsIikpXSx7dGFnKCJjYXRlZ29yeSIoIm51bWJlciIpKX0p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new NonTerminalStackNode(11295, 0, "RealLiteral", null, null); + tmp[0] = new NonTerminalStackNode(11232, 0, "RealLiteral", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgicmVhbCIsc29ydCgiTGl0ZXJhbCIpKSxbbGFiZWwoInJlYWxMaXRlcmFsIixsZXgoIlJlYWxMaXRlcmFsIikpXSx7dGFnKCJjYXRlZ29yeSIoIm51bWJlciIpKX0p, tmp); } protected static final void _init_cHJvZChsYWJlbCgiaW50ZWdlciIsc29ydCgiTGl0ZXJhbCIpKSxbbGFiZWwoImludGVnZXJMaXRlcmFsIixzb3J0KCJJbnRlZ2VyTGl0ZXJhbCIpKV0se3RhZygiY2F0ZWdvcnkiKCJudW1iZXIiKSl9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new NonTerminalStackNode(11299, 0, "IntegerLiteral", null, null); + tmp[0] = new NonTerminalStackNode(11236, 0, "IntegerLiteral", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiaW50ZWdlciIsc29ydCgiTGl0ZXJhbCIpKSxbbGFiZWwoImludGVnZXJMaXRlcmFsIixzb3J0KCJJbnRlZ2VyTGl0ZXJhbCIpKV0se3RhZygiY2F0ZWdvcnkiKCJudW1iZXIiKSl9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgic3RyaW5nIixzb3J0KCJMaXRlcmFsIikpLFtsYWJlbCgic3RyaW5nTGl0ZXJhbCIsc29ydCgiU3RyaW5nTGl0ZXJhbCIpKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new NonTerminalStackNode(11303, 0, "StringLiteral", null, null); + tmp[0] = new NonTerminalStackNode(11240, 0, "StringLiteral", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgic3RyaW5nIixzb3J0KCJMaXRlcmFsIikpLFtsYWJlbCgic3RyaW5nTGl0ZXJhbCIsc29ydCgiU3RyaW5nTGl0ZXJhbCIpKV0se30p, tmp); } protected static final void _init_cHJvZChsYWJlbCgicmF0aW9uYWwiLHNvcnQoIkxpdGVyYWwiKSksW2xhYmVsKCJyYXRpb25hbExpdGVyYWwiLGxleCgiUmF0aW9uYWxMaXRlcmFsIikpXSx7dGFnKCJjYXRlZ29yeSIoIm51bWJlciIpKX0p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new NonTerminalStackNode(11307, 0, "RationalLiteral", null, null); + tmp[0] = new NonTerminalStackNode(11244, 0, "RationalLiteral", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgicmF0aW9uYWwiLHNvcnQoIkxpdGVyYWwiKSksW2xhYmVsKCJyYXRpb25hbExpdGVyYWwiLGxleCgiUmF0aW9uYWxMaXRlcmFsIikpXSx7dGFnKCJjYXRlZ29yeSIoIm51bWJlciIpKX0p, tmp); } public static void init(ExpectBuilder builder){ @@ -12234,39 +12219,39 @@ protected static class ProdModifier { protected static final void _init_cHJvZChsYWJlbCgiYnJhY2tldCIsc29ydCgiUHJvZE1vZGlmaWVyIikpLFtsaXQoImJyYWNrZXQiKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(11315, 0, cHJvZChsaXQoImJyYWNrZXQiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDk4LDk4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTksOTkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNywxMDcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSldLHt9KQ0000, new int[] {98,114,97,99,107,101,116}, null, null); + tmp[0] = new LiteralStackNode(11252, 0, cHJvZChsaXQoImJyYWNrZXQiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDk4LDk4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTksOTkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNywxMDcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSldLHt9KQ0000, new int[] {98,114,97,99,107,101,116}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiYnJhY2tldCIsc29ydCgiUHJvZE1vZGlmaWVyIikpLFtsaXQoImJyYWNrZXQiKV0se30p, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJQcm9kTW9kaWZpZXIiKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJzb3J0KFwiUHJvZE1vZGlmaWVyXCIpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihzb3J0KCJQcm9kTW9kaWZpZXIiKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[3] = new ListStackNode(11322, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(11321, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[1] = new LiteralStackNode(11319, 1, cHJvZChsaXQoInNvcnQoXCJQcm9kTW9kaWZpZXJcIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODAsODApXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMCwxMDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDc3LDc3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDAsMTAwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDIsMTAyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {115,111,114,116,40,34,80,114,111,100,77,111,100,105,102,105,101,114,34,41}, null, null); - tmp[0] = new CharStackNode(11318, 0, new int[][]{{0,0}}, null, null); - tmp[4] = new CharStackNode(11323, 4, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(11320, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[3] = new ListStackNode(11259, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(11258, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[1] = new LiteralStackNode(11256, 1, cHJvZChsaXQoInNvcnQoXCJQcm9kTW9kaWZpZXJcIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODAsODApXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMCwxMDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDc3LDc3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDAsMTAwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDIsMTAyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {115,111,114,116,40,34,80,114,111,100,77,111,100,105,102,105,101,114,34,41}, null, null); + tmp[0] = new CharStackNode(11255, 0, new int[][]{{0,0}}, null, null); + tmp[4] = new CharStackNode(11260, 4, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(11257, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJQcm9kTW9kaWZpZXIiKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJzb3J0KFwiUHJvZE1vZGlmaWVyXCIpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihzb3J0KCJQcm9kTW9kaWZpZXIiKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgidGFnIixzb3J0KCJQcm9kTW9kaWZpZXIiKSksW2xhYmVsKCJ0YWciLHNvcnQoIlRhZyIpKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new NonTerminalStackNode(11327, 0, "Tag", null, null); + tmp[0] = new NonTerminalStackNode(11264, 0, "Tag", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgidGFnIixzb3J0KCJQcm9kTW9kaWZpZXIiKSksW2xhYmVsKCJ0YWciLHNvcnQoIlRhZyIpKV0se30p, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJQcm9kTW9kaWZpZXIiKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJcXGl0ZXItc3Rhcihzb3J0KFwiUHJvZE1vZGlmaWVyXCIpKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoXGl0ZXItc3Rhci1zZXBzKHNvcnQoIlByb2RNb2RpZmllciIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIildKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[0] = new CharStackNode(11331, 0, new int[][]{{0,0}}, null, null); - tmp[4] = new CharStackNode(11336, 4, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(11333, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[3] = new ListStackNode(11335, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(11334, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[1] = new LiteralStackNode(11332, 1, cHJvZChsaXQoIlxcaXRlci1zdGFyKHNvcnQoXCJQcm9kTW9kaWZpZXJcIikpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg5Miw5MildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDUsNDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4MCw4MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAwLDEwMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNzcsNzcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMCwxMDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMiwxMDIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {92,105,116,101,114,45,115,116,97,114,40,115,111,114,116,40,34,80,114,111,100,77,111,100,105,102,105,101,114,34,41,41}, null, null); + tmp[0] = new CharStackNode(11268, 0, new int[][]{{0,0}}, null, null); + tmp[4] = new CharStackNode(11273, 4, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(11270, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[3] = new ListStackNode(11272, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(11271, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[1] = new LiteralStackNode(11269, 1, cHJvZChsaXQoIlxcaXRlci1zdGFyKHNvcnQoXCJQcm9kTW9kaWZpZXJcIikpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg5Miw5MildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDUsNDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4MCw4MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAwLDEwMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNzcsNzcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMCwxMDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMiwxMDIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {92,105,116,101,114,45,115,116,97,114,40,115,111,114,116,40,34,80,114,111,100,77,111,100,105,102,105,101,114,34,41,41}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJQcm9kTW9kaWZpZXIiKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJcXGl0ZXItc3Rhcihzb3J0KFwiUHJvZE1vZGlmaWVyXCIpKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoXGl0ZXItc3Rhci1zZXBzKHNvcnQoIlByb2RNb2RpZmllciIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIildKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiYXNzb2NpYXRpdml0eSIsc29ydCgiUHJvZE1vZGlmaWVyIikpLFtsYWJlbCgiYXNzb2NpYXRpdml0eSIsc29ydCgiQXNzb2MiKSldLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new NonTerminalStackNode(11342, 0, "Assoc", null, null); + tmp[0] = new NonTerminalStackNode(11279, 0, "Assoc", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiYXNzb2NpYXRpdml0eSIsc29ydCgiUHJvZE1vZGlmaWVyIikpLFtsYWJlbCgiYXNzb2NpYXRpdml0eSIsc29ydCgiQXNzb2MiKSldLHt9KQ0000, tmp); } public static void init(ExpectBuilder builder){ @@ -12295,20 +12280,20 @@ protected static class RegExpLiteral { protected static final void _init_cHJvZChsZXgoIlJlZ0V4cExpdGVyYWwiKSxbbGl0KCIvIiksXGl0ZXItc3RhcihsZXgoIlJlZ0V4cCIpKSxsaXQoIi8iKSxsZXgoIlJlZ0V4cE1vZGlmaWVyIildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[4]; - tmp[2] = new LiteralStackNode(11779, 2, cHJvZChsaXQoIi8iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ3LDQ3KV0pXSx7fSk00, new int[] {47}, null, null); - tmp[0] = new LiteralStackNode(11776, 0, cHJvZChsaXQoIi8iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ3LDQ3KV0pXSx7fSk00, new int[] {47}, null, null); - tmp[1] = new ListStackNode(11778, 1, cmVndWxhcihcaXRlci1zdGFyKGxleCgiUmVnRXhwIikpKQ0000, new NonTerminalStackNode(11777, 0, "RegExp", null, null), false, null, null); - tmp[3] = new NonTerminalStackNode(11780, 3, "RegExpModifier", null, null); + tmp[2] = new LiteralStackNode(11716, 2, cHJvZChsaXQoIi8iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ3LDQ3KV0pXSx7fSk00, new int[] {47}, null, null); + tmp[0] = new LiteralStackNode(11713, 0, cHJvZChsaXQoIi8iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ3LDQ3KV0pXSx7fSk00, new int[] {47}, null, null); + tmp[1] = new ListStackNode(11715, 1, cmVndWxhcihcaXRlci1zdGFyKGxleCgiUmVnRXhwIikpKQ0000, new NonTerminalStackNode(11714, 0, "RegExp", null, null), false, null, null); + tmp[3] = new NonTerminalStackNode(11717, 3, "RegExpModifier", null, null); builder.addAlternative(RascalParser.cHJvZChsZXgoIlJlZ0V4cExpdGVyYWwiKSxbbGl0KCIvIiksXGl0ZXItc3RhcihsZXgoIlJlZ0V4cCIpKSxsaXQoIi8iKSxsZXgoIlJlZ0V4cE1vZGlmaWVyIildLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIlJlZ0V4cExpdGVyYWwiKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJzb3J0KFwiUmVnRXhwTGl0ZXJhbFwiKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIobGV4KCJSZWdFeHBMaXRlcmFsIikpKX0p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[0] = new CharStackNode(11783, 0, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(11785, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[4] = new CharStackNode(11788, 4, new int[][]{{0,0}}, null, null); - tmp[1] = new LiteralStackNode(11784, 1, cHJvZChsaXQoInNvcnQoXCJSZWdFeHBMaXRlcmFsXCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDgyLDgyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDMsMTAzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg2OSw2OSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTIwLDEyMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEyLDExMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNzYsNzYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {115,111,114,116,40,34,82,101,103,69,120,112,76,105,116,101,114,97,108,34,41}, null, null); - tmp[3] = new ListStackNode(11787, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(11786, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[0] = new CharStackNode(11720, 0, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(11722, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[4] = new CharStackNode(11725, 4, new int[][]{{0,0}}, null, null); + tmp[1] = new LiteralStackNode(11721, 1, cHJvZChsaXQoInNvcnQoXCJSZWdFeHBMaXRlcmFsXCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDgyLDgyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDMsMTAzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg2OSw2OSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTIwLDEyMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEyLDExMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNzYsNzYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {115,111,114,116,40,34,82,101,103,69,120,112,76,105,116,101,114,97,108,34,41}, null, null); + tmp[3] = new ListStackNode(11724, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(11723, 0, new int[][]{{48,57}}, null, null), true, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIlJlZ0V4cExpdGVyYWwiKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJzb3J0KFwiUmVnRXhwTGl0ZXJhbFwiKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIobGV4KCJSZWdFeHBMaXRlcmFsIikpKX0p, tmp); } public static void init(ExpectBuilder builder){ @@ -12331,31 +12316,31 @@ protected static class KeywordArgument_W3NvcnQoIlBhdHRlcm4iKV000 { protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixccGFyYW1ldGVyaXplZC1zb3J0KCJLZXl3b3JkQXJndW1lbnQiLFtzb3J0KCJQYXR0ZXJuIildKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJcXGl0ZXItc2VwcyhcXHBhcmFtZXRlcml6ZWQtc29ydChcIktleXdvcmRBcmd1bWVudFwiLFtzb3J0KFwiUGF0dGVyblwiKV0pLFtsaXQoXCIsXCIpXSkiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKFxpdGVyLXNlcHMoXHBhcmFtZXRlcml6ZWQtc29ydCgiS2V5d29yZEFyZ3VtZW50Iixbc29ydCgiUGF0dGVybiIpXSksW2xheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIiwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIildKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[2] = new LiteralStackNode(11829, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[4] = new CharStackNode(11832, 4, new int[][]{{0,0}}, null, null); - tmp[0] = new CharStackNode(11827, 0, new int[][]{{0,0}}, null, null); - tmp[1] = new LiteralStackNode(11828, 1, cHJvZChsaXQoIlxcaXRlci1zZXBzKFxccGFyYW1ldGVyaXplZC1zb3J0KFwiS2V5d29yZEFyZ3VtZW50XCIsW3NvcnQoXCJQYXR0ZXJuXCIpXSksW2xpdChcIixcIildKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoOTIsOTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ1LDQ1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTIsMTEyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTIsOTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTIyLDEyMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAwLDEwMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDUsNDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNzUsNzUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEyMSwxMjEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExOSwxMTkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMCwxMDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDY1LDY1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDMsMTAzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTcsMTE3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDksMTA5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDQsNDQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDkxLDkxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDgwLDgwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Myw5MyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5MSw5MSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NCw0NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Myw5MyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {92,105,116,101,114,45,115,101,112,115,40,92,112,97,114,97,109,101,116,101,114,105,122,101,100,45,115,111,114,116,40,34,75,101,121,119,111,114,100,65,114,103,117,109,101,110,116,34,44,91,115,111,114,116,40,34,80,97,116,116,101,114,110,34,41,93,41,44,91,108,105,116,40,34,44,34,41,93,41}, null, null); - tmp[3] = new ListStackNode(11831, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(11830, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[2] = new LiteralStackNode(11766, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[4] = new CharStackNode(11769, 4, new int[][]{{0,0}}, null, null); + tmp[0] = new CharStackNode(11764, 0, new int[][]{{0,0}}, null, null); + tmp[1] = new LiteralStackNode(11765, 1, cHJvZChsaXQoIlxcaXRlci1zZXBzKFxccGFyYW1ldGVyaXplZC1zb3J0KFwiS2V5d29yZEFyZ3VtZW50XCIsW3NvcnQoXCJQYXR0ZXJuXCIpXSksW2xpdChcIixcIildKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoOTIsOTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ1LDQ1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTIsMTEyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTIsOTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTIyLDEyMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAwLDEwMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDUsNDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNzUsNzUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEyMSwxMjEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExOSwxMTkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMCwxMDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDY1LDY1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDMsMTAzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTcsMTE3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDksMTA5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDQsNDQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDkxLDkxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDgwLDgwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Myw5MyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5MSw5MSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NCw0NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Myw5MyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {92,105,116,101,114,45,115,101,112,115,40,92,112,97,114,97,109,101,116,101,114,105,122,101,100,45,115,111,114,116,40,34,75,101,121,119,111,114,100,65,114,103,117,109,101,110,116,34,44,91,115,111,114,116,40,34,80,97,116,116,101,114,110,34,41,93,41,44,91,108,105,116,40,34,44,34,41,93,41}, null, null); + tmp[3] = new ListStackNode(11768, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(11767, 0, new int[][]{{48,57}}, null, null), true, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixccGFyYW1ldGVyaXplZC1zb3J0KCJLZXl3b3JkQXJndW1lbnQiLFtzb3J0KCJQYXR0ZXJuIildKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJcXGl0ZXItc2VwcyhcXHBhcmFtZXRlcml6ZWQtc29ydChcIktleXdvcmRBcmd1bWVudFwiLFtzb3J0KFwiUGF0dGVyblwiKV0pLFtsaXQoXCIsXCIpXSkiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKFxpdGVyLXNlcHMoXHBhcmFtZXRlcml6ZWQtc29ydCgiS2V5d29yZEFyZ3VtZW50Iixbc29ydCgiUGF0dGVybiIpXSksW2xheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIiwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIildKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixccGFyYW1ldGVyaXplZC1zb3J0KCJLZXl3b3JkQXJndW1lbnQiLFtzb3J0KCJQYXR0ZXJuIildKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJcXHBhcmFtZXRlcml6ZWQtc29ydChcIktleXdvcmRBcmd1bWVudFwiLFtzb3J0KFwiUGF0dGVyblwiKV0pIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihccGFyYW1ldGVyaXplZC1zb3J0KCJLZXl3b3JkQXJndW1lbnQiLFtzb3J0KCJQYXR0ZXJuIildKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[4] = new CharStackNode(11847, 4, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(11844, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[0] = new CharStackNode(11842, 0, new int[][]{{0,0}}, null, null); - tmp[3] = new ListStackNode(11846, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(11845, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[1] = new LiteralStackNode(11843, 1, cHJvZChsaXQoIlxccGFyYW1ldGVyaXplZC1zb3J0KFwiS2V5d29yZEFyZ3VtZW50XCIsW3NvcnQoXCJQYXR0ZXJuXCIpXSkiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkyLDkyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTIsMTEyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOSwxMDkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEyMiwxMjIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMCwxMDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ1LDQ1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDc1LDc1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMjEsMTIxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTksMTE5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDAsMTAwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg2NSw2NSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAzLDEwMyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE3LDExNyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5MSw5MSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4MCw4MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTMsOTMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {92,112,97,114,97,109,101,116,101,114,105,122,101,100,45,115,111,114,116,40,34,75,101,121,119,111,114,100,65,114,103,117,109,101,110,116,34,44,91,115,111,114,116,40,34,80,97,116,116,101,114,110,34,41,93,41}, null, null); + tmp[4] = new CharStackNode(11784, 4, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(11781, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[0] = new CharStackNode(11779, 0, new int[][]{{0,0}}, null, null); + tmp[3] = new ListStackNode(11783, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(11782, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[1] = new LiteralStackNode(11780, 1, cHJvZChsaXQoIlxccGFyYW1ldGVyaXplZC1zb3J0KFwiS2V5d29yZEFyZ3VtZW50XCIsW3NvcnQoXCJQYXR0ZXJuXCIpXSkiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkyLDkyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTIsMTEyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOSwxMDkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEyMiwxMjIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMCwxMDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ1LDQ1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDc1LDc1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMjEsMTIxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTksMTE5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDAsMTAwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg2NSw2NSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAzLDEwMyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE3LDExNyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5MSw5MSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4MCw4MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTMsOTMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {92,112,97,114,97,109,101,116,101,114,105,122,101,100,45,115,111,114,116,40,34,75,101,121,119,111,114,100,65,114,103,117,109,101,110,116,34,44,91,115,111,114,116,40,34,80,97,116,116,101,114,110,34,41,93,41}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixccGFyYW1ldGVyaXplZC1zb3J0KCJLZXl3b3JkQXJndW1lbnQiLFtzb3J0KCJQYXR0ZXJuIildKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJcXHBhcmFtZXRlcml6ZWQtc29ydChcIktleXdvcmRBcmd1bWVudFwiLFtzb3J0KFwiUGF0dGVyblwiKV0pIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihccGFyYW1ldGVyaXplZC1zb3J0KCJLZXl3b3JkQXJndW1lbnQiLFtzb3J0KCJQYXR0ZXJuIildKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiZGVmYXVsdCIsXHBhcmFtZXRlcml6ZWQtc29ydCgiS2V5d29yZEFyZ3VtZW50Iixbc29ydCgiUGF0dGVybiIpXSkpLFtsYWJlbCgibmFtZSIsbGV4KCJOYW1lIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIj0iKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImV4cHJlc3Npb24iLHNvcnQoIlBhdHRlcm4iKSldLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[0] = new NonTerminalStackNode(11853, 0, "Name", null, null); - tmp[4] = new NonTerminalStackNode(11858, 4, "Pattern", null, null); - tmp[2] = new LiteralStackNode(11856, 2, cHJvZChsaXQoIj0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDYxLDYxKV0pXSx7fSk00, new int[] {61}, null, null); - tmp[3] = new NonTerminalStackNode(11857, 3, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(11855, 1, "layouts_LAYOUTLIST", null, null); + tmp[0] = new NonTerminalStackNode(11790, 0, "Name", null, null); + tmp[4] = new NonTerminalStackNode(11795, 4, "Pattern", null, null); + tmp[2] = new LiteralStackNode(11793, 2, cHJvZChsaXQoIj0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDYxLDYxKV0pXSx7fSk00, new int[] {61}, null, null); + tmp[3] = new NonTerminalStackNode(11794, 3, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(11792, 1, "layouts_LAYOUTLIST", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiZGVmYXVsdCIsXHBhcmFtZXRlcml6ZWQtc29ydCgiS2V5d29yZEFyZ3VtZW50Iixbc29ydCgiUGF0dGVybiIpXSkpLFtsYWJlbCgibmFtZSIsbGV4KCJOYW1lIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIj0iKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImV4cHJlc3Npb24iLHNvcnQoIlBhdHRlcm4iKSldLHt9KQ0000, tmp); } public static void init(ExpectBuilder builder){ @@ -12380,17 +12365,17 @@ protected static class Nonterminal { protected static final void _init_cHJvZChsZXgoIk5vbnRlcm1pbmFsIiksW2NvbmRpdGlvbmFsKHNlcShbY29uZGl0aW9uYWwoXGNoYXItY2xhc3MoW3JhbmdlKDY1LDkwKV0pLHtcbm90LXByZWNlZGUoXGNoYXItY2xhc3MoW3JhbmdlKDY1LDkwKV0pKX0pLGNvbmRpdGlvbmFsKFxpdGVyLXN0YXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KSxyYW5nZSg2NSw5MCkscmFuZ2UoOTUsOTUpLHJhbmdlKDk3LDEyMildKSkse1xub3QtZm9sbG93KFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NykscmFuZ2UoNjUsOTApLHJhbmdlKDk1LDk1KSxyYW5nZSg5NywxMjIpXSkpfSldKSx7ZGVsZXRlKGtleXdvcmRzKCJSYXNjYWxLZXl3b3JkcyIpKX0pXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new SequenceStackNode(11948, 0, cmVndWxhcihzZXEoW2NvbmRpdGlvbmFsKFxjaGFyLWNsYXNzKFtyYW5nZSg2NSw5MCldKSx7XG5vdC1wcmVjZWRlKFxjaGFyLWNsYXNzKFtyYW5nZSg2NSw5MCldKSl9KSxjb25kaXRpb25hbChcaXRlci1zdGFyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NykscmFuZ2UoNjUsOTApLHJhbmdlKDk1LDk1KSxyYW5nZSg5NywxMjIpXSkpLHtcbm90LWZvbGxvdyhcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpLHJhbmdlKDY1LDkwKSxyYW5nZSg5NSw5NSkscmFuZ2UoOTcsMTIyKV0pKX0pXSkp, (AbstractStackNode[]) new AbstractStackNode[]{new CharStackNode(11941, 0, new int[][]{{65,90}}, new IEnterFilter[] {new CharPrecedeRestriction(new int[][]{{65,90}})}, null), new ListStackNode(11945, 1, cmVndWxhcihcaXRlci1zdGFyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NykscmFuZ2UoNjUsOTApLHJhbmdlKDk1LDk1KSxyYW5nZSg5NywxMjIpXSkpKQ0000, new CharStackNode(11942, 0, new int[][]{{48,57},{65,90},{95,95},{97,122}}, null, null), false, null, new ICompletionFilter[] {new CharFollowRestriction(new int[][]{{48,57},{65,90},{95,95},{97,122}})})}, null, new ICompletionFilter[] {new StringMatchRestriction(new int[] {108,114,101,108}), new StringMatchRestriction(new int[] {112,114,105,118,97,116,101}), new StringMatchRestriction(new int[] {98,97,103}), new StringMatchRestriction(new int[] {100,101,102,97,117,108,116}), new StringMatchRestriction(new int[] {108,97,121,111,117,116}), new StringMatchRestriction(new int[] {97,115,115,111,99}), new StringMatchRestriction(new int[] {105,102}), new StringMatchRestriction(new int[] {108,111,99}), new StringMatchRestriction(new int[] {98,114,97,99,107,101,116}), new StringMatchRestriction(new int[] {110,111,116,105,110}), new StringMatchRestriction(new int[] {102,97,105,108}), new StringMatchRestriction(new int[] {116,114,117,101}), new StringMatchRestriction(new int[] {105,109,112,111,114,116}), new StringMatchRestriction(new int[] {110,117,109}), new StringMatchRestriction(new int[] {108,101,120,105,99,97,108}), new StringMatchRestriction(new int[] {109,111,100}), new StringMatchRestriction(new int[] {106,111,105,110}), new StringMatchRestriction(new int[] {116,117,112,108,101}), new StringMatchRestriction(new int[] {97,110,110,111}), new StringMatchRestriction(new int[] {98,111,111,108}), new StringMatchRestriction(new int[] {116,104,114,111,119}), new StringMatchRestriction(new int[] {115,116,97,114,116}), new StringMatchRestriction(new int[] {112,117,98,108,105,99}), new StringMatchRestriction(new int[] {118,105,115,105,116}), new StringMatchRestriction(new int[] {109,111,100,117,108,101}), new StringMatchRestriction(new int[] {114,101,97,108}), new StringMatchRestriction(new int[] {111}), new StringMatchRestriction(new int[] {97,108,105,97,115}), new StringMatchRestriction(new int[] {110,111,110,45,97,115,115,111,99}), new StringMatchRestriction(new int[] {100,97,116,101,116,105,109,101}), new StringMatchRestriction(new int[] {105,110,115,101,114,116}), new StringMatchRestriction(new int[] {109,97,112}), new StringMatchRestriction(new int[] {116,104,114,111,119,115}), new StringMatchRestriction(new int[] {118,111,105,100}), new StringMatchRestriction(new int[] {102,111,114}), new StringMatchRestriction(new int[] {114,101,108}), new StringMatchRestriction(new int[] {115,116,114}), new StringMatchRestriction(new int[] {115,101,116}), new StringMatchRestriction(new int[] {105,116}), new StringMatchRestriction(new int[] {99,97,115,101}), new StringMatchRestriction(new int[] {101,120,116,101,110,100}), new StringMatchRestriction(new int[] {102,97,108,115,101}), new StringMatchRestriction(new int[] {110,111,100,101}), new StringMatchRestriction(new int[] {101,108,115,101}), new StringMatchRestriction(new int[] {116,114,121}), new StringMatchRestriction(new int[] {118,97,108,117,101}), new StringMatchRestriction(new int[] {99,97,116,99,104}), new StringMatchRestriction(new int[] {115,111,108,118,101}), new StringMatchRestriction(new int[] {119,104,105,108,101}), new StringMatchRestriction(new int[] {102,105,110,97,108,108,121}), new StringMatchRestriction(new int[] {107,101,121,119,111,114,100}), new StringMatchRestriction(new int[] {115,121,110,116,97,120}), new StringMatchRestriction(new int[] {97,110,121}), new StringMatchRestriction(new int[] {97,115,115,101,114,116}), new StringMatchRestriction(new int[] {116,97,103}), new StringMatchRestriction(new int[] {114,97,116}), new StringMatchRestriction(new int[] {108,105,115,116}), new StringMatchRestriction(new int[] {99,111,110,116,105,110,117,101}), new StringMatchRestriction(new int[] {102,105,108,116,101,114}), new StringMatchRestriction(new int[] {116,121,112,101}), new StringMatchRestriction(new int[] {97,108,108}), new StringMatchRestriction(new int[] {111,110,101}), new StringMatchRestriction(new int[] {116,101,115,116}), new StringMatchRestriction(new int[] {105,110}), new StringMatchRestriction(new int[] {100,121,110,97,109,105,99}), new StringMatchRestriction(new int[] {105,110,116}), new StringMatchRestriction(new int[] {114,101,116,117,114,110}), new StringMatchRestriction(new int[] {100,97,116,97}), new StringMatchRestriction(new int[] {97,112,112,101,110,100}), new StringMatchRestriction(new int[] {115,119,105,116,99,104}), new StringMatchRestriction(new int[] {98,114,101,97,107})}); + tmp[0] = new SequenceStackNode(11885, 0, cmVndWxhcihzZXEoW2NvbmRpdGlvbmFsKFxjaGFyLWNsYXNzKFtyYW5nZSg2NSw5MCldKSx7XG5vdC1wcmVjZWRlKFxjaGFyLWNsYXNzKFtyYW5nZSg2NSw5MCldKSl9KSxjb25kaXRpb25hbChcaXRlci1zdGFyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NykscmFuZ2UoNjUsOTApLHJhbmdlKDk1LDk1KSxyYW5nZSg5NywxMjIpXSkpLHtcbm90LWZvbGxvdyhcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpLHJhbmdlKDY1LDkwKSxyYW5nZSg5NSw5NSkscmFuZ2UoOTcsMTIyKV0pKX0pXSkp, (AbstractStackNode[]) new AbstractStackNode[]{new CharStackNode(11878, 0, new int[][]{{65,90}}, new IEnterFilter[] {new CharPrecedeRestriction(new int[][]{{65,90}})}, null), new ListStackNode(11882, 1, cmVndWxhcihcaXRlci1zdGFyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NykscmFuZ2UoNjUsOTApLHJhbmdlKDk1LDk1KSxyYW5nZSg5NywxMjIpXSkpKQ0000, new CharStackNode(11879, 0, new int[][]{{48,57},{65,90},{95,95},{97,122}}, null, null), false, null, new ICompletionFilter[] {new CharFollowRestriction(new int[][]{{48,57},{65,90},{95,95},{97,122}})})}, null, new ICompletionFilter[] {new StringMatchRestriction(new int[] {116,104,114,111,119,115}), new StringMatchRestriction(new int[] {118,111,105,100}), new StringMatchRestriction(new int[] {112,117,98,108,105,99}), new StringMatchRestriction(new int[] {100,97,116,97}), new StringMatchRestriction(new int[] {102,105,110,97,108,108,121}), new StringMatchRestriction(new int[] {116,114,121}), new StringMatchRestriction(new int[] {115,116,97,114,116}), new StringMatchRestriction(new int[] {98,114,101,97,107}), new StringMatchRestriction(new int[] {105,109,112,111,114,116}), new StringMatchRestriction(new int[] {105,110,115,101,114,116}), new StringMatchRestriction(new int[] {116,121,112,101}), new StringMatchRestriction(new int[] {116,101,115,116}), new StringMatchRestriction(new int[] {109,97,112}), new StringMatchRestriction(new int[] {99,111,110,116,105,110,117,101}), new StringMatchRestriction(new int[] {102,97,105,108}), new StringMatchRestriction(new int[] {99,97,116,99,104}), new StringMatchRestriction(new int[] {115,121,110,116,97,120}), new StringMatchRestriction(new int[] {100,97,116,101,116,105,109,101}), new StringMatchRestriction(new int[] {111}), new StringMatchRestriction(new int[] {110,117,109}), new StringMatchRestriction(new int[] {114,97,116}), new StringMatchRestriction(new int[] {101,120,116,101,110,100}), new StringMatchRestriction(new int[] {107,101,121,119,111,114,100}), new StringMatchRestriction(new int[] {115,119,105,116,99,104}), new StringMatchRestriction(new int[] {97,110,121}), new StringMatchRestriction(new int[] {119,104,105,108,101}), new StringMatchRestriction(new int[] {108,105,115,116}), new StringMatchRestriction(new int[] {110,111,116,105,110}), new StringMatchRestriction(new int[] {108,114,101,108}), new StringMatchRestriction(new int[] {112,114,105,118,97,116,101}), new StringMatchRestriction(new int[] {114,101,108}), new StringMatchRestriction(new int[] {118,97,108,117,101}), new StringMatchRestriction(new int[] {102,105,108,116,101,114}), new StringMatchRestriction(new int[] {109,111,100}), new StringMatchRestriction(new int[] {97,115,115,111,99}), new StringMatchRestriction(new int[] {97,112,112,101,110,100}), new StringMatchRestriction(new int[] {110,111,100,101}), new StringMatchRestriction(new int[] {99,97,115,101}), new StringMatchRestriction(new int[] {115,101,116}), new StringMatchRestriction(new int[] {114,101,97,108}), new StringMatchRestriction(new int[] {106,111,105,110}), new StringMatchRestriction(new int[] {97,110,110,111}), new StringMatchRestriction(new int[] {114,101,116,117,114,110}), new StringMatchRestriction(new int[] {111,110,101}), new StringMatchRestriction(new int[] {116,104,114,111,119}), new StringMatchRestriction(new int[] {116,97,103}), new StringMatchRestriction(new int[] {98,97,103}), new StringMatchRestriction(new int[] {100,101,102,97,117,108,116}), new StringMatchRestriction(new int[] {108,101,120,105,99,97,108}), new StringMatchRestriction(new int[] {101,108,115,101}), new StringMatchRestriction(new int[] {98,114,97,99,107,101,116}), new StringMatchRestriction(new int[] {97,108,108}), new StringMatchRestriction(new int[] {97,108,105,97,115}), new StringMatchRestriction(new int[] {98,111,111,108}), new StringMatchRestriction(new int[] {105,110,116}), new StringMatchRestriction(new int[] {105,102}), new StringMatchRestriction(new int[] {100,121,110,97,109,105,99}), new StringMatchRestriction(new int[] {116,117,112,108,101}), new StringMatchRestriction(new int[] {97,115,115,101,114,116}), new StringMatchRestriction(new int[] {105,116}), new StringMatchRestriction(new int[] {110,111,110,45,97,115,115,111,99}), new StringMatchRestriction(new int[] {116,114,117,101}), new StringMatchRestriction(new int[] {102,97,108,115,101}), new StringMatchRestriction(new int[] {105,110}), new StringMatchRestriction(new int[] {109,111,100,117,108,101}), new StringMatchRestriction(new int[] {102,111,114}), new StringMatchRestriction(new int[] {108,111,99}), new StringMatchRestriction(new int[] {115,111,108,118,101}), new StringMatchRestriction(new int[] {118,105,115,105,116}), new StringMatchRestriction(new int[] {108,97,121,111,117,116}), new StringMatchRestriction(new int[] {115,116,114})}); builder.addAlternative(RascalParser.cHJvZChsZXgoIk5vbnRlcm1pbmFsIiksW2NvbmRpdGlvbmFsKHNlcShbY29uZGl0aW9uYWwoXGNoYXItY2xhc3MoW3JhbmdlKDY1LDkwKV0pLHtcbm90LXByZWNlZGUoXGNoYXItY2xhc3MoW3JhbmdlKDY1LDkwKV0pKX0pLGNvbmRpdGlvbmFsKFxpdGVyLXN0YXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KSxyYW5nZSg2NSw5MCkscmFuZ2UoOTUsOTUpLHJhbmdlKDk3LDEyMildKSkse1xub3QtZm9sbG93KFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NykscmFuZ2UoNjUsOTApLHJhbmdlKDk1LDk1KSxyYW5nZSg5NywxMjIpXSkpfSldKSx7ZGVsZXRlKGtleXdvcmRzKCJSYXNjYWxLZXl3b3JkcyIpKX0pXSx7fSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIk5vbnRlcm1pbmFsIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIk5vbnRlcm1pbmFsXCIpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihsZXgoIk5vbnRlcm1pbmFsIikpKX0p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[4] = new CharStackNode(11956, 4, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(11953, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[0] = new CharStackNode(11951, 0, new int[][]{{0,0}}, null, null); - tmp[3] = new ListStackNode(11955, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(11954, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[1] = new LiteralStackNode(11952, 1, cHJvZChsaXQoInNvcnQoXCJOb250ZXJtaW5hbFwiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg3OCw3OCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,78,111,110,116,101,114,109,105,110,97,108,34,41}, null, null); + tmp[4] = new CharStackNode(11893, 4, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(11890, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[0] = new CharStackNode(11888, 0, new int[][]{{0,0}}, null, null); + tmp[3] = new ListStackNode(11892, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(11891, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[1] = new LiteralStackNode(11889, 1, cHJvZChsaXQoInNvcnQoXCJOb250ZXJtaW5hbFwiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg3OCw3OCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,78,111,110,116,101,114,109,105,110,97,108,34,41}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIk5vbnRlcm1pbmFsIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIk5vbnRlcm1pbmFsXCIpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihsZXgoIk5vbnRlcm1pbmFsIikpKX0p, tmp); } public static void init(ExpectBuilder builder){ @@ -12413,19 +12398,19 @@ protected static class PreStringChars { protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIlByZVN0cmluZ0NoYXJzIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIlByZVN0cmluZ0NoYXJzXCIpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihsZXgoIlByZVN0cmluZ0NoYXJzIikpKX0p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[1] = new LiteralStackNode(11988, 1, cHJvZChsaXQoInNvcnQoXCJQcmVTdHJpbmdDaGFyc1wiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4MCw4MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODMsODMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMywxMDMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDY3LDY3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDQsMTA0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {115,111,114,116,40,34,80,114,101,83,116,114,105,110,103,67,104,97,114,115,34,41}, null, null); - tmp[3] = new ListStackNode(11991, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(11990, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[0] = new CharStackNode(11987, 0, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(11989, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[4] = new CharStackNode(11992, 4, new int[][]{{0,0}}, null, null); + tmp[1] = new LiteralStackNode(11925, 1, cHJvZChsaXQoInNvcnQoXCJQcmVTdHJpbmdDaGFyc1wiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4MCw4MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODMsODMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMywxMDMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDY3LDY3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDQsMTA0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {115,111,114,116,40,34,80,114,101,83,116,114,105,110,103,67,104,97,114,115,34,41}, null, null); + tmp[3] = new ListStackNode(11928, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(11927, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[0] = new CharStackNode(11924, 0, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(11926, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[4] = new CharStackNode(11929, 4, new int[][]{{0,0}}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIlByZVN0cmluZ0NoYXJzIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIlByZVN0cmluZ0NoYXJzXCIpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihsZXgoIlByZVN0cmluZ0NoYXJzIikpKX0p, tmp); } protected static final void _init_cHJvZChsZXgoIlByZVN0cmluZ0NoYXJzIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcaXRlci1zdGFyKGxleCgiU3RyaW5nQ2hhcmFjdGVyIikpLFxjaGFyLWNsYXNzKFtyYW5nZSg2MCw2MCldKV0se3RhZygiY2F0ZWdvcnkiKCJzdHJpbmciKSl9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[3]; - tmp[2] = new CharStackNode(11998, 2, new int[][]{{60,60}}, null, null); - tmp[0] = new CharStackNode(11995, 0, new int[][]{{34,34}}, null, null); - tmp[1] = new ListStackNode(11997, 1, cmVndWxhcihcaXRlci1zdGFyKGxleCgiU3RyaW5nQ2hhcmFjdGVyIikpKQ0000, new NonTerminalStackNode(11996, 0, "StringCharacter", null, null), false, null, null); + tmp[2] = new CharStackNode(11935, 2, new int[][]{{60,60}}, null, null); + tmp[0] = new CharStackNode(11932, 0, new int[][]{{34,34}}, null, null); + tmp[1] = new ListStackNode(11934, 1, cmVndWxhcihcaXRlci1zdGFyKGxleCgiU3RyaW5nQ2hhcmFjdGVyIikpKQ0000, new NonTerminalStackNode(11933, 0, "StringCharacter", null, null), false, null, null); builder.addAlternative(RascalParser.cHJvZChsZXgoIlByZVN0cmluZ0NoYXJzIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcaXRlci1zdGFyKGxleCgiU3RyaW5nQ2hhcmFjdGVyIikpLFxjaGFyLWNsYXNzKFtyYW5nZSg2MCw2MCldKV0se3RhZygiY2F0ZWdvcnkiKCJzdHJpbmciKSl9KQ0000, tmp); } public static void init(ExpectBuilder builder){ @@ -12448,37 +12433,37 @@ protected static class StringTail { protected static final void _init_cHJvZChsYWJlbCgicG9zdCIsc29ydCgiU3RyaW5nVGFpbCIpKSxbbGFiZWwoInBvc3QiLGxleCgiUG9zdFN0cmluZ0NoYXJzIikpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new NonTerminalStackNode(12038, 0, "PostStringChars", null, null); + tmp[0] = new NonTerminalStackNode(11975, 0, "PostStringChars", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgicG9zdCIsc29ydCgiU3RyaW5nVGFpbCIpKSxbbGFiZWwoInBvc3QiLGxleCgiUG9zdFN0cmluZ0NoYXJzIikpXSx7fSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJTdHJpbmdUYWlsIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIlN0cmluZ1RhaWxcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKHNvcnQoIlN0cmluZ1RhaWwiKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[1] = new LiteralStackNode(12043, 1, cHJvZChsaXQoInNvcnQoXCJTdHJpbmdUYWlsXCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDgzLDgzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDMsMTAzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4NCw4NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,83,116,114,105,110,103,84,97,105,108,34,41}, null, null); - tmp[0] = new CharStackNode(12042, 0, new int[][]{{0,0}}, null, null); - tmp[4] = new CharStackNode(12047, 4, new int[][]{{0,0}}, null, null); - tmp[3] = new ListStackNode(12046, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(12045, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[2] = new LiteralStackNode(12044, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[1] = new LiteralStackNode(11980, 1, cHJvZChsaXQoInNvcnQoXCJTdHJpbmdUYWlsXCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDgzLDgzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDMsMTAzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4NCw4NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,83,116,114,105,110,103,84,97,105,108,34,41}, null, null); + tmp[0] = new CharStackNode(11979, 0, new int[][]{{0,0}}, null, null); + tmp[4] = new CharStackNode(11984, 4, new int[][]{{0,0}}, null, null); + tmp[3] = new ListStackNode(11983, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(11982, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[2] = new LiteralStackNode(11981, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJTdHJpbmdUYWlsIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIlN0cmluZ1RhaWxcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKHNvcnQoIlN0cmluZ1RhaWwiKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgibWlkSW50ZXJwb2xhdGVkIixzb3J0KCJTdHJpbmdUYWlsIikpLFtsYWJlbCgibWlkIixsZXgoIk1pZFN0cmluZ0NoYXJzIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgiZXhwcmVzc2lvbiIsc29ydCgiRXhwcmVzc2lvbiIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInRhaWwiLHNvcnQoIlN0cmluZ1RhaWwiKSldLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[0] = new NonTerminalStackNode(12051, 0, "MidStringChars", null, null); - tmp[2] = new NonTerminalStackNode(12054, 2, "Expression", null, null); - tmp[4] = new NonTerminalStackNode(12057, 4, "StringTail", null, null); - tmp[1] = new NonTerminalStackNode(12053, 1, "layouts_LAYOUTLIST", null, null); - tmp[3] = new NonTerminalStackNode(12056, 3, "layouts_LAYOUTLIST", null, null); + tmp[0] = new NonTerminalStackNode(11988, 0, "MidStringChars", null, null); + tmp[2] = new NonTerminalStackNode(11991, 2, "Expression", null, null); + tmp[4] = new NonTerminalStackNode(11994, 4, "StringTail", null, null); + tmp[1] = new NonTerminalStackNode(11990, 1, "layouts_LAYOUTLIST", null, null); + tmp[3] = new NonTerminalStackNode(11993, 3, "layouts_LAYOUTLIST", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgibWlkSW50ZXJwb2xhdGVkIixzb3J0KCJTdHJpbmdUYWlsIikpLFtsYWJlbCgibWlkIixsZXgoIk1pZFN0cmluZ0NoYXJzIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgiZXhwcmVzc2lvbiIsc29ydCgiRXhwcmVzc2lvbiIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInRhaWwiLHNvcnQoIlN0cmluZ1RhaWwiKSldLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgibWlkVGVtcGxhdGUiLHNvcnQoIlN0cmluZ1RhaWwiKSksW2xhYmVsKCJtaWQiLGxleCgiTWlkU3RyaW5nQ2hhcnMiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJ0ZW1wbGF0ZSIsc29ydCgiU3RyaW5nVGVtcGxhdGUiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJ0YWlsIixzb3J0KCJTdHJpbmdUYWlsIikpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[0] = new NonTerminalStackNode(12061, 0, "MidStringChars", null, null); - tmp[2] = new NonTerminalStackNode(12064, 2, "StringTemplate", null, null); - tmp[4] = new NonTerminalStackNode(12067, 4, "StringTail", null, null); - tmp[1] = new NonTerminalStackNode(12063, 1, "layouts_LAYOUTLIST", null, null); - tmp[3] = new NonTerminalStackNode(12066, 3, "layouts_LAYOUTLIST", null, null); + tmp[0] = new NonTerminalStackNode(11998, 0, "MidStringChars", null, null); + tmp[2] = new NonTerminalStackNode(12001, 2, "StringTemplate", null, null); + tmp[4] = new NonTerminalStackNode(12004, 4, "StringTail", null, null); + tmp[1] = new NonTerminalStackNode(12000, 1, "layouts_LAYOUTLIST", null, null); + tmp[3] = new NonTerminalStackNode(12003, 3, "layouts_LAYOUTLIST", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgibWlkVGVtcGxhdGUiLHNvcnQoIlN0cmluZ1RhaWwiKSksW2xhYmVsKCJtaWQiLGxleCgiTWlkU3RyaW5nQ2hhcnMiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJ0ZW1wbGF0ZSIsc29ydCgiU3RyaW5nVGVtcGxhdGUiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJ0YWlsIixzb3J0KCJTdHJpbmdUYWlsIikpXSx7fSk00, tmp); } public static void init(ExpectBuilder builder){ @@ -12505,58 +12490,58 @@ protected static class RegExp { protected static final void _init_cHJvZChsZXgoIlJlZ0V4cCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMSw0NikscmFuZ2UoNDgsNTkpLHJhbmdlKDYxLDYxKSxyYW5nZSg2Myw5MSkscmFuZ2UoOTMsMTExNDExMSldKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new CharStackNode(12104, 0, new int[][]{{1,46},{48,59},{61,61},{63,91},{93,1114111}}, null, null); + tmp[0] = new CharStackNode(12041, 0, new int[][]{{1,46},{48,59},{61,61},{63,91},{93,1114111}}, null, null); builder.addAlternative(RascalParser.cHJvZChsZXgoIlJlZ0V4cCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMSw0NikscmFuZ2UoNDgsNTkpLHJhbmdlKDYxLDYxKSxyYW5nZSg2Myw5MSkscmFuZ2UoOTMsMTExNDExMSldKV0se30p, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIlJlZ0V4cCIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoIlxcaXRlci1zdGFyKHNvcnQoXCJSZWdFeHBcIikpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihcaXRlci1zdGFyKGxleCgiUmVnRXhwIikpKSl9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[3] = new ListStackNode(12111, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(12110, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[1] = new LiteralStackNode(12108, 1, cHJvZChsaXQoIlxcaXRlci1zdGFyKHNvcnQoXCJSZWdFeHBcIikpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg5Miw5MildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDUsNDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4Miw4MildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAzLDEwMyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNjksNjkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEyMCwxMjApXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {92,105,116,101,114,45,115,116,97,114,40,115,111,114,116,40,34,82,101,103,69,120,112,34,41,41}, null, null); - tmp[0] = new CharStackNode(12107, 0, new int[][]{{0,0}}, null, null); - tmp[4] = new CharStackNode(12112, 4, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(12109, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[3] = new ListStackNode(12048, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(12047, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[1] = new LiteralStackNode(12045, 1, cHJvZChsaXQoIlxcaXRlci1zdGFyKHNvcnQoXCJSZWdFeHBcIikpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg5Miw5MildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDUsNDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4Miw4MildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAzLDEwMyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNjksNjkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEyMCwxMjApXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {92,105,116,101,114,45,115,116,97,114,40,115,111,114,116,40,34,82,101,103,69,120,112,34,41,41}, null, null); + tmp[0] = new CharStackNode(12044, 0, new int[][]{{0,0}}, null, null); + tmp[4] = new CharStackNode(12049, 4, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(12046, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIlJlZ0V4cCIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoIlxcaXRlci1zdGFyKHNvcnQoXCJSZWdFeHBcIikpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihcaXRlci1zdGFyKGxleCgiUmVnRXhwIikpKSl9KQ0000, tmp); } protected static final void _init_cHJvZChsZXgoIlJlZ0V4cCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoOTIsOTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ3LDQ3KSxyYW5nZSg2MCw2MCkscmFuZ2UoNjIsNjIpLHJhbmdlKDkyLDkyKV0pXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[2]; - tmp[0] = new CharStackNode(12116, 0, new int[][]{{92,92}}, null, null); - tmp[1] = new CharStackNode(12117, 1, new int[][]{{47,47},{60,60},{62,62},{92,92}}, null, null); + tmp[0] = new CharStackNode(12053, 0, new int[][]{{92,92}}, null, null); + tmp[1] = new CharStackNode(12054, 1, new int[][]{{47,47},{60,60},{62,62},{92,92}}, null, null); builder.addAlternative(RascalParser.cHJvZChsZXgoIlJlZ0V4cCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoOTIsOTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ3LDQ3KSxyYW5nZSg2MCw2MCkscmFuZ2UoNjIsNjIpLHJhbmdlKDkyLDkyKV0pXSx7fSk00, tmp); } protected static final void _init_cHJvZChsZXgoIlJlZ0V4cCIpLFtsaXQoIlw8IiksbGV4KCJOYW1lIiksbGl0KCJcPiIpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[3]; - tmp[2] = new LiteralStackNode(12121, 2, cHJvZChsaXQoIlw11IiksW1xjaGFyLWNsYXNzKFtyYW5nZSg2Miw2MildKV0se30p, new int[] {62}, null, null); - tmp[0] = new LiteralStackNode(12119, 0, cHJvZChsaXQoIlw8IiksW1xjaGFyLWNsYXNzKFtyYW5nZSg2MCw2MCldKV0se30p, new int[] {60}, null, null); - tmp[1] = new NonTerminalStackNode(12120, 1, "Name", null, null); + tmp[2] = new LiteralStackNode(12058, 2, cHJvZChsaXQoIlw11IiksW1xjaGFyLWNsYXNzKFtyYW5nZSg2Miw2MildKV0se30p, new int[] {62}, null, null); + tmp[0] = new LiteralStackNode(12056, 0, cHJvZChsaXQoIlw8IiksW1xjaGFyLWNsYXNzKFtyYW5nZSg2MCw2MCldKV0se30p, new int[] {60}, null, null); + tmp[1] = new NonTerminalStackNode(12057, 1, "Name", null, null); builder.addAlternative(RascalParser.cHJvZChsZXgoIlJlZ0V4cCIpLFtsaXQoIlw8IiksbGV4KCJOYW1lIiksbGl0KCJcPiIpXSx7fSk00, tmp); } protected static final void _init_cHJvZChsZXgoIlJlZ0V4cCIpLFtsaXQoIlw8IiksbGV4KCJOYW1lIiksbGl0KCI6IiksXGl0ZXItc3RhcihsZXgoIk5hbWVkUmVnRXhwIikpLGxpdCgiXD4iKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[0] = new LiteralStackNode(12123, 0, cHJvZChsaXQoIlw8IiksW1xjaGFyLWNsYXNzKFtyYW5nZSg2MCw2MCldKV0se30p, new int[] {60}, null, null); - tmp[2] = new LiteralStackNode(12125, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[4] = new LiteralStackNode(12128, 4, cHJvZChsaXQoIlw11IiksW1xjaGFyLWNsYXNzKFtyYW5nZSg2Miw2MildKV0se30p, new int[] {62}, null, null); - tmp[1] = new NonTerminalStackNode(12124, 1, "Name", null, null); - tmp[3] = new ListStackNode(12127, 3, cmVndWxhcihcaXRlci1zdGFyKGxleCgiTmFtZWRSZWdFeHAiKSkp, new NonTerminalStackNode(12126, 0, "NamedRegExp", null, null), false, null, null); + tmp[0] = new LiteralStackNode(12060, 0, cHJvZChsaXQoIlw8IiksW1xjaGFyLWNsYXNzKFtyYW5nZSg2MCw2MCldKV0se30p, new int[] {60}, null, null); + tmp[2] = new LiteralStackNode(12062, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[4] = new LiteralStackNode(12065, 4, cHJvZChsaXQoIlw11IiksW1xjaGFyLWNsYXNzKFtyYW5nZSg2Miw2MildKV0se30p, new int[] {62}, null, null); + tmp[1] = new NonTerminalStackNode(12061, 1, "Name", null, null); + tmp[3] = new ListStackNode(12064, 3, cmVndWxhcihcaXRlci1zdGFyKGxleCgiTmFtZWRSZWdFeHAiKSkp, new NonTerminalStackNode(12063, 0, "NamedRegExp", null, null), false, null, null); builder.addAlternative(RascalParser.cHJvZChsZXgoIlJlZ0V4cCIpLFtsaXQoIlw8IiksbGV4KCJOYW1lIiksbGl0KCI6IiksXGl0ZXItc3RhcihsZXgoIk5hbWVkUmVnRXhwIikpLGxpdCgiXD4iKV0se30p, tmp); } protected static final void _init_cHJvZChsZXgoIlJlZ0V4cCIpLFtsZXgoIkJhY2tzbGFzaCIpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new NonTerminalStackNode(12130, 0, "Backslash", null, null); + tmp[0] = new NonTerminalStackNode(12067, 0, "Backslash", null, null); builder.addAlternative(RascalParser.cHJvZChsZXgoIlJlZ0V4cCIpLFtsZXgoIkJhY2tzbGFzaCIpXSx7fSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIlJlZ0V4cCIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJSZWdFeHBcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKGxleCgiUmVnRXhwIikpKX0p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[1] = new LiteralStackNode(12134, 1, cHJvZChsaXQoInNvcnQoXCJSZWdFeHBcIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODIsODIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMywxMDMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDY5LDY5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMjAsMTIwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTIsMTEyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {115,111,114,116,40,34,82,101,103,69,120,112,34,41}, null, null); - tmp[3] = new ListStackNode(12137, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(12136, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[2] = new LiteralStackNode(12135, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[4] = new CharStackNode(12138, 4, new int[][]{{0,0}}, null, null); - tmp[0] = new CharStackNode(12133, 0, new int[][]{{0,0}}, null, null); + tmp[1] = new LiteralStackNode(12071, 1, cHJvZChsaXQoInNvcnQoXCJSZWdFeHBcIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODIsODIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMywxMDMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDY5LDY5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMjAsMTIwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTIsMTEyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {115,111,114,116,40,34,82,101,103,69,120,112,34,41}, null, null); + tmp[3] = new ListStackNode(12074, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(12073, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[2] = new LiteralStackNode(12072, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[4] = new CharStackNode(12075, 4, new int[][]{{0,0}}, null, null); + tmp[0] = new CharStackNode(12070, 0, new int[][]{{0,0}}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIlJlZ0V4cCIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJSZWdFeHBcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKGxleCgiUmVnRXhwIikpKX0p, tmp); } public static void init(ExpectBuilder builder){ @@ -12589,21 +12574,21 @@ protected static class DataTypeSelector { protected static final void _init_cHJvZChsYWJlbCgic2VsZWN0b3IiLHNvcnQoIkRhdGFUeXBlU2VsZWN0b3IiKSksW2xhYmVsKCJzb3J0Iixzb3J0KCJRdWFsaWZpZWROYW1lIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIi4iKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInByb2R1Y3Rpb24iLGxleCgiTmFtZSIpKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[1] = new NonTerminalStackNode(12406, 1, "layouts_LAYOUTLIST", null, null); - tmp[0] = new NonTerminalStackNode(12404, 0, "QualifiedName", null, null); - tmp[2] = new LiteralStackNode(12407, 2, cHJvZChsaXQoIi4iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ2LDQ2KV0pXSx7fSk00, new int[] {46}, null, null); - tmp[3] = new NonTerminalStackNode(12408, 3, "layouts_LAYOUTLIST", null, null); - tmp[4] = new NonTerminalStackNode(12409, 4, "Name", null, null); + tmp[1] = new NonTerminalStackNode(12343, 1, "layouts_LAYOUTLIST", null, null); + tmp[0] = new NonTerminalStackNode(12341, 0, "QualifiedName", null, null); + tmp[2] = new LiteralStackNode(12344, 2, cHJvZChsaXQoIi4iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ2LDQ2KV0pXSx7fSk00, new int[] {46}, null, null); + tmp[3] = new NonTerminalStackNode(12345, 3, "layouts_LAYOUTLIST", null, null); + tmp[4] = new NonTerminalStackNode(12346, 4, "Name", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgic2VsZWN0b3IiLHNvcnQoIkRhdGFUeXBlU2VsZWN0b3IiKSksW2xhYmVsKCJzb3J0Iixzb3J0KCJRdWFsaWZpZWROYW1lIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIi4iKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInByb2R1Y3Rpb24iLGxleCgiTmFtZSIpKV0se30p, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJEYXRhVHlwZVNlbGVjdG9yIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIkRhdGFUeXBlU2VsZWN0b3JcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKHNvcnQoIkRhdGFUeXBlU2VsZWN0b3IiKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[0] = new CharStackNode(12413, 0, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(12415, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[1] = new LiteralStackNode(12414, 1, cHJvZChsaXQoInNvcnQoXCJEYXRhVHlwZVNlbGVjdG9yXCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDY4LDY4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDg0LDg0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMjEsMTIxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTIsMTEyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4Myw4MyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTksOTkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,68,97,116,97,84,121,112,101,83,101,108,101,99,116,111,114,34,41}, null, null); - tmp[4] = new CharStackNode(12418, 4, new int[][]{{0,0}}, null, null); - tmp[3] = new ListStackNode(12417, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(12416, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[0] = new CharStackNode(12350, 0, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(12352, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[1] = new LiteralStackNode(12351, 1, cHJvZChsaXQoInNvcnQoXCJEYXRhVHlwZVNlbGVjdG9yXCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDY4LDY4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDg0LDg0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMjEsMTIxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTIsMTEyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4Myw4MyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTksOTkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,68,97,116,97,84,121,112,101,83,101,108,101,99,116,111,114,34,41}, null, null); + tmp[4] = new CharStackNode(12355, 4, new int[][]{{0,0}}, null, null); + tmp[3] = new ListStackNode(12354, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(12353, 0, new int[][]{{48,57}}, null, null), true, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJEYXRhVHlwZVNlbGVjdG9yIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIkRhdGFUeXBlU2VsZWN0b3JcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKHNvcnQoIkRhdGFUeXBlU2VsZWN0b3IiKSkpfSk00, tmp); } public static void init(ExpectBuilder builder){ @@ -12626,19 +12611,19 @@ protected static class TagString { protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIlRhZ1N0cmluZyIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJUYWdTdHJpbmdcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKGxleCgiVGFnU3RyaW5nIikpKX0p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[1] = new LiteralStackNode(12430, 1, cHJvZChsaXQoInNvcnQoXCJUYWdTdHJpbmdcIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODQsODQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDMsMTAzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4Myw4MyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAzLDEwMyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {115,111,114,116,40,34,84,97,103,83,116,114,105,110,103,34,41}, null, null); - tmp[3] = new ListStackNode(12433, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(12432, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[2] = new LiteralStackNode(12431, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[4] = new CharStackNode(12434, 4, new int[][]{{0,0}}, null, null); - tmp[0] = new CharStackNode(12429, 0, new int[][]{{0,0}}, null, null); + tmp[1] = new LiteralStackNode(12367, 1, cHJvZChsaXQoInNvcnQoXCJUYWdTdHJpbmdcIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODQsODQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDMsMTAzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4Myw4MyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAzLDEwMyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {115,111,114,116,40,34,84,97,103,83,116,114,105,110,103,34,41}, null, null); + tmp[3] = new ListStackNode(12370, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(12369, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[2] = new LiteralStackNode(12368, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[4] = new CharStackNode(12371, 4, new int[][]{{0,0}}, null, null); + tmp[0] = new CharStackNode(12366, 0, new int[][]{{0,0}}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIlRhZ1N0cmluZyIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJUYWdTdHJpbmdcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKGxleCgiVGFnU3RyaW5nIikpKX0p, tmp); } protected static final void _init_cHJvZChsZXgoIlRhZ1N0cmluZyIpLFtjb25kaXRpb25hbChsaXQoInsiKSx7XG5vdC1wcmVjZWRlKGxpdCgiXFwiKSl9KSxsYWJlbCgiY29udGVudHMiLFxpdGVyLXN0YXIoYWx0KHtzZXEoW2xpdCgiXFwiKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTIzLDEyMykscmFuZ2UoMTI1LDEyNSldKV0pLGxleCgiVGFnU3RyaW5nIiksXGNoYXItY2xhc3MoW3JhbmdlKDEsMTIyKSxyYW5nZSgxMjQsMTI0KSxyYW5nZSgxMjYsMTExNDExMSldKX0pKSksY29uZGl0aW9uYWwobGl0KCJ9Iikse1xub3QtcHJlY2VkZShsaXQoIlxcIikpfSldLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[3]; - tmp[1] = new ListStackNode(12446, 1, cmVndWxhcihcaXRlci1zdGFyKGFsdCh7c2VxKFtsaXQoIlxcIiksXGNoYXItY2xhc3MoW3JhbmdlKDEyMywxMjMpLHJhbmdlKDEyNSwxMjUpXSldKSxsZXgoIlRhZ1N0cmluZyIpLFxjaGFyLWNsYXNzKFtyYW5nZSgxLDEyMikscmFuZ2UoMTI0LDEyNCkscmFuZ2UoMTI2LDExMTQxMTEpXSl9KSkp, new AlternativeStackNode(12445, 0, cmVndWxhcihhbHQoe3NlcShbbGl0KCJcXCIpLFxjaGFyLWNsYXNzKFtyYW5nZSgxMjMsMTIzKSxyYW5nZSgxMjUsMTI1KV0pXSksbGV4KCJUYWdTdHJpbmciKSxcY2hhci1jbGFzcyhbcmFuZ2UoMSwxMjIpLHJhbmdlKDEyNCwxMjQpLHJhbmdlKDEyNiwxMTE0MTExKV0pfSkp, (AbstractStackNode[]) new AbstractStackNode[]{new SequenceStackNode(12442, 0, cmVndWxhcihzZXEoW2xpdCgiXFwiKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTIzLDEyMykscmFuZ2UoMTI1LDEyNSldKV0pKQ0000, (AbstractStackNode[]) new AbstractStackNode[]{new LiteralStackNode(12440, 0, cHJvZChsaXQoIlxcIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg5Miw5MildKV0se30p, new int[] {92}, null, null), new CharStackNode(12441, 1, new int[][]{{123,123},{125,125}}, null, null)}, null, null), new NonTerminalStackNode(12443, 0, "TagString", null, null), new CharStackNode(12444, 0, new int[][]{{1,122},{124,124},{126,1114111}}, null, null)}, null, null), false, null, null); - tmp[0] = new LiteralStackNode(12439, 0, cHJvZChsaXQoInsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyMywxMjMpXSldLHt9KQ0000, new int[] {123}, new IEnterFilter[] {new StringPrecedeRestriction(new int[] {92})}, null); - tmp[2] = new LiteralStackNode(12450, 2, cHJvZChsaXQoIn0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyNSwxMjUpXSldLHt9KQ0000, new int[] {125}, new IEnterFilter[] {new StringPrecedeRestriction(new int[] {92})}, null); + tmp[1] = new ListStackNode(12383, 1, cmVndWxhcihcaXRlci1zdGFyKGFsdCh7c2VxKFtsaXQoIlxcIiksXGNoYXItY2xhc3MoW3JhbmdlKDEyMywxMjMpLHJhbmdlKDEyNSwxMjUpXSldKSxsZXgoIlRhZ1N0cmluZyIpLFxjaGFyLWNsYXNzKFtyYW5nZSgxLDEyMikscmFuZ2UoMTI0LDEyNCkscmFuZ2UoMTI2LDExMTQxMTEpXSl9KSkp, new AlternativeStackNode(12382, 0, cmVndWxhcihhbHQoe3NlcShbbGl0KCJcXCIpLFxjaGFyLWNsYXNzKFtyYW5nZSgxMjMsMTIzKSxyYW5nZSgxMjUsMTI1KV0pXSksbGV4KCJUYWdTdHJpbmciKSxcY2hhci1jbGFzcyhbcmFuZ2UoMSwxMjIpLHJhbmdlKDEyNCwxMjQpLHJhbmdlKDEyNiwxMTE0MTExKV0pfSkp, (AbstractStackNode[]) new AbstractStackNode[]{new SequenceStackNode(12379, 0, cmVndWxhcihzZXEoW2xpdCgiXFwiKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTIzLDEyMykscmFuZ2UoMTI1LDEyNSldKV0pKQ0000, (AbstractStackNode[]) new AbstractStackNode[]{new LiteralStackNode(12377, 0, cHJvZChsaXQoIlxcIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg5Miw5MildKV0se30p, new int[] {92}, null, null), new CharStackNode(12378, 1, new int[][]{{123,123},{125,125}}, null, null)}, null, null), new NonTerminalStackNode(12380, 0, "TagString", null, null), new CharStackNode(12381, 0, new int[][]{{1,122},{124,124},{126,1114111}}, null, null)}, null, null), false, null, null); + tmp[0] = new LiteralStackNode(12376, 0, cHJvZChsaXQoInsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyMywxMjMpXSldLHt9KQ0000, new int[] {123}, new IEnterFilter[] {new StringPrecedeRestriction(new int[] {92})}, null); + tmp[2] = new LiteralStackNode(12387, 2, cHJvZChsaXQoIn0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyNSwxMjUpXSldLHt9KQ0000, new int[] {125}, new IEnterFilter[] {new StringPrecedeRestriction(new int[] {92})}, null); builder.addAlternative(RascalParser.cHJvZChsZXgoIlRhZ1N0cmluZyIpLFtjb25kaXRpb25hbChsaXQoInsiKSx7XG5vdC1wcmVjZWRlKGxpdCgiXFwiKSl9KSxsYWJlbCgiY29udGVudHMiLFxpdGVyLXN0YXIoYWx0KHtzZXEoW2xpdCgiXFwiKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTIzLDEyMykscmFuZ2UoMTI1LDEyNSldKV0pLGxleCgiVGFnU3RyaW5nIiksXGNoYXItY2xhc3MoW3JhbmdlKDEsMTIyKSxyYW5nZSgxMjQsMTI0KSxyYW5nZSgxMjYsMTExNDExMSldKX0pKSksY29uZGl0aW9uYWwobGl0KCJ9Iikse1xub3QtcHJlY2VkZShsaXQoIlxcIikpfSldLHt9KQ0000, tmp); } public static void init(ExpectBuilder builder){ @@ -12661,18 +12646,18 @@ protected static class NonterminalLabel { protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIk5vbnRlcm1pbmFsTGFiZWwiKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJzb3J0KFwiTm9udGVybWluYWxMYWJlbFwiKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIobGV4KCJOb250ZXJtaW5hbExhYmVsIikpKX0p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[3] = new ListStackNode(12458, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(12457, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[4] = new CharStackNode(12459, 4, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(12456, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[1] = new LiteralStackNode(12455, 1, cHJvZChsaXQoInNvcnQoXCJOb250ZXJtaW5hbExhYmVsXCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDc4LDc4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDksMTA5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNzYsNzYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5OCw5OCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {115,111,114,116,40,34,78,111,110,116,101,114,109,105,110,97,108,76,97,98,101,108,34,41}, null, null); - tmp[0] = new CharStackNode(12454, 0, new int[][]{{0,0}}, null, null); + tmp[3] = new ListStackNode(12395, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(12394, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[4] = new CharStackNode(12396, 4, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(12393, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[1] = new LiteralStackNode(12392, 1, cHJvZChsaXQoInNvcnQoXCJOb250ZXJtaW5hbExhYmVsXCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDc4LDc4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDksMTA5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNzYsNzYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5OCw5OCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {115,111,114,116,40,34,78,111,110,116,101,114,109,105,110,97,108,76,97,98,101,108,34,41}, null, null); + tmp[0] = new CharStackNode(12391, 0, new int[][]{{0,0}}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIk5vbnRlcm1pbmFsTGFiZWwiKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJzb3J0KFwiTm9udGVybWluYWxMYWJlbFwiKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIobGV4KCJOb250ZXJtaW5hbExhYmVsIikpKX0p, tmp); } protected static final void _init_cHJvZChsZXgoIk5vbnRlcm1pbmFsTGFiZWwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDk3LDEyMildKSxjb25kaXRpb25hbChcaXRlci1zdGFyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NykscmFuZ2UoNjUsOTApLHJhbmdlKDk1LDk1KSxyYW5nZSg5NywxMjIpXSkpLHtcbm90LWZvbGxvdyhcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpLHJhbmdlKDY1LDkwKSxyYW5nZSg5NSw5NSkscmFuZ2UoOTcsMTIyKV0pKX0pXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[2]; - tmp[1] = new ListStackNode(12466, 1, cmVndWxhcihcaXRlci1zdGFyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NykscmFuZ2UoNjUsOTApLHJhbmdlKDk1LDk1KSxyYW5nZSg5NywxMjIpXSkpKQ0000, new CharStackNode(12463, 0, new int[][]{{48,57},{65,90},{95,95},{97,122}}, null, null), false, null, new ICompletionFilter[] {new CharFollowRestriction(new int[][]{{48,57},{65,90},{95,95},{97,122}})}); - tmp[0] = new CharStackNode(12462, 0, new int[][]{{97,122}}, null, null); + tmp[1] = new ListStackNode(12403, 1, cmVndWxhcihcaXRlci1zdGFyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NykscmFuZ2UoNjUsOTApLHJhbmdlKDk1LDk1KSxyYW5nZSg5NywxMjIpXSkpKQ0000, new CharStackNode(12400, 0, new int[][]{{48,57},{65,90},{95,95},{97,122}}, null, null), false, null, new ICompletionFilter[] {new CharFollowRestriction(new int[][]{{48,57},{65,90},{95,95},{97,122}})}); + tmp[0] = new CharStackNode(12399, 0, new int[][]{{97,122}}, null, null); builder.addAlternative(RascalParser.cHJvZChsZXgoIk5vbnRlcm1pbmFsTGFiZWwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDk3LDEyMildKSxjb25kaXRpb25hbChcaXRlci1zdGFyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NykscmFuZ2UoNjUsOTApLHJhbmdlKDk1LDk1KSxyYW5nZSg5NywxMjIpXSkpLHtcbm90LWZvbGxvdyhcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpLHJhbmdlKDY1LDkwKSxyYW5nZSg5NSw5NSkscmFuZ2UoOTcsMTIyKV0pKX0pXSx7fSk00, tmp); } public static void init(ExpectBuilder builder){ @@ -12695,35 +12680,35 @@ protected static class Name { protected static final void _init_cHJvZChsZXgoIk5hbWUiKSxbY29uZGl0aW9uYWwoc2VxKFtjb25kaXRpb25hbChcY2hhci1jbGFzcyhbcmFuZ2UoNjUsOTApLHJhbmdlKDk1LDk1KSxyYW5nZSg5NywxMjIpXSkse1xub3QtcHJlY2VkZShcY2hhci1jbGFzcyhbcmFuZ2UoNjUsOTApLHJhbmdlKDk1LDk1KSxyYW5nZSg5NywxMjIpXSkpfSksY29uZGl0aW9uYWwoXGl0ZXItc3RhcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpLHJhbmdlKDY1LDkwKSxyYW5nZSg5NSw5NSkscmFuZ2UoOTcsMTIyKV0pKSx7XG5vdC1mb2xsb3coXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KSxyYW5nZSg2NSw5MCkscmFuZ2UoOTUsOTUpLHJhbmdlKDk3LDEyMildKSl9KV0pLHtkZWxldGUoa2V5d29yZHMoIlJhc2NhbEtleXdvcmRzIikpfSldLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new SequenceStackNode(12546, 0, cmVndWxhcihzZXEoW2NvbmRpdGlvbmFsKFxjaGFyLWNsYXNzKFtyYW5nZSg2NSw5MCkscmFuZ2UoOTUsOTUpLHJhbmdlKDk3LDEyMildKSx7XG5vdC1wcmVjZWRlKFxjaGFyLWNsYXNzKFtyYW5nZSg2NSw5MCkscmFuZ2UoOTUsOTUpLHJhbmdlKDk3LDEyMildKSl9KSxjb25kaXRpb25hbChcaXRlci1zdGFyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NykscmFuZ2UoNjUsOTApLHJhbmdlKDk1LDk1KSxyYW5nZSg5NywxMjIpXSkpLHtcbm90LWZvbGxvdyhcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpLHJhbmdlKDY1LDkwKSxyYW5nZSg5NSw5NSkscmFuZ2UoOTcsMTIyKV0pKX0pXSkp, (AbstractStackNode[]) new AbstractStackNode[]{new CharStackNode(12539, 0, new int[][]{{65,90},{95,95},{97,122}}, new IEnterFilter[] {new CharPrecedeRestriction(new int[][]{{65,90},{95,95},{97,122}})}, null), new ListStackNode(12543, 1, cmVndWxhcihcaXRlci1zdGFyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NykscmFuZ2UoNjUsOTApLHJhbmdlKDk1LDk1KSxyYW5nZSg5NywxMjIpXSkpKQ0000, new CharStackNode(12540, 0, new int[][]{{48,57},{65,90},{95,95},{97,122}}, null, null), false, null, new ICompletionFilter[] {new CharFollowRestriction(new int[][]{{48,57},{65,90},{95,95},{97,122}})})}, null, new ICompletionFilter[] {new StringMatchRestriction(new int[] {108,114,101,108}), new StringMatchRestriction(new int[] {112,114,105,118,97,116,101}), new StringMatchRestriction(new int[] {98,97,103}), new StringMatchRestriction(new int[] {100,101,102,97,117,108,116}), new StringMatchRestriction(new int[] {108,97,121,111,117,116}), new StringMatchRestriction(new int[] {97,115,115,111,99}), new StringMatchRestriction(new int[] {105,102}), new StringMatchRestriction(new int[] {108,111,99}), new StringMatchRestriction(new int[] {98,114,97,99,107,101,116}), new StringMatchRestriction(new int[] {110,111,116,105,110}), new StringMatchRestriction(new int[] {102,97,105,108}), new StringMatchRestriction(new int[] {116,114,117,101}), new StringMatchRestriction(new int[] {105,109,112,111,114,116}), new StringMatchRestriction(new int[] {110,117,109}), new StringMatchRestriction(new int[] {108,101,120,105,99,97,108}), new StringMatchRestriction(new int[] {109,111,100}), new StringMatchRestriction(new int[] {106,111,105,110}), new StringMatchRestriction(new int[] {116,117,112,108,101}), new StringMatchRestriction(new int[] {97,110,110,111}), new StringMatchRestriction(new int[] {98,111,111,108}), new StringMatchRestriction(new int[] {116,104,114,111,119}), new StringMatchRestriction(new int[] {115,116,97,114,116}), new StringMatchRestriction(new int[] {112,117,98,108,105,99}), new StringMatchRestriction(new int[] {118,105,115,105,116}), new StringMatchRestriction(new int[] {109,111,100,117,108,101}), new StringMatchRestriction(new int[] {114,101,97,108}), new StringMatchRestriction(new int[] {111}), new StringMatchRestriction(new int[] {97,108,105,97,115}), new StringMatchRestriction(new int[] {110,111,110,45,97,115,115,111,99}), new StringMatchRestriction(new int[] {100,97,116,101,116,105,109,101}), new StringMatchRestriction(new int[] {105,110,115,101,114,116}), new StringMatchRestriction(new int[] {109,97,112}), new StringMatchRestriction(new int[] {116,104,114,111,119,115}), new StringMatchRestriction(new int[] {118,111,105,100}), new StringMatchRestriction(new int[] {102,111,114}), new StringMatchRestriction(new int[] {114,101,108}), new StringMatchRestriction(new int[] {115,116,114}), new StringMatchRestriction(new int[] {115,101,116}), new StringMatchRestriction(new int[] {105,116}), new StringMatchRestriction(new int[] {99,97,115,101}), new StringMatchRestriction(new int[] {101,120,116,101,110,100}), new StringMatchRestriction(new int[] {102,97,108,115,101}), new StringMatchRestriction(new int[] {110,111,100,101}), new StringMatchRestriction(new int[] {101,108,115,101}), new StringMatchRestriction(new int[] {116,114,121}), new StringMatchRestriction(new int[] {118,97,108,117,101}), new StringMatchRestriction(new int[] {99,97,116,99,104}), new StringMatchRestriction(new int[] {115,111,108,118,101}), new StringMatchRestriction(new int[] {119,104,105,108,101}), new StringMatchRestriction(new int[] {102,105,110,97,108,108,121}), new StringMatchRestriction(new int[] {107,101,121,119,111,114,100}), new StringMatchRestriction(new int[] {115,121,110,116,97,120}), new StringMatchRestriction(new int[] {97,110,121}), new StringMatchRestriction(new int[] {97,115,115,101,114,116}), new StringMatchRestriction(new int[] {116,97,103}), new StringMatchRestriction(new int[] {114,97,116}), new StringMatchRestriction(new int[] {108,105,115,116}), new StringMatchRestriction(new int[] {99,111,110,116,105,110,117,101}), new StringMatchRestriction(new int[] {102,105,108,116,101,114}), new StringMatchRestriction(new int[] {116,121,112,101}), new StringMatchRestriction(new int[] {97,108,108}), new StringMatchRestriction(new int[] {111,110,101}), new StringMatchRestriction(new int[] {116,101,115,116}), new StringMatchRestriction(new int[] {105,110}), new StringMatchRestriction(new int[] {100,121,110,97,109,105,99}), new StringMatchRestriction(new int[] {105,110,116}), new StringMatchRestriction(new int[] {114,101,116,117,114,110}), new StringMatchRestriction(new int[] {100,97,116,97}), new StringMatchRestriction(new int[] {97,112,112,101,110,100}), new StringMatchRestriction(new int[] {115,119,105,116,99,104}), new StringMatchRestriction(new int[] {98,114,101,97,107})}); + tmp[0] = new SequenceStackNode(12483, 0, cmVndWxhcihzZXEoW2NvbmRpdGlvbmFsKFxjaGFyLWNsYXNzKFtyYW5nZSg2NSw5MCkscmFuZ2UoOTUsOTUpLHJhbmdlKDk3LDEyMildKSx7XG5vdC1wcmVjZWRlKFxjaGFyLWNsYXNzKFtyYW5nZSg2NSw5MCkscmFuZ2UoOTUsOTUpLHJhbmdlKDk3LDEyMildKSl9KSxjb25kaXRpb25hbChcaXRlci1zdGFyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NykscmFuZ2UoNjUsOTApLHJhbmdlKDk1LDk1KSxyYW5nZSg5NywxMjIpXSkpLHtcbm90LWZvbGxvdyhcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpLHJhbmdlKDY1LDkwKSxyYW5nZSg5NSw5NSkscmFuZ2UoOTcsMTIyKV0pKX0pXSkp, (AbstractStackNode[]) new AbstractStackNode[]{new CharStackNode(12476, 0, new int[][]{{65,90},{95,95},{97,122}}, new IEnterFilter[] {new CharPrecedeRestriction(new int[][]{{65,90},{95,95},{97,122}})}, null), new ListStackNode(12480, 1, cmVndWxhcihcaXRlci1zdGFyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NykscmFuZ2UoNjUsOTApLHJhbmdlKDk1LDk1KSxyYW5nZSg5NywxMjIpXSkpKQ0000, new CharStackNode(12477, 0, new int[][]{{48,57},{65,90},{95,95},{97,122}}, null, null), false, null, new ICompletionFilter[] {new CharFollowRestriction(new int[][]{{48,57},{65,90},{95,95},{97,122}})})}, null, new ICompletionFilter[] {new StringMatchRestriction(new int[] {116,104,114,111,119,115}), new StringMatchRestriction(new int[] {118,111,105,100}), new StringMatchRestriction(new int[] {112,117,98,108,105,99}), new StringMatchRestriction(new int[] {100,97,116,97}), new StringMatchRestriction(new int[] {102,105,110,97,108,108,121}), new StringMatchRestriction(new int[] {116,114,121}), new StringMatchRestriction(new int[] {115,116,97,114,116}), new StringMatchRestriction(new int[] {98,114,101,97,107}), new StringMatchRestriction(new int[] {105,109,112,111,114,116}), new StringMatchRestriction(new int[] {105,110,115,101,114,116}), new StringMatchRestriction(new int[] {116,121,112,101}), new StringMatchRestriction(new int[] {116,101,115,116}), new StringMatchRestriction(new int[] {109,97,112}), new StringMatchRestriction(new int[] {99,111,110,116,105,110,117,101}), new StringMatchRestriction(new int[] {102,97,105,108}), new StringMatchRestriction(new int[] {99,97,116,99,104}), new StringMatchRestriction(new int[] {115,121,110,116,97,120}), new StringMatchRestriction(new int[] {100,97,116,101,116,105,109,101}), new StringMatchRestriction(new int[] {111}), new StringMatchRestriction(new int[] {110,117,109}), new StringMatchRestriction(new int[] {114,97,116}), new StringMatchRestriction(new int[] {101,120,116,101,110,100}), new StringMatchRestriction(new int[] {107,101,121,119,111,114,100}), new StringMatchRestriction(new int[] {115,119,105,116,99,104}), new StringMatchRestriction(new int[] {97,110,121}), new StringMatchRestriction(new int[] {119,104,105,108,101}), new StringMatchRestriction(new int[] {108,105,115,116}), new StringMatchRestriction(new int[] {110,111,116,105,110}), new StringMatchRestriction(new int[] {108,114,101,108}), new StringMatchRestriction(new int[] {112,114,105,118,97,116,101}), new StringMatchRestriction(new int[] {114,101,108}), new StringMatchRestriction(new int[] {118,97,108,117,101}), new StringMatchRestriction(new int[] {102,105,108,116,101,114}), new StringMatchRestriction(new int[] {109,111,100}), new StringMatchRestriction(new int[] {97,115,115,111,99}), new StringMatchRestriction(new int[] {97,112,112,101,110,100}), new StringMatchRestriction(new int[] {110,111,100,101}), new StringMatchRestriction(new int[] {99,97,115,101}), new StringMatchRestriction(new int[] {115,101,116}), new StringMatchRestriction(new int[] {114,101,97,108}), new StringMatchRestriction(new int[] {106,111,105,110}), new StringMatchRestriction(new int[] {97,110,110,111}), new StringMatchRestriction(new int[] {114,101,116,117,114,110}), new StringMatchRestriction(new int[] {111,110,101}), new StringMatchRestriction(new int[] {116,104,114,111,119}), new StringMatchRestriction(new int[] {116,97,103}), new StringMatchRestriction(new int[] {98,97,103}), new StringMatchRestriction(new int[] {100,101,102,97,117,108,116}), new StringMatchRestriction(new int[] {108,101,120,105,99,97,108}), new StringMatchRestriction(new int[] {101,108,115,101}), new StringMatchRestriction(new int[] {98,114,97,99,107,101,116}), new StringMatchRestriction(new int[] {97,108,108}), new StringMatchRestriction(new int[] {97,108,105,97,115}), new StringMatchRestriction(new int[] {98,111,111,108}), new StringMatchRestriction(new int[] {105,110,116}), new StringMatchRestriction(new int[] {105,102}), new StringMatchRestriction(new int[] {100,121,110,97,109,105,99}), new StringMatchRestriction(new int[] {116,117,112,108,101}), new StringMatchRestriction(new int[] {97,115,115,101,114,116}), new StringMatchRestriction(new int[] {105,116}), new StringMatchRestriction(new int[] {110,111,110,45,97,115,115,111,99}), new StringMatchRestriction(new int[] {116,114,117,101}), new StringMatchRestriction(new int[] {102,97,108,115,101}), new StringMatchRestriction(new int[] {105,110}), new StringMatchRestriction(new int[] {109,111,100,117,108,101}), new StringMatchRestriction(new int[] {102,111,114}), new StringMatchRestriction(new int[] {108,111,99}), new StringMatchRestriction(new int[] {115,111,108,118,101}), new StringMatchRestriction(new int[] {118,105,115,105,116}), new StringMatchRestriction(new int[] {108,97,121,111,117,116}), new StringMatchRestriction(new int[] {115,116,114})}); builder.addAlternative(RascalParser.cHJvZChsZXgoIk5hbWUiKSxbY29uZGl0aW9uYWwoc2VxKFtjb25kaXRpb25hbChcY2hhci1jbGFzcyhbcmFuZ2UoNjUsOTApLHJhbmdlKDk1LDk1KSxyYW5nZSg5NywxMjIpXSkse1xub3QtcHJlY2VkZShcY2hhci1jbGFzcyhbcmFuZ2UoNjUsOTApLHJhbmdlKDk1LDk1KSxyYW5nZSg5NywxMjIpXSkpfSksY29uZGl0aW9uYWwoXGl0ZXItc3RhcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpLHJhbmdlKDY1LDkwKSxyYW5nZSg5NSw5NSkscmFuZ2UoOTcsMTIyKV0pKSx7XG5vdC1mb2xsb3coXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KSxyYW5nZSg2NSw5MCkscmFuZ2UoOTUsOTUpLHJhbmdlKDk3LDEyMildKSl9KV0pLHtkZWxldGUoa2V5d29yZHMoIlJhc2NhbEtleXdvcmRzIikpfSldLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsZXgoIk5hbWUiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkyLDkyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg2NSw5MCkscmFuZ2UoOTUsOTUpLHJhbmdlKDk3LDEyMildKSxjb25kaXRpb25hbChcaXRlci1zdGFyKFxjaGFyLWNsYXNzKFtyYW5nZSg0NSw0NSkscmFuZ2UoNDgsNTcpLHJhbmdlKDY1LDkwKSxyYW5nZSg5NSw5NSkscmFuZ2UoOTcsMTIyKV0pKSx7XG5vdC1mb2xsb3coXGNoYXItY2xhc3MoW3JhbmdlKDQ1LDQ1KSxyYW5nZSg0OCw1NykscmFuZ2UoNjUsOTApLHJhbmdlKDk1LDk1KSxyYW5nZSg5NywxMjIpXSkpfSldLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[3]; - tmp[1] = new CharStackNode(12549, 1, new int[][]{{65,90},{95,95},{97,122}}, null, null); - tmp[0] = new CharStackNode(12548, 0, new int[][]{{92,92}}, null, null); - tmp[2] = new ListStackNode(12553, 2, cmVndWxhcihcaXRlci1zdGFyKFxjaGFyLWNsYXNzKFtyYW5nZSg0NSw0NSkscmFuZ2UoNDgsNTcpLHJhbmdlKDY1LDkwKSxyYW5nZSg5NSw5NSkscmFuZ2UoOTcsMTIyKV0pKSk00, new CharStackNode(12550, 0, new int[][]{{45,45},{48,57},{65,90},{95,95},{97,122}}, null, null), false, null, new ICompletionFilter[] {new CharFollowRestriction(new int[][]{{45,45},{48,57},{65,90},{95,95},{97,122}})}); + tmp[1] = new CharStackNode(12486, 1, new int[][]{{65,90},{95,95},{97,122}}, null, null); + tmp[0] = new CharStackNode(12485, 0, new int[][]{{92,92}}, null, null); + tmp[2] = new ListStackNode(12490, 2, cmVndWxhcihcaXRlci1zdGFyKFxjaGFyLWNsYXNzKFtyYW5nZSg0NSw0NSkscmFuZ2UoNDgsNTcpLHJhbmdlKDY1LDkwKSxyYW5nZSg5NSw5NSkscmFuZ2UoOTcsMTIyKV0pKSk00, new CharStackNode(12487, 0, new int[][]{{45,45},{48,57},{65,90},{95,95},{97,122}}, null, null), false, null, new ICompletionFilter[] {new CharFollowRestriction(new int[][]{{45,45},{48,57},{65,90},{95,95},{97,122}})}); builder.addAlternative(RascalParser.cHJvZChsZXgoIk5hbWUiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkyLDkyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg2NSw5MCkscmFuZ2UoOTUsOTUpLHJhbmdlKDk3LDEyMildKSxjb25kaXRpb25hbChcaXRlci1zdGFyKFxjaGFyLWNsYXNzKFtyYW5nZSg0NSw0NSkscmFuZ2UoNDgsNTcpLHJhbmdlKDY1LDkwKSxyYW5nZSg5NSw5NSkscmFuZ2UoOTcsMTIyKV0pKSx7XG5vdC1mb2xsb3coXGNoYXItY2xhc3MoW3JhbmdlKDQ1LDQ1KSxyYW5nZSg0OCw1NykscmFuZ2UoNjUsOTApLHJhbmdlKDk1LDk1KSxyYW5nZSg5NywxMjIpXSkpfSldLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIk5hbWUiKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJcXGl0ZXItc2Vwcyhzb3J0KFwiTmFtZVwiKSxbbGl0KFwiOjpcIildKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoXGl0ZXItc2VwcyhsZXgoIk5hbWUiKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiOjoiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIildKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[0] = new CharStackNode(12556, 0, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(12558, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[4] = new CharStackNode(12561, 4, new int[][]{{0,0}}, null, null); - tmp[1] = new LiteralStackNode(12557, 1, cHJvZChsaXQoIlxcaXRlci1zZXBzKHNvcnQoXCJOYW1lXCIpLFtsaXQoXCI6OlwiKV0pIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg5Miw5MildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDUsNDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDc4LDc4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NCw0NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTEsOTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNTgsNTgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDkzLDkzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {92,105,116,101,114,45,115,101,112,115,40,115,111,114,116,40,34,78,97,109,101,34,41,44,91,108,105,116,40,34,58,58,34,41,93,41}, null, null); - tmp[3] = new ListStackNode(12560, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(12559, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[0] = new CharStackNode(12493, 0, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(12495, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[4] = new CharStackNode(12498, 4, new int[][]{{0,0}}, null, null); + tmp[1] = new LiteralStackNode(12494, 1, cHJvZChsaXQoIlxcaXRlci1zZXBzKHNvcnQoXCJOYW1lXCIpLFtsaXQoXCI6OlwiKV0pIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg5Miw5MildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDUsNDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDc4LDc4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NCw0NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTEsOTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNTgsNTgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDkzLDkzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {92,105,116,101,114,45,115,101,112,115,40,115,111,114,116,40,34,78,97,109,101,34,41,44,91,108,105,116,40,34,58,58,34,41,93,41}, null, null); + tmp[3] = new ListStackNode(12497, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(12496, 0, new int[][]{{48,57}}, null, null), true, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIk5hbWUiKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJcXGl0ZXItc2Vwcyhzb3J0KFwiTmFtZVwiKSxbbGl0KFwiOjpcIildKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoXGl0ZXItc2VwcyhsZXgoIk5hbWUiKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiOjoiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIildKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIk5hbWUiKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJzb3J0KFwiTmFtZVwiKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIobGV4KCJOYW1lIikpKX0p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[0] = new CharStackNode(12569, 0, new int[][]{{0,0}}, null, null); - tmp[4] = new CharStackNode(12574, 4, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(12571, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[3] = new ListStackNode(12573, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(12572, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[1] = new LiteralStackNode(12570, 1, cHJvZChsaXQoInNvcnQoXCJOYW1lXCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDc4LDc4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {115,111,114,116,40,34,78,97,109,101,34,41}, null, null); + tmp[0] = new CharStackNode(12506, 0, new int[][]{{0,0}}, null, null); + tmp[4] = new CharStackNode(12511, 4, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(12508, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[3] = new ListStackNode(12510, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(12509, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[1] = new LiteralStackNode(12507, 1, cHJvZChsaXQoInNvcnQoXCJOYW1lXCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDc4LDc4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {115,111,114,116,40,34,78,97,109,101,34,41}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIk5hbWUiKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJzb3J0KFwiTmFtZVwiKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIobGV4KCJOYW1lIikpKX0p, tmp); } public static void init(ExpectBuilder builder){ @@ -12750,71 +12735,71 @@ protected static class FunctionDeclaration { protected static final void _init_cHJvZChsYWJlbCgiZXhwcmVzc2lvbiIsc29ydCgiRnVuY3Rpb25EZWNsYXJhdGlvbiIpKSxbbGFiZWwoInRhZ3MiLHNvcnQoIlRhZ3MiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJ2aXNpYmlsaXR5Iixzb3J0KCJWaXNpYmlsaXR5IikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgic2lnbmF0dXJlIixzb3J0KCJTaWduYXR1cmUiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiPSIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgiZXhwcmVzc2lvbiIsc29ydCgiRXhwcmVzc2lvbiIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCI7IildLHt0YWcoIkZvbGRhYmxlIigpKSx0YWcoImJyZWFrYWJsZSIoIntleHByZXNzaW9ufSIpKX0p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[11]; - tmp[8] = new NonTerminalStackNode(12818, 8, "Expression", null, null); - tmp[9] = new NonTerminalStackNode(12820, 9, "layouts_LAYOUTLIST", null, null); - tmp[3] = new NonTerminalStackNode(12812, 3, "layouts_LAYOUTLIST", null, null); - tmp[7] = new NonTerminalStackNode(12817, 7, "layouts_LAYOUTLIST", null, null); - tmp[5] = new NonTerminalStackNode(12815, 5, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(12809, 1, "layouts_LAYOUTLIST", null, null); - tmp[0] = new NonTerminalStackNode(12807, 0, "Tags", null, null); - tmp[10] = new LiteralStackNode(12821, 10, cHJvZChsaXQoIjsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU5LDU5KV0pXSx7fSk00, new int[] {59}, null, null); - tmp[4] = new NonTerminalStackNode(12813, 4, "Signature", null, null); - tmp[6] = new LiteralStackNode(12816, 6, cHJvZChsaXQoIj0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDYxLDYxKV0pXSx7fSk00, new int[] {61}, null, null); - tmp[2] = new NonTerminalStackNode(12810, 2, "Visibility", null, null); + tmp[8] = new NonTerminalStackNode(12755, 8, "Expression", null, null); + tmp[9] = new NonTerminalStackNode(12757, 9, "layouts_LAYOUTLIST", null, null); + tmp[3] = new NonTerminalStackNode(12749, 3, "layouts_LAYOUTLIST", null, null); + tmp[7] = new NonTerminalStackNode(12754, 7, "layouts_LAYOUTLIST", null, null); + tmp[5] = new NonTerminalStackNode(12752, 5, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(12746, 1, "layouts_LAYOUTLIST", null, null); + tmp[0] = new NonTerminalStackNode(12744, 0, "Tags", null, null); + tmp[10] = new LiteralStackNode(12758, 10, cHJvZChsaXQoIjsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU5LDU5KV0pXSx7fSk00, new int[] {59}, null, null); + tmp[4] = new NonTerminalStackNode(12750, 4, "Signature", null, null); + tmp[6] = new LiteralStackNode(12753, 6, cHJvZChsaXQoIj0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDYxLDYxKV0pXSx7fSk00, new int[] {61}, null, null); + tmp[2] = new NonTerminalStackNode(12747, 2, "Visibility", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiZXhwcmVzc2lvbiIsc29ydCgiRnVuY3Rpb25EZWNsYXJhdGlvbiIpKSxbbGFiZWwoInRhZ3MiLHNvcnQoIlRhZ3MiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJ2aXNpYmlsaXR5Iixzb3J0KCJWaXNpYmlsaXR5IikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgic2lnbmF0dXJlIixzb3J0KCJTaWduYXR1cmUiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiPSIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgiZXhwcmVzc2lvbiIsc29ydCgiRXhwcmVzc2lvbiIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCI7IildLHt0YWcoIkZvbGRhYmxlIigpKSx0YWcoImJyZWFrYWJsZSIoIntleHByZXNzaW9ufSIpKX0p, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJGdW5jdGlvbkRlY2xhcmF0aW9uIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIkZ1bmN0aW9uRGVjbGFyYXRpb25cIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKHNvcnQoIkZ1bmN0aW9uRGVjbGFyYXRpb24iKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[3] = new ListStackNode(12828, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(12827, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[2] = new LiteralStackNode(12826, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[4] = new CharStackNode(12829, 4, new int[][]{{0,0}}, null, null); - tmp[0] = new CharStackNode(12824, 0, new int[][]{{0,0}}, null, null); - tmp[1] = new LiteralStackNode(12825, 1, cHJvZChsaXQoInNvcnQoXCJGdW5jdGlvbkRlY2xhcmF0aW9uXCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDcwLDcwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTcsMTE3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5OSw5OSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNjgsNjgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk5LDk5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,70,117,110,99,116,105,111,110,68,101,99,108,97,114,97,116,105,111,110,34,41}, null, null); + tmp[3] = new ListStackNode(12765, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(12764, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[2] = new LiteralStackNode(12763, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[4] = new CharStackNode(12766, 4, new int[][]{{0,0}}, null, null); + tmp[0] = new CharStackNode(12761, 0, new int[][]{{0,0}}, null, null); + tmp[1] = new LiteralStackNode(12762, 1, cHJvZChsaXQoInNvcnQoXCJGdW5jdGlvbkRlY2xhcmF0aW9uXCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDcwLDcwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTcsMTE3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5OSw5OSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNjgsNjgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk5LDk5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,70,117,110,99,116,105,111,110,68,101,99,108,97,114,97,116,105,111,110,34,41}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJGdW5jdGlvbkRlY2xhcmF0aW9uIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIkZ1bmN0aW9uRGVjbGFyYXRpb25cIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKHNvcnQoIkZ1bmN0aW9uRGVjbGFyYXRpb24iKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiYWJzdHJhY3QiLHNvcnQoIkZ1bmN0aW9uRGVjbGFyYXRpb24iKSksW2xhYmVsKCJ0YWdzIixzb3J0KCJUYWdzIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgidmlzaWJpbGl0eSIsc29ydCgiVmlzaWJpbGl0eSIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInNpZ25hdHVyZSIsc29ydCgiU2lnbmF0dXJlIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIjsiKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[7]; - tmp[0] = new NonTerminalStackNode(12833, 0, "Tags", null, null); - tmp[4] = new NonTerminalStackNode(12839, 4, "Signature", null, null); - tmp[6] = new LiteralStackNode(12842, 6, cHJvZChsaXQoIjsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU5LDU5KV0pXSx7fSk00, new int[] {59}, null, null); - tmp[2] = new NonTerminalStackNode(12836, 2, "Visibility", null, null); - tmp[5] = new NonTerminalStackNode(12841, 5, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(12835, 1, "layouts_LAYOUTLIST", null, null); - tmp[3] = new NonTerminalStackNode(12838, 3, "layouts_LAYOUTLIST", null, null); + tmp[0] = new NonTerminalStackNode(12770, 0, "Tags", null, null); + tmp[4] = new NonTerminalStackNode(12776, 4, "Signature", null, null); + tmp[6] = new LiteralStackNode(12779, 6, cHJvZChsaXQoIjsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU5LDU5KV0pXSx7fSk00, new int[] {59}, null, null); + tmp[2] = new NonTerminalStackNode(12773, 2, "Visibility", null, null); + tmp[5] = new NonTerminalStackNode(12778, 5, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(12772, 1, "layouts_LAYOUTLIST", null, null); + tmp[3] = new NonTerminalStackNode(12775, 3, "layouts_LAYOUTLIST", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiYWJzdHJhY3QiLHNvcnQoIkZ1bmN0aW9uRGVjbGFyYXRpb24iKSksW2xhYmVsKCJ0YWdzIixzb3J0KCJUYWdzIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgidmlzaWJpbGl0eSIsc29ydCgiVmlzaWJpbGl0eSIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInNpZ25hdHVyZSIsc29ydCgiU2lnbmF0dXJlIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIjsiKV0se30p, tmp); } protected static final void _init_cHJvZChsYWJlbCgiZGVmYXVsdCIsc29ydCgiRnVuY3Rpb25EZWNsYXJhdGlvbiIpKSxbbGFiZWwoInRhZ3MiLHNvcnQoIlRhZ3MiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJ2aXNpYmlsaXR5Iixzb3J0KCJWaXNpYmlsaXR5IikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgic2lnbmF0dXJlIixzb3J0KCJTaWduYXR1cmUiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJib2R5Iixzb3J0KCJGdW5jdGlvbkJvZHkiKSldLHt0YWcoIkZvbGRhYmxlIigpKX0p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[7]; - tmp[0] = new NonTerminalStackNode(12845, 0, "Tags", null, null); - tmp[2] = new NonTerminalStackNode(12848, 2, "Visibility", null, null); - tmp[6] = new NonTerminalStackNode(12854, 6, "FunctionBody", null, null); - tmp[4] = new NonTerminalStackNode(12851, 4, "Signature", null, null); - tmp[1] = new NonTerminalStackNode(12847, 1, "layouts_LAYOUTLIST", null, null); - tmp[5] = new NonTerminalStackNode(12853, 5, "layouts_LAYOUTLIST", null, null); - tmp[3] = new NonTerminalStackNode(12850, 3, "layouts_LAYOUTLIST", null, null); + tmp[0] = new NonTerminalStackNode(12782, 0, "Tags", null, null); + tmp[2] = new NonTerminalStackNode(12785, 2, "Visibility", null, null); + tmp[6] = new NonTerminalStackNode(12791, 6, "FunctionBody", null, null); + tmp[4] = new NonTerminalStackNode(12788, 4, "Signature", null, null); + tmp[1] = new NonTerminalStackNode(12784, 1, "layouts_LAYOUTLIST", null, null); + tmp[5] = new NonTerminalStackNode(12790, 5, "layouts_LAYOUTLIST", null, null); + tmp[3] = new NonTerminalStackNode(12787, 3, "layouts_LAYOUTLIST", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiZGVmYXVsdCIsc29ydCgiRnVuY3Rpb25EZWNsYXJhdGlvbiIpKSxbbGFiZWwoInRhZ3MiLHNvcnQoIlRhZ3MiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJ2aXNpYmlsaXR5Iixzb3J0KCJWaXNpYmlsaXR5IikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgic2lnbmF0dXJlIixzb3J0KCJTaWduYXR1cmUiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJib2R5Iixzb3J0KCJGdW5jdGlvbkJvZHkiKSldLHt0YWcoIkZvbGRhYmxlIigpKX0p, tmp); } protected static final void _init_cHJvZChsYWJlbCgiY29uZGl0aW9uYWwiLHNvcnQoIkZ1bmN0aW9uRGVjbGFyYXRpb24iKSksW2xhYmVsKCJ0YWdzIixzb3J0KCJUYWdzIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgidmlzaWJpbGl0eSIsc29ydCgiVmlzaWJpbGl0eSIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInNpZ25hdHVyZSIsc29ydCgiU2lnbmF0dXJlIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIj0iKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImV4cHJlc3Npb24iLHNvcnQoIkV4cHJlc3Npb24iKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgid2hlbiIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgiY29uZGl0aW9ucyIsXGl0ZXItc2Vwcyhzb3J0KCJFeHByZXNzaW9uIiksW2xheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIiwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIildKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiOyIpXSx7dGFnKCJicmVha2FibGUiKCJ7ZXhwcmVzc2lvbixjb25kaXRpb25zfSIpKSx0YWcoIkZvbGRhYmxlIigpKX0p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[15]; - tmp[4] = new NonTerminalStackNode(12864, 4, "Signature", null, null); - tmp[12] = new SeparatedListStackNode(12878, 12, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIkV4cHJlc3Npb24iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(12874, 0, "Expression", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(12875, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(12876, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(12877, 3, "layouts_LAYOUTLIST", null, null)}, true, null, null); - tmp[6] = new LiteralStackNode(12867, 6, cHJvZChsaXQoIj0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDYxLDYxKV0pXSx7fSk00, new int[] {61}, null, null); - tmp[13] = new NonTerminalStackNode(12880, 13, "layouts_LAYOUTLIST", null, null); - tmp[10] = new LiteralStackNode(12872, 10, cHJvZChsaXQoIndoZW4iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExOSwxMTkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNCwxMDQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSldLHt9KQ0000, new int[] {119,104,101,110}, null, null); - tmp[0] = new NonTerminalStackNode(12858, 0, "Tags", null, null); - tmp[9] = new NonTerminalStackNode(12871, 9, "layouts_LAYOUTLIST", null, null); - tmp[14] = new LiteralStackNode(12881, 14, cHJvZChsaXQoIjsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU5LDU5KV0pXSx7fSk00, new int[] {59}, null, null); - tmp[2] = new NonTerminalStackNode(12861, 2, "Visibility", null, null); - tmp[8] = new NonTerminalStackNode(12869, 8, "Expression", null, null); - tmp[11] = new NonTerminalStackNode(12873, 11, "layouts_LAYOUTLIST", null, null); - tmp[3] = new NonTerminalStackNode(12863, 3, "layouts_LAYOUTLIST", null, null); - tmp[7] = new NonTerminalStackNode(12868, 7, "layouts_LAYOUTLIST", null, null); - tmp[5] = new NonTerminalStackNode(12866, 5, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(12860, 1, "layouts_LAYOUTLIST", null, null); + tmp[4] = new NonTerminalStackNode(12801, 4, "Signature", null, null); + tmp[12] = new SeparatedListStackNode(12815, 12, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIkV4cHJlc3Npb24iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(12811, 0, "Expression", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(12812, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(12813, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(12814, 3, "layouts_LAYOUTLIST", null, null)}, true, null, null); + tmp[6] = new LiteralStackNode(12804, 6, cHJvZChsaXQoIj0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDYxLDYxKV0pXSx7fSk00, new int[] {61}, null, null); + tmp[13] = new NonTerminalStackNode(12817, 13, "layouts_LAYOUTLIST", null, null); + tmp[10] = new LiteralStackNode(12809, 10, cHJvZChsaXQoIndoZW4iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExOSwxMTkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNCwxMDQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSldLHt9KQ0000, new int[] {119,104,101,110}, null, null); + tmp[0] = new NonTerminalStackNode(12795, 0, "Tags", null, null); + tmp[9] = new NonTerminalStackNode(12808, 9, "layouts_LAYOUTLIST", null, null); + tmp[14] = new LiteralStackNode(12818, 14, cHJvZChsaXQoIjsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU5LDU5KV0pXSx7fSk00, new int[] {59}, null, null); + tmp[2] = new NonTerminalStackNode(12798, 2, "Visibility", null, null); + tmp[8] = new NonTerminalStackNode(12806, 8, "Expression", null, null); + tmp[11] = new NonTerminalStackNode(12810, 11, "layouts_LAYOUTLIST", null, null); + tmp[3] = new NonTerminalStackNode(12800, 3, "layouts_LAYOUTLIST", null, null); + tmp[7] = new NonTerminalStackNode(12805, 7, "layouts_LAYOUTLIST", null, null); + tmp[5] = new NonTerminalStackNode(12803, 5, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(12797, 1, "layouts_LAYOUTLIST", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiY29uZGl0aW9uYWwiLHNvcnQoIkZ1bmN0aW9uRGVjbGFyYXRpb24iKSksW2xhYmVsKCJ0YWdzIixzb3J0KCJUYWdzIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgidmlzaWJpbGl0eSIsc29ydCgiVmlzaWJpbGl0eSIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInNpZ25hdHVyZSIsc29ydCgiU2lnbmF0dXJlIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIj0iKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImV4cHJlc3Npb24iLHNvcnQoIkV4cHJlc3Npb24iKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgid2hlbiIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgiY29uZGl0aW9ucyIsXGl0ZXItc2Vwcyhzb3J0KCJFeHByZXNzaW9uIiksW2xheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIiwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIildKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiOyIpXSx7dGFnKCJicmVha2FibGUiKCJ7ZXhwcmVzc2lvbixjb25kaXRpb25zfSIpKSx0YWcoIkZvbGRhYmxlIigpKX0p, tmp); } public static void init(ExpectBuilder builder){ @@ -12843,23 +12828,23 @@ protected static class Start { protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJTdGFydCIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJTdGFydFwiKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoc29ydCgiU3RhcnQiKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[1] = new LiteralStackNode(13021, 1, cHJvZChsaXQoInNvcnQoXCJTdGFydFwiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4Myw4MyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,83,116,97,114,116,34,41}, null, null); - tmp[3] = new ListStackNode(13024, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(13023, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[0] = new CharStackNode(13020, 0, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(13022, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[4] = new CharStackNode(13025, 4, new int[][]{{0,0}}, null, null); + tmp[1] = new LiteralStackNode(12958, 1, cHJvZChsaXQoInNvcnQoXCJTdGFydFwiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4Myw4MyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,83,116,97,114,116,34,41}, null, null); + tmp[3] = new ListStackNode(12961, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(12960, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[0] = new CharStackNode(12957, 0, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(12959, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[4] = new CharStackNode(12962, 4, new int[][]{{0,0}}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJTdGFydCIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJTdGFydFwiKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoc29ydCgiU3RhcnQiKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgicHJlc2VudCIsc29ydCgiU3RhcnQiKSksW2xpdCgic3RhcnQiKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(13029, 0, cHJvZChsaXQoInN0YXJ0IiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKV0se30p, new int[] {115,116,97,114,116}, null, null); + tmp[0] = new LiteralStackNode(12966, 0, cHJvZChsaXQoInN0YXJ0IiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKV0se30p, new int[] {115,116,97,114,116}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgicHJlc2VudCIsc29ydCgiU3RhcnQiKSksW2xpdCgic3RhcnQiKV0se30p, tmp); } protected static final void _init_cHJvZChsYWJlbCgiYWJzZW50Iixzb3J0KCJTdGFydCIpKSxbXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new EpsilonStackNode(13031, 0); + tmp[0] = new EpsilonStackNode(12968, 0); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiYWJzZW50Iixzb3J0KCJTdGFydCIpKSxbXSx7fSk00, tmp); } public static void init(ExpectBuilder builder){ @@ -12884,33 +12869,33 @@ protected static class LAYOUT { protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIkxBWU9VVCIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJMQVlPVVRcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKGxleCgiTEFZT1VUIikpKX0p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[1] = new LiteralStackNode(13113, 1, cHJvZChsaXQoInNvcnQoXCJMQVlPVVRcIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNzYsNzYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDY1LDY1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4OSw4OSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNzksNzkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDg1LDg1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4NCw4NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {115,111,114,116,40,34,76,65,89,79,85,84,34,41}, null, null); - tmp[3] = new ListStackNode(13116, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(13115, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[2] = new LiteralStackNode(13114, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[4] = new CharStackNode(13117, 4, new int[][]{{0,0}}, null, null); - tmp[0] = new CharStackNode(13112, 0, new int[][]{{0,0}}, null, null); + tmp[1] = new LiteralStackNode(13050, 1, cHJvZChsaXQoInNvcnQoXCJMQVlPVVRcIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNzYsNzYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDY1LDY1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4OSw4OSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNzksNzkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDg1LDg1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4NCw4NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {115,111,114,116,40,34,76,65,89,79,85,84,34,41}, null, null); + tmp[3] = new ListStackNode(13053, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(13052, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[2] = new LiteralStackNode(13051, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[4] = new CharStackNode(13054, 4, new int[][]{{0,0}}, null, null); + tmp[0] = new CharStackNode(13049, 0, new int[][]{{0,0}}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIkxBWU9VVCIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJMQVlPVVRcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKGxleCgiTEFZT1VUIikpKX0p, tmp); } protected static final void _init_cHJvZChsZXgoIkxBWU9VVCIpLFtsZXgoIkNvbW1lbnQiKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new NonTerminalStackNode(13120, 0, "Comment", null, null); + tmp[0] = new NonTerminalStackNode(13057, 0, "Comment", null, null); builder.addAlternative(RascalParser.cHJvZChsZXgoIkxBWU9VVCIpLFtsZXgoIkNvbW1lbnQiKV0se30p, tmp); } protected static final void _init_cHJvZChsZXgoIkxBWU9VVCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoOSwxMykscmFuZ2UoMzIsMzIpLHJhbmdlKDEzMywxMzMpLHJhbmdlKDE2MCwxNjApLHJhbmdlKDU3NjAsNTc2MCkscmFuZ2UoNjE1OCw2MTU4KSxyYW5nZSg4MTkyLDgyMDIpLHJhbmdlKDgyMzIsODIzMykscmFuZ2UoODIzOSw4MjM5KSxyYW5nZSg4Mjg3LDgyODcpLHJhbmdlKDEyMjg4LDEyMjg4KV0pXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new CharStackNode(13122, 0, new int[][]{{9,13},{32,32},{133,133},{160,160},{5760,5760},{6158,6158},{8192,8202},{8232,8233},{8239,8239},{8287,8287},{12288,12288}}, null, null); + tmp[0] = new CharStackNode(13059, 0, new int[][]{{9,13},{32,32},{133,133},{160,160},{5760,5760},{6158,6158},{8192,8202},{8232,8233},{8239,8239},{8287,8287},{12288,12288}}, null, null); builder.addAlternative(RascalParser.cHJvZChsZXgoIkxBWU9VVCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoOSwxMykscmFuZ2UoMzIsMzIpLHJhbmdlKDEzMywxMzMpLHJhbmdlKDE2MCwxNjApLHJhbmdlKDU3NjAsNTc2MCkscmFuZ2UoNjE1OCw2MTU4KSxyYW5nZSg4MTkyLDgyMDIpLHJhbmdlKDgyMzIsODIzMykscmFuZ2UoODIzOSw4MjM5KSxyYW5nZSg4Mjg3LDgyODcpLHJhbmdlKDEyMjg4LDEyMjg4KV0pXSx7fSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIkxBWU9VVCIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoIlxcaXRlci1zdGFyKHNvcnQoXCJMQVlPVVRcIikpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihcaXRlci1zdGFyKGxleCgiTEFZT1VUIikpKSl9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[4] = new CharStackNode(13130, 4, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(13127, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[3] = new ListStackNode(13129, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(13128, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[1] = new LiteralStackNode(13126, 1, cHJvZChsaXQoIlxcaXRlci1zdGFyKHNvcnQoXCJMQVlPVVRcIikpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg5Miw5MildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDUsNDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg3Niw3NildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNjUsNjUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDg5LDg5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg3OSw3OSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODUsODUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDg0LDg0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {92,105,116,101,114,45,115,116,97,114,40,115,111,114,116,40,34,76,65,89,79,85,84,34,41,41}, null, null); - tmp[0] = new CharStackNode(13125, 0, new int[][]{{0,0}}, null, null); + tmp[4] = new CharStackNode(13067, 4, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(13064, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[3] = new ListStackNode(13066, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(13065, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[1] = new LiteralStackNode(13063, 1, cHJvZChsaXQoIlxcaXRlci1zdGFyKHNvcnQoXCJMQVlPVVRcIikpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg5Miw5MildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDUsNDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg3Niw3NildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNjUsNjUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDg5LDg5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg3OSw3OSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODUsODUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDg0LDg0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {92,105,116,101,114,45,115,116,97,114,40,115,111,114,116,40,34,76,65,89,79,85,84,34,41,41}, null, null); + tmp[0] = new CharStackNode(13062, 0, new int[][]{{0,0}}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIkxBWU9VVCIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoIlxcaXRlci1zdGFyKHNvcnQoXCJMQVlPVVRcIikpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihcaXRlci1zdGFyKGxleCgiTEFZT1VUIikpKSl9KQ0000, tmp); } public static void init(ExpectBuilder builder){ @@ -12937,17 +12922,17 @@ protected static class Body { protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJCb2R5IikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIkJvZHlcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKHNvcnQoIkJvZHkiKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[3] = new ListStackNode(13140, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(13139, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[1] = new LiteralStackNode(13137, 1, cHJvZChsaXQoInNvcnQoXCJCb2R5XCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDY2LDY2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDAsMTAwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMjEsMTIxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {115,111,114,116,40,34,66,111,100,121,34,41}, null, null); - tmp[0] = new CharStackNode(13136, 0, new int[][]{{0,0}}, null, null); - tmp[4] = new CharStackNode(13141, 4, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(13138, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[3] = new ListStackNode(13077, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(13076, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[1] = new LiteralStackNode(13074, 1, cHJvZChsaXQoInNvcnQoXCJCb2R5XCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDY2LDY2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDAsMTAwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMjEsMTIxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {115,111,114,116,40,34,66,111,100,121,34,41}, null, null); + tmp[0] = new CharStackNode(13073, 0, new int[][]{{0,0}}, null, null); + tmp[4] = new CharStackNode(13078, 4, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(13075, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJCb2R5IikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIkJvZHlcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKHNvcnQoIkJvZHkiKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgidG9wbGV2ZWxzIixzb3J0KCJCb2R5IikpLFtsYWJlbCgidG9wbGV2ZWxzIixcaXRlci1zdGFyLXNlcHMoc29ydCgiVG9wbGV2ZWwiKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpXSkpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new SeparatedListStackNode(13147, 0, cmVndWxhcihcaXRlci1zdGFyLXNlcHMoc29ydCgiVG9wbGV2ZWwiKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpXSkp, new NonTerminalStackNode(13145, 0, "Toplevel", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(13146, 1, "layouts_LAYOUTLIST", null, null)}, false, null, null); + tmp[0] = new SeparatedListStackNode(13084, 0, cmVndWxhcihcaXRlci1zdGFyLXNlcHMoc29ydCgiVG9wbGV2ZWwiKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpXSkp, new NonTerminalStackNode(13082, 0, "Toplevel", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(13083, 1, "layouts_LAYOUTLIST", null, null)}, false, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgidG9wbGV2ZWxzIixzb3J0KCJCb2R5IikpLFtsYWJlbCgidG9wbGV2ZWxzIixcaXRlci1zdGFyLXNlcHMoc29ydCgiVG9wbGV2ZWwiKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpXSkpXSx7fSk00, tmp); } public static void init(ExpectBuilder builder){ @@ -12970,61 +12955,61 @@ protected static class Import { protected static final void _init_cHJvZChsYWJlbCgiZGVmYXVsdCIsc29ydCgiSW1wb3J0IikpLFtsaXQoImltcG9ydCIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgibW9kdWxlIixzb3J0KCJJbXBvcnRlZE1vZHVsZSIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCI7IildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[1] = new NonTerminalStackNode(13173, 1, "layouts_LAYOUTLIST", null, null); - tmp[2] = new NonTerminalStackNode(13174, 2, "ImportedModule", null, null); - tmp[3] = new NonTerminalStackNode(13176, 3, "layouts_LAYOUTLIST", null, null); - tmp[0] = new LiteralStackNode(13172, 0, cHJvZChsaXQoImltcG9ydCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEyLDExMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKV0se30p, new int[] {105,109,112,111,114,116}, null, null); - tmp[4] = new LiteralStackNode(13177, 4, cHJvZChsaXQoIjsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU5LDU5KV0pXSx7fSk00, new int[] {59}, null, null); + tmp[1] = new NonTerminalStackNode(13110, 1, "layouts_LAYOUTLIST", null, null); + tmp[2] = new NonTerminalStackNode(13111, 2, "ImportedModule", null, null); + tmp[3] = new NonTerminalStackNode(13113, 3, "layouts_LAYOUTLIST", null, null); + tmp[0] = new LiteralStackNode(13109, 0, cHJvZChsaXQoImltcG9ydCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEyLDExMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKV0se30p, new int[] {105,109,112,111,114,116}, null, null); + tmp[4] = new LiteralStackNode(13114, 4, cHJvZChsaXQoIjsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU5LDU5KV0pXSx7fSk00, new int[] {59}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiZGVmYXVsdCIsc29ydCgiSW1wb3J0IikpLFtsaXQoImltcG9ydCIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgibW9kdWxlIixzb3J0KCJJbXBvcnRlZE1vZHVsZSIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCI7IildLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgiZXh0ZW5kIixzb3J0KCJJbXBvcnQiKSksW2xpdCgiZXh0ZW5kIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJtb2R1bGUiLHNvcnQoIkltcG9ydGVkTW9kdWxlIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIjsiKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[3] = new NonTerminalStackNode(13184, 3, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(13181, 1, "layouts_LAYOUTLIST", null, null); - tmp[2] = new NonTerminalStackNode(13182, 2, "ImportedModule", null, null); - tmp[0] = new LiteralStackNode(13180, 0, cHJvZChsaXQoImV4dGVuZCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTIwLDEyMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAwLDEwMCldKV0se30p, new int[] {101,120,116,101,110,100}, null, null); - tmp[4] = new LiteralStackNode(13185, 4, cHJvZChsaXQoIjsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU5LDU5KV0pXSx7fSk00, new int[] {59}, null, null); + tmp[3] = new NonTerminalStackNode(13121, 3, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(13118, 1, "layouts_LAYOUTLIST", null, null); + tmp[2] = new NonTerminalStackNode(13119, 2, "ImportedModule", null, null); + tmp[0] = new LiteralStackNode(13117, 0, cHJvZChsaXQoImV4dGVuZCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTIwLDEyMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAwLDEwMCldKV0se30p, new int[] {101,120,116,101,110,100}, null, null); + tmp[4] = new LiteralStackNode(13122, 4, cHJvZChsaXQoIjsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU5LDU5KV0pXSx7fSk00, new int[] {59}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiZXh0ZW5kIixzb3J0KCJJbXBvcnQiKSksW2xpdCgiZXh0ZW5kIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJtb2R1bGUiLHNvcnQoIkltcG9ydGVkTW9kdWxlIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIjsiKV0se30p, tmp); } protected static final void _init_cHJvZChsYWJlbCgiZXh0ZXJuYWwiLHNvcnQoIkltcG9ydCIpKSxbbGl0KCJpbXBvcnQiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoIm5hbWUiLHNvcnQoIlF1YWxpZmllZE5hbWUiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiPSIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgiYXQiLHNvcnQoIkxvY2F0aW9uTGl0ZXJhbCIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCI7IildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[9]; - tmp[2] = new NonTerminalStackNode(13190, 2, "QualifiedName", null, null); - tmp[4] = new LiteralStackNode(13193, 4, cHJvZChsaXQoIj0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDYxLDYxKV0pXSx7fSk00, new int[] {61}, null, null); - tmp[0] = new LiteralStackNode(13188, 0, cHJvZChsaXQoImltcG9ydCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEyLDExMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKV0se30p, new int[] {105,109,112,111,114,116}, null, null); - tmp[3] = new NonTerminalStackNode(13192, 3, "layouts_LAYOUTLIST", null, null); - tmp[6] = new NonTerminalStackNode(13195, 6, "LocationLiteral", null, null); - tmp[5] = new NonTerminalStackNode(13194, 5, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(13189, 1, "layouts_LAYOUTLIST", null, null); - tmp[7] = new NonTerminalStackNode(13197, 7, "layouts_LAYOUTLIST", null, null); - tmp[8] = new LiteralStackNode(13198, 8, cHJvZChsaXQoIjsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU5LDU5KV0pXSx7fSk00, new int[] {59}, null, null); + tmp[2] = new NonTerminalStackNode(13127, 2, "QualifiedName", null, null); + tmp[4] = new LiteralStackNode(13130, 4, cHJvZChsaXQoIj0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDYxLDYxKV0pXSx7fSk00, new int[] {61}, null, null); + tmp[0] = new LiteralStackNode(13125, 0, cHJvZChsaXQoImltcG9ydCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEyLDExMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKV0se30p, new int[] {105,109,112,111,114,116}, null, null); + tmp[3] = new NonTerminalStackNode(13129, 3, "layouts_LAYOUTLIST", null, null); + tmp[6] = new NonTerminalStackNode(13132, 6, "LocationLiteral", null, null); + tmp[5] = new NonTerminalStackNode(13131, 5, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(13126, 1, "layouts_LAYOUTLIST", null, null); + tmp[7] = new NonTerminalStackNode(13134, 7, "layouts_LAYOUTLIST", null, null); + tmp[8] = new LiteralStackNode(13135, 8, cHJvZChsaXQoIjsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU5LDU5KV0pXSx7fSk00, new int[] {59}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiZXh0ZXJuYWwiLHNvcnQoIkltcG9ydCIpKSxbbGl0KCJpbXBvcnQiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoIm5hbWUiLHNvcnQoIlF1YWxpZmllZE5hbWUiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiPSIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgiYXQiLHNvcnQoIkxvY2F0aW9uTGl0ZXJhbCIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCI7IildLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJJbXBvcnQiKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJzb3J0KFwiSW1wb3J0XCIpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihzb3J0KCJJbXBvcnQiKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[4] = new CharStackNode(13206, 4, new int[][]{{0,0}}, null, null); - tmp[1] = new LiteralStackNode(13202, 1, cHJvZChsaXQoInNvcnQoXCJJbXBvcnRcIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNzMsNzMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOSwxMDkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,73,109,112,111,114,116,34,41}, null, null); - tmp[2] = new LiteralStackNode(13203, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[0] = new CharStackNode(13201, 0, new int[][]{{0,0}}, null, null); - tmp[3] = new ListStackNode(13205, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(13204, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[4] = new CharStackNode(13143, 4, new int[][]{{0,0}}, null, null); + tmp[1] = new LiteralStackNode(13139, 1, cHJvZChsaXQoInNvcnQoXCJJbXBvcnRcIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNzMsNzMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOSwxMDkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,73,109,112,111,114,116,34,41}, null, null); + tmp[2] = new LiteralStackNode(13140, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[0] = new CharStackNode(13138, 0, new int[][]{{0,0}}, null, null); + tmp[3] = new ListStackNode(13142, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(13141, 0, new int[][]{{48,57}}, null, null), true, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJJbXBvcnQiKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJzb3J0KFwiSW1wb3J0XCIpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihzb3J0KCJJbXBvcnQiKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgic3ludGF4Iixzb3J0KCJJbXBvcnQiKSksW2xhYmVsKCJzeW50YXgiLHNvcnQoIlN5bnRheERlZmluaXRpb24iKSldLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new NonTerminalStackNode(13210, 0, "SyntaxDefinition", null, null); + tmp[0] = new NonTerminalStackNode(13147, 0, "SyntaxDefinition", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgic3ludGF4Iixzb3J0KCJJbXBvcnQiKSksW2xhYmVsKCJzeW50YXgiLHNvcnQoIlN5bnRheERlZmluaXRpb24iKSldLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJJbXBvcnQiKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJcXGl0ZXItc3Rhcihzb3J0KFwiSW1wb3J0XCIpKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoXGl0ZXItc3Rhci1zZXBzKHNvcnQoIkltcG9ydCIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIildKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[3] = new ListStackNode(13218, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(13217, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[1] = new LiteralStackNode(13215, 1, cHJvZChsaXQoIlxcaXRlci1zdGFyKHNvcnQoXCJJbXBvcnRcIikpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg5Miw5MildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDUsNDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg3Myw3MyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEyLDExMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {92,105,116,101,114,45,115,116,97,114,40,115,111,114,116,40,34,73,109,112,111,114,116,34,41,41}, null, null); - tmp[2] = new LiteralStackNode(13216, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[4] = new CharStackNode(13219, 4, new int[][]{{0,0}}, null, null); - tmp[0] = new CharStackNode(13214, 0, new int[][]{{0,0}}, null, null); + tmp[3] = new ListStackNode(13155, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(13154, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[1] = new LiteralStackNode(13152, 1, cHJvZChsaXQoIlxcaXRlci1zdGFyKHNvcnQoXCJJbXBvcnRcIikpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg5Miw5MildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDUsNDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg3Myw3MyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEyLDExMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {92,105,116,101,114,45,115,116,97,114,40,115,111,114,116,40,34,73,109,112,111,114,116,34,41,41}, null, null); + tmp[2] = new LiteralStackNode(13153, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[4] = new CharStackNode(13156, 4, new int[][]{{0,0}}, null, null); + tmp[0] = new CharStackNode(13151, 0, new int[][]{{0,0}}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJJbXBvcnQiKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJcXGl0ZXItc3Rhcihzb3J0KFwiSW1wb3J0XCIpKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoXGl0ZXItc3Rhci1zZXBzKHNvcnQoIkltcG9ydCIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIildKSkpfSk00, tmp); } public static void init(ExpectBuilder builder){ @@ -13055,23 +13040,23 @@ protected static class ConcreteHole { protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJDb25jcmV0ZUhvbGUiKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJzb3J0KFwiQ29uY3JldGVIb2xlXCIpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihzb3J0KCJDb25jcmV0ZUhvbGUiKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[2] = new LiteralStackNode(13303, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[0] = new CharStackNode(13301, 0, new int[][]{{0,0}}, null, null); - tmp[1] = new LiteralStackNode(13302, 1, cHJvZChsaXQoInNvcnQoXCJDb25jcmV0ZUhvbGVcIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNjcsNjcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDk5LDk5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg3Miw3MildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {115,111,114,116,40,34,67,111,110,99,114,101,116,101,72,111,108,101,34,41}, null, null); - tmp[3] = new ListStackNode(13305, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(13304, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[4] = new CharStackNode(13306, 4, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(13240, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[0] = new CharStackNode(13238, 0, new int[][]{{0,0}}, null, null); + tmp[1] = new LiteralStackNode(13239, 1, cHJvZChsaXQoInNvcnQoXCJDb25jcmV0ZUhvbGVcIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNjcsNjcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDk5LDk5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg3Miw3MildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {115,111,114,116,40,34,67,111,110,99,114,101,116,101,72,111,108,101,34,41}, null, null); + tmp[3] = new ListStackNode(13242, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(13241, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[4] = new CharStackNode(13243, 4, new int[][]{{0,0}}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJDb25jcmV0ZUhvbGUiKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJzb3J0KFwiQ29uY3JldGVIb2xlXCIpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihzb3J0KCJDb25jcmV0ZUhvbGUiKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgib25lIixzb3J0KCJDb25jcmV0ZUhvbGUiKSksW2xpdCgiXDwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInN5bWJvbCIsc29ydCgiU3ltIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgibmFtZSIsbGV4KCJOYW1lIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIlw11IildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[7]; - tmp[4] = new NonTerminalStackNode(13315, 4, "Name", null, null); - tmp[2] = new NonTerminalStackNode(13312, 2, "Sym", null, null); - tmp[0] = new LiteralStackNode(13310, 0, cHJvZChsaXQoIlw8IiksW1xjaGFyLWNsYXNzKFtyYW5nZSg2MCw2MCldKV0se30p, new int[] {60}, null, null); - tmp[3] = new NonTerminalStackNode(13314, 3, "layouts_LAYOUTLIST", null, null); - tmp[5] = new NonTerminalStackNode(13317, 5, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(13311, 1, "layouts_LAYOUTLIST", null, null); - tmp[6] = new LiteralStackNode(13318, 6, cHJvZChsaXQoIlw11IiksW1xjaGFyLWNsYXNzKFtyYW5nZSg2Miw2MildKV0se30p, new int[] {62}, null, null); + tmp[4] = new NonTerminalStackNode(13252, 4, "Name", null, null); + tmp[2] = new NonTerminalStackNode(13249, 2, "Sym", null, null); + tmp[0] = new LiteralStackNode(13247, 0, cHJvZChsaXQoIlw8IiksW1xjaGFyLWNsYXNzKFtyYW5nZSg2MCw2MCldKV0se30p, new int[] {60}, null, null); + tmp[3] = new NonTerminalStackNode(13251, 3, "layouts_LAYOUTLIST", null, null); + tmp[5] = new NonTerminalStackNode(13254, 5, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(13248, 1, "layouts_LAYOUTLIST", null, null); + tmp[6] = new LiteralStackNode(13255, 6, cHJvZChsaXQoIlw11IiksW1xjaGFyLWNsYXNzKFtyYW5nZSg2Miw2MildKV0se30p, new int[] {62}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgib25lIixzb3J0KCJDb25jcmV0ZUhvbGUiKSksW2xpdCgiXDwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInN5bWJvbCIsc29ydCgiU3ltIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgibmFtZSIsbGV4KCJOYW1lIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIlw11IildLHt9KQ0000, tmp); } public static void init(ExpectBuilder builder){ @@ -13094,29 +13079,29 @@ protected static class UserType { protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJVc2VyVHlwZSIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJVc2VyVHlwZVwiKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoc29ydCgiVXNlclR5cGUiKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[1] = new LiteralStackNode(13495, 1, cHJvZChsaXQoInNvcnQoXCJVc2VyVHlwZVwiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4NSw4NSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODQsODQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEyMSwxMjEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,85,115,101,114,84,121,112,101,34,41}, null, null); - tmp[3] = new ListStackNode(13498, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(13497, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[0] = new CharStackNode(13494, 0, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(13496, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[4] = new CharStackNode(13499, 4, new int[][]{{0,0}}, null, null); + tmp[1] = new LiteralStackNode(13432, 1, cHJvZChsaXQoInNvcnQoXCJVc2VyVHlwZVwiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4NSw4NSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODQsODQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEyMSwxMjEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,85,115,101,114,84,121,112,101,34,41}, null, null); + tmp[3] = new ListStackNode(13435, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(13434, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[0] = new CharStackNode(13431, 0, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(13433, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[4] = new CharStackNode(13436, 4, new int[][]{{0,0}}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJVc2VyVHlwZSIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJVc2VyVHlwZVwiKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoc29ydCgiVXNlclR5cGUiKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgicGFyYW1ldHJpYyIsc29ydCgiVXNlclR5cGUiKSksW2NvbmRpdGlvbmFsKGxhYmVsKCJuYW1lIixzb3J0KCJRdWFsaWZpZWROYW1lIikpLHtmb2xsb3cobGl0KCJbIikpfSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiWyIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgicGFyYW1ldGVycyIsXGl0ZXItc2Vwcyhzb3J0KCJUeXBlIiksW2xheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIiwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIildKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiXSIpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[7]; - tmp[0] = new NonTerminalStackNode(13506, 0, "QualifiedName", null, new ICompletionFilter[] {new StringFollowRequirement(new int[] {91})}); - tmp[6] = new LiteralStackNode(13517, 6, cHJvZChsaXQoIl0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkzLDkzKV0pXSx7fSk00, new int[] {93}, null, null); - tmp[2] = new LiteralStackNode(13508, 2, cHJvZChsaXQoIlsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkxLDkxKV0pXSx7fSk00, new int[] {91}, null, null); - tmp[4] = new SeparatedListStackNode(13514, 4, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIlR5cGUiKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(13510, 0, "Type", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(13511, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(13512, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(13513, 3, "layouts_LAYOUTLIST", null, null)}, true, null, null); - tmp[3] = new NonTerminalStackNode(13509, 3, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(13507, 1, "layouts_LAYOUTLIST", null, null); - tmp[5] = new NonTerminalStackNode(13516, 5, "layouts_LAYOUTLIST", null, null); + tmp[0] = new NonTerminalStackNode(13443, 0, "QualifiedName", null, new ICompletionFilter[] {new StringFollowRequirement(new int[] {91})}); + tmp[6] = new LiteralStackNode(13454, 6, cHJvZChsaXQoIl0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkzLDkzKV0pXSx7fSk00, new int[] {93}, null, null); + tmp[2] = new LiteralStackNode(13445, 2, cHJvZChsaXQoIlsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkxLDkxKV0pXSx7fSk00, new int[] {91}, null, null); + tmp[4] = new SeparatedListStackNode(13451, 4, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIlR5cGUiKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(13447, 0, "Type", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(13448, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(13449, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(13450, 3, "layouts_LAYOUTLIST", null, null)}, true, null, null); + tmp[3] = new NonTerminalStackNode(13446, 3, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(13444, 1, "layouts_LAYOUTLIST", null, null); + tmp[5] = new NonTerminalStackNode(13453, 5, "layouts_LAYOUTLIST", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgicGFyYW1ldHJpYyIsc29ydCgiVXNlclR5cGUiKSksW2NvbmRpdGlvbmFsKGxhYmVsKCJuYW1lIixzb3J0KCJRdWFsaWZpZWROYW1lIikpLHtmb2xsb3cobGl0KCJbIikpfSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiWyIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgicGFyYW1ldGVycyIsXGl0ZXItc2Vwcyhzb3J0KCJUeXBlIiksW2xheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIiwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIildKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiXSIpXSx7fSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgibmFtZSIsc29ydCgiVXNlclR5cGUiKSksW2xhYmVsKCJuYW1lIixzb3J0KCJRdWFsaWZpZWROYW1lIikpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new NonTerminalStackNode(13520, 0, "QualifiedName", null, null); + tmp[0] = new NonTerminalStackNode(13457, 0, "QualifiedName", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgibmFtZSIsc29ydCgiVXNlclR5cGUiKSksW2xhYmVsKCJuYW1lIixzb3J0KCJRdWFsaWZpZWROYW1lIikpXSx7fSk00, tmp); } public static void init(ExpectBuilder builder){ @@ -13141,35 +13126,35 @@ protected static class Variant { protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJWYXJpYW50IikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgiXFxpdGVyLXNlcHMoc29ydChcIlZhcmlhbnRcIiksW2xpdChcInxcIildKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoXGl0ZXItc2Vwcyhzb3J0KCJWYXJpYW50IiksW2xheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoInwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIildKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[1] = new LiteralStackNode(13526, 1, cHJvZChsaXQoIlxcaXRlci1zZXBzKHNvcnQoXCJWYXJpYW50XCIpLFtsaXQoXCJ8XCIpXSkiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkyLDkyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NSw0NSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEyLDExMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODYsODYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NCw0NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTEsOTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTI0LDEyNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Myw5MyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {92,105,116,101,114,45,115,101,112,115,40,115,111,114,116,40,34,86,97,114,105,97,110,116,34,41,44,91,108,105,116,40,34,124,34,41,93,41}, null, null); - tmp[4] = new CharStackNode(13530, 4, new int[][]{{0,0}}, null, null); - tmp[0] = new CharStackNode(13525, 0, new int[][]{{0,0}}, null, null); - tmp[3] = new ListStackNode(13529, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(13528, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[2] = new LiteralStackNode(13527, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[1] = new LiteralStackNode(13463, 1, cHJvZChsaXQoIlxcaXRlci1zZXBzKHNvcnQoXCJWYXJpYW50XCIpLFtsaXQoXCJ8XCIpXSkiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkyLDkyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NSw0NSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEyLDExMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODYsODYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NCw0NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTEsOTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTI0LDEyNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Myw5MyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {92,105,116,101,114,45,115,101,112,115,40,115,111,114,116,40,34,86,97,114,105,97,110,116,34,41,44,91,108,105,116,40,34,124,34,41,93,41}, null, null); + tmp[4] = new CharStackNode(13467, 4, new int[][]{{0,0}}, null, null); + tmp[0] = new CharStackNode(13462, 0, new int[][]{{0,0}}, null, null); + tmp[3] = new ListStackNode(13466, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(13465, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[2] = new LiteralStackNode(13464, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJWYXJpYW50IikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgiXFxpdGVyLXNlcHMoc29ydChcIlZhcmlhbnRcIiksW2xpdChcInxcIildKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoXGl0ZXItc2Vwcyhzb3J0KCJWYXJpYW50IiksW2xheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoInwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIildKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgibkFyeUNvbnN0cnVjdG9yIixzb3J0KCJWYXJpYW50IikpLFtsYWJlbCgibmFtZSIsbGV4KCJOYW1lIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIigiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImFyZ3VtZW50cyIsXGl0ZXItc3Rhci1zZXBzKHNvcnQoIlR5cGVBcmciKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImtleXdvcmRBcmd1bWVudHMiLHNvcnQoIktleXdvcmRGb3JtYWxzIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIikiKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[9]; - tmp[4] = new SeparatedListStackNode(13547, 4, cmVndWxhcihcaXRlci1zdGFyLXNlcHMoc29ydCgiVHlwZUFyZyIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpXSkp, new NonTerminalStackNode(13543, 0, "TypeArg", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(13544, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(13545, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(13546, 3, "layouts_LAYOUTLIST", null, null)}, false, null, null); - tmp[6] = new NonTerminalStackNode(13550, 6, "KeywordFormals", null, null); - tmp[0] = new NonTerminalStackNode(13538, 0, "Name", null, null); - tmp[7] = new NonTerminalStackNode(13552, 7, "layouts_LAYOUTLIST", null, null); - tmp[8] = new LiteralStackNode(13553, 8, cHJvZChsaXQoIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {41}, null, null); - tmp[2] = new LiteralStackNode(13541, 2, cHJvZChsaXQoIigiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pXSx7fSk00, new int[] {40}, null, null); - tmp[3] = new NonTerminalStackNode(13542, 3, "layouts_LAYOUTLIST", null, null); - tmp[5] = new NonTerminalStackNode(13549, 5, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(13540, 1, "layouts_LAYOUTLIST", null, null); + tmp[4] = new SeparatedListStackNode(13484, 4, cmVndWxhcihcaXRlci1zdGFyLXNlcHMoc29ydCgiVHlwZUFyZyIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpXSkp, new NonTerminalStackNode(13480, 0, "TypeArg", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(13481, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(13482, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(13483, 3, "layouts_LAYOUTLIST", null, null)}, false, null, null); + tmp[6] = new NonTerminalStackNode(13487, 6, "KeywordFormals", null, null); + tmp[0] = new NonTerminalStackNode(13475, 0, "Name", null, null); + tmp[7] = new NonTerminalStackNode(13489, 7, "layouts_LAYOUTLIST", null, null); + tmp[8] = new LiteralStackNode(13490, 8, cHJvZChsaXQoIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {41}, null, null); + tmp[2] = new LiteralStackNode(13478, 2, cHJvZChsaXQoIigiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pXSx7fSk00, new int[] {40}, null, null); + tmp[3] = new NonTerminalStackNode(13479, 3, "layouts_LAYOUTLIST", null, null); + tmp[5] = new NonTerminalStackNode(13486, 5, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(13477, 1, "layouts_LAYOUTLIST", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgibkFyeUNvbnN0cnVjdG9yIixzb3J0KCJWYXJpYW50IikpLFtsYWJlbCgibmFtZSIsbGV4KCJOYW1lIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIigiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImFyZ3VtZW50cyIsXGl0ZXItc3Rhci1zZXBzKHNvcnQoIlR5cGVBcmciKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImtleXdvcmRBcmd1bWVudHMiLHNvcnQoIktleXdvcmRGb3JtYWxzIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIikiKV0se30p, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJWYXJpYW50IikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIlZhcmlhbnRcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKHNvcnQoIlZhcmlhbnQiKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[0] = new CharStackNode(13556, 0, new int[][]{{0,0}}, null, null); - tmp[4] = new CharStackNode(13561, 4, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(13558, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[3] = new ListStackNode(13560, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(13559, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[1] = new LiteralStackNode(13557, 1, cHJvZChsaXQoInNvcnQoXCJWYXJpYW50XCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDg2LDg2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,86,97,114,105,97,110,116,34,41}, null, null); + tmp[0] = new CharStackNode(13493, 0, new int[][]{{0,0}}, null, null); + tmp[4] = new CharStackNode(13498, 4, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(13495, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[3] = new ListStackNode(13497, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(13496, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[1] = new LiteralStackNode(13494, 1, cHJvZChsaXQoInNvcnQoXCJWYXJpYW50XCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDg2LDg2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,86,97,114,105,97,110,116,34,41}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJWYXJpYW50IikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIlZhcmlhbnRcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKHNvcnQoIlZhcmlhbnQiKSkpfSk00, tmp); } public static void init(ExpectBuilder builder){ @@ -13194,17 +13179,17 @@ protected static class FunctionModifiers { protected static final void _init_cHJvZChsYWJlbCgibW9kaWZpZXJsaXN0Iixzb3J0KCJGdW5jdGlvbk1vZGlmaWVycyIpKSxbbGFiZWwoIm1vZGlmaWVycyIsXGl0ZXItc3Rhci1zZXBzKHNvcnQoIkZ1bmN0aW9uTW9kaWZpZXIiKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpXSkpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new SeparatedListStackNode(13616, 0, cmVndWxhcihcaXRlci1zdGFyLXNlcHMoc29ydCgiRnVuY3Rpb25Nb2RpZmllciIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIildKSk00, new NonTerminalStackNode(13614, 0, "FunctionModifier", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(13615, 1, "layouts_LAYOUTLIST", null, null)}, false, null, null); + tmp[0] = new SeparatedListStackNode(13553, 0, cmVndWxhcihcaXRlci1zdGFyLXNlcHMoc29ydCgiRnVuY3Rpb25Nb2RpZmllciIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIildKSk00, new NonTerminalStackNode(13551, 0, "FunctionModifier", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(13552, 1, "layouts_LAYOUTLIST", null, null)}, false, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgibW9kaWZpZXJsaXN0Iixzb3J0KCJGdW5jdGlvbk1vZGlmaWVycyIpKSxbbGFiZWwoIm1vZGlmaWVycyIsXGl0ZXItc3Rhci1zZXBzKHNvcnQoIkZ1bmN0aW9uTW9kaWZpZXIiKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpXSkpXSx7fSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJGdW5jdGlvbk1vZGlmaWVycyIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJGdW5jdGlvbk1vZGlmaWVyc1wiKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoc29ydCgiRnVuY3Rpb25Nb2RpZmllcnMiKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[0] = new CharStackNode(13620, 0, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(13622, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[4] = new CharStackNode(13625, 4, new int[][]{{0,0}}, null, null); - tmp[1] = new LiteralStackNode(13621, 1, cHJvZChsaXQoInNvcnQoXCJGdW5jdGlvbk1vZGlmaWVyc1wiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg3MCw3MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE3LDExNyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTksOTkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDc3LDc3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDAsMTAwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDIsMTAyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {115,111,114,116,40,34,70,117,110,99,116,105,111,110,77,111,100,105,102,105,101,114,115,34,41}, null, null); - tmp[3] = new ListStackNode(13624, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(13623, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[0] = new CharStackNode(13557, 0, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(13559, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[4] = new CharStackNode(13562, 4, new int[][]{{0,0}}, null, null); + tmp[1] = new LiteralStackNode(13558, 1, cHJvZChsaXQoInNvcnQoXCJGdW5jdGlvbk1vZGlmaWVyc1wiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg3MCw3MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE3LDExNyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEwLDExMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTksOTkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDc3LDc3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDAsMTAwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDIsMTAyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {115,111,114,116,40,34,70,117,110,99,116,105,111,110,77,111,100,105,102,105,101,114,115,34,41}, null, null); + tmp[3] = new ListStackNode(13561, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(13560, 0, new int[][]{{48,57}}, null, null), true, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJGdW5jdGlvbk1vZGlmaWVycyIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJGdW5jdGlvbk1vZGlmaWVyc1wiKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoc29ydCgiRnVuY3Rpb25Nb2RpZmllcnMiKSkpfSk00, tmp); } public static void init(ExpectBuilder builder){ @@ -13227,46 +13212,46 @@ protected static class TimeZonePart { protected static final void _init_cHJvZChsZXgoIlRpbWVab25lUGFydCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoNDMsNDMpLHJhbmdlKDQ1LDQ1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw0OSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSldLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[3]; - tmp[2] = new CharStackNode(13776, 2, new int[][]{{48,57}}, null, null); - tmp[1] = new CharStackNode(13775, 1, new int[][]{{48,49}}, null, null); - tmp[0] = new CharStackNode(13774, 0, new int[][]{{43,43},{45,45}}, null, null); + tmp[2] = new CharStackNode(13713, 2, new int[][]{{48,57}}, null, null); + tmp[1] = new CharStackNode(13712, 1, new int[][]{{48,49}}, null, null); + tmp[0] = new CharStackNode(13711, 0, new int[][]{{43,43},{45,45}}, null, null); builder.addAlternative(RascalParser.cHJvZChsZXgoIlRpbWVab25lUGFydCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoNDMsNDMpLHJhbmdlKDQ1LDQ1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw0OSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSldLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsZXgoIlRpbWVab25lUGFydCIpLFtsaXQoIloiKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new LiteralStackNode(13778, 0, cHJvZChsaXQoIloiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkwLDkwKV0pXSx7fSk00, new int[] {90}, null, null); + tmp[0] = new LiteralStackNode(13715, 0, cHJvZChsaXQoIloiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkwLDkwKV0pXSx7fSk00, new int[] {90}, null, null); builder.addAlternative(RascalParser.cHJvZChsZXgoIlRpbWVab25lUGFydCIpLFtsaXQoIloiKV0se30p, tmp); } protected static final void _init_cHJvZChsZXgoIlRpbWVab25lUGFydCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoNDMsNDMpLHJhbmdlKDQ1LDQ1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw0OSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDUzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[4] = new CharStackNode(13784, 4, new int[][]{{48,57}}, null, null); - tmp[2] = new CharStackNode(13782, 2, new int[][]{{48,57}}, null, null); - tmp[0] = new CharStackNode(13780, 0, new int[][]{{43,43},{45,45}}, null, null); - tmp[3] = new CharStackNode(13783, 3, new int[][]{{48,53}}, null, null); - tmp[1] = new CharStackNode(13781, 1, new int[][]{{48,49}}, null, null); + tmp[4] = new CharStackNode(13721, 4, new int[][]{{48,57}}, null, null); + tmp[2] = new CharStackNode(13719, 2, new int[][]{{48,57}}, null, null); + tmp[0] = new CharStackNode(13717, 0, new int[][]{{43,43},{45,45}}, null, null); + tmp[3] = new CharStackNode(13720, 3, new int[][]{{48,53}}, null, null); + tmp[1] = new CharStackNode(13718, 1, new int[][]{{48,49}}, null, null); builder.addAlternative(RascalParser.cHJvZChsZXgoIlRpbWVab25lUGFydCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoNDMsNDMpLHJhbmdlKDQ1LDQ1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw0OSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDUzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKV0se30p, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIlRpbWVab25lUGFydCIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJUaW1lWm9uZVBhcnRcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKGxleCgiVGltZVpvbmVQYXJ0IikpKX0p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[0] = new CharStackNode(13787, 0, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(13789, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[1] = new LiteralStackNode(13788, 1, cHJvZChsaXQoInNvcnQoXCJUaW1lWm9uZVBhcnRcIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODQsODQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOSwxMDkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDkwLDkwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4MCw4MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,84,105,109,101,90,111,110,101,80,97,114,116,34,41}, null, null); - tmp[3] = new ListStackNode(13791, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(13790, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[4] = new CharStackNode(13792, 4, new int[][]{{0,0}}, null, null); + tmp[0] = new CharStackNode(13724, 0, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(13726, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[1] = new LiteralStackNode(13725, 1, cHJvZChsaXQoInNvcnQoXCJUaW1lWm9uZVBhcnRcIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODQsODQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOSwxMDkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDkwLDkwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4MCw4MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,84,105,109,101,90,111,110,101,80,97,114,116,34,41}, null, null); + tmp[3] = new ListStackNode(13728, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(13727, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[4] = new CharStackNode(13729, 4, new int[][]{{0,0}}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIlRpbWVab25lUGFydCIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJUaW1lWm9uZVBhcnRcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKGxleCgiVGltZVpvbmVQYXJ0IikpKX0p, tmp); } protected static final void _init_cHJvZChsZXgoIlRpbWVab25lUGFydCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoNDMsNDMpLHJhbmdlKDQ1LDQ1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw0OSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSksbGl0KCI6IiksXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDUzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[6]; - tmp[4] = new CharStackNode(13799, 4, new int[][]{{48,53}}, null, null); - tmp[2] = new CharStackNode(13797, 2, new int[][]{{48,57}}, null, null); - tmp[3] = new LiteralStackNode(13798, 3, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[0] = new CharStackNode(13795, 0, new int[][]{{43,43},{45,45}}, null, null); - tmp[5] = new CharStackNode(13800, 5, new int[][]{{48,57}}, null, null); - tmp[1] = new CharStackNode(13796, 1, new int[][]{{48,49}}, null, null); + tmp[4] = new CharStackNode(13736, 4, new int[][]{{48,53}}, null, null); + tmp[2] = new CharStackNode(13734, 2, new int[][]{{48,57}}, null, null); + tmp[3] = new LiteralStackNode(13735, 3, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[0] = new CharStackNode(13732, 0, new int[][]{{43,43},{45,45}}, null, null); + tmp[5] = new CharStackNode(13737, 5, new int[][]{{48,57}}, null, null); + tmp[1] = new CharStackNode(13733, 1, new int[][]{{48,49}}, null, null); builder.addAlternative(RascalParser.cHJvZChsZXgoIlRpbWVab25lUGFydCIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoNDMsNDMpLHJhbmdlKDQ1LDQ1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw0OSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSksbGl0KCI6IiksXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDUzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKV0se30p, tmp); } public static void init(ExpectBuilder builder){ @@ -13295,19 +13280,19 @@ protected static class PostStringChars { protected static final void _init_cHJvZChsZXgoIlBvc3RTdHJpbmdDaGFycyIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoNjIsNjIpXSksXGl0ZXItc3RhcihsZXgoIlN0cmluZ0NoYXJhY3RlciIpKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSldLHt0YWcoImNhdGVnb3J5Iigic3RyaW5nIikpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[3]; - tmp[1] = new ListStackNode(13901, 1, cmVndWxhcihcaXRlci1zdGFyKGxleCgiU3RyaW5nQ2hhcmFjdGVyIikpKQ0000, new NonTerminalStackNode(13900, 0, "StringCharacter", null, null), false, null, null); - tmp[2] = new CharStackNode(13902, 2, new int[][]{{34,34}}, null, null); - tmp[0] = new CharStackNode(13899, 0, new int[][]{{62,62}}, null, null); + tmp[1] = new ListStackNode(13838, 1, cmVndWxhcihcaXRlci1zdGFyKGxleCgiU3RyaW5nQ2hhcmFjdGVyIikpKQ0000, new NonTerminalStackNode(13837, 0, "StringCharacter", null, null), false, null, null); + tmp[2] = new CharStackNode(13839, 2, new int[][]{{34,34}}, null, null); + tmp[0] = new CharStackNode(13836, 0, new int[][]{{62,62}}, null, null); builder.addAlternative(RascalParser.cHJvZChsZXgoIlBvc3RTdHJpbmdDaGFycyIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoNjIsNjIpXSksXGl0ZXItc3RhcihsZXgoIlN0cmluZ0NoYXJhY3RlciIpKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSldLHt0YWcoImNhdGVnb3J5Iigic3RyaW5nIikpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIlBvc3RTdHJpbmdDaGFycyIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJQb3N0U3RyaW5nQ2hhcnNcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKGxleCgiUG9zdFN0cmluZ0NoYXJzIikpKX0p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[3] = new ListStackNode(13909, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(13908, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[1] = new LiteralStackNode(13906, 1, cHJvZChsaXQoInNvcnQoXCJQb3N0U3RyaW5nQ2hhcnNcIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODAsODApXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDgzLDgzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDMsMTAzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg2Nyw2NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA0LDEwNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,80,111,115,116,83,116,114,105,110,103,67,104,97,114,115,34,41}, null, null); - tmp[0] = new CharStackNode(13905, 0, new int[][]{{0,0}}, null, null); - tmp[4] = new CharStackNode(13910, 4, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(13907, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[3] = new ListStackNode(13846, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(13845, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[1] = new LiteralStackNode(13843, 1, cHJvZChsaXQoInNvcnQoXCJQb3N0U3RyaW5nQ2hhcnNcIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODAsODApXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDgzLDgzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDMsMTAzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg2Nyw2NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA0LDEwNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,80,111,115,116,83,116,114,105,110,103,67,104,97,114,115,34,41}, null, null); + tmp[0] = new CharStackNode(13842, 0, new int[][]{{0,0}}, null, null); + tmp[4] = new CharStackNode(13847, 4, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(13844, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIlBvc3RTdHJpbmdDaGFycyIpKSxbXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKSxsaXQoInNvcnQoXCJQb3N0U3RyaW5nQ2hhcnNcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKGxleCgiUG9zdFN0cmluZ0NoYXJzIikpKX0p, tmp); } public static void init(ExpectBuilder builder){ @@ -13330,19 +13315,19 @@ protected static class HexIntegerLiteral { protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIkhleEludGVnZXJMaXRlcmFsIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIkhleEludGVnZXJMaXRlcmFsXCIpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihsZXgoIkhleEludGVnZXJMaXRlcmFsIikpKX0p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[1] = new LiteralStackNode(13916, 1, cHJvZChsaXQoInNvcnQoXCJIZXhJbnRlZ2VyTGl0ZXJhbFwiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg3Miw3MildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTIwLDEyMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNzMsNzMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMywxMDMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDc2LDc2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {115,111,114,116,40,34,72,101,120,73,110,116,101,103,101,114,76,105,116,101,114,97,108,34,41}, null, null); - tmp[0] = new CharStackNode(13915, 0, new int[][]{{0,0}}, null, null); - tmp[4] = new CharStackNode(13920, 4, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(13917, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[3] = new ListStackNode(13919, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(13918, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[1] = new LiteralStackNode(13853, 1, cHJvZChsaXQoInNvcnQoXCJIZXhJbnRlZ2VyTGl0ZXJhbFwiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg3Miw3MildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTIwLDEyMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNzMsNzMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMywxMDMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDc2LDc2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {115,111,114,116,40,34,72,101,120,73,110,116,101,103,101,114,76,105,116,101,114,97,108,34,41}, null, null); + tmp[0] = new CharStackNode(13852, 0, new int[][]{{0,0}}, null, null); + tmp[4] = new CharStackNode(13857, 4, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(13854, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[3] = new ListStackNode(13856, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(13855, 0, new int[][]{{48,57}}, null, null), true, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIkhleEludGVnZXJMaXRlcmFsIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIkhleEludGVnZXJMaXRlcmFsXCIpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihsZXgoIkhleEludGVnZXJMaXRlcmFsIikpKX0p, tmp); } protected static final void _init_cHJvZChsZXgoIkhleEludGVnZXJMaXRlcmFsIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg0OCw0OCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODgsODgpLHJhbmdlKDEyMCwxMjApXSksY29uZGl0aW9uYWwoaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpLHJhbmdlKDY1LDcwKSxyYW5nZSg5NywxMDIpXSkpLHtcbm90LWZvbGxvdyhcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpLHJhbmdlKDY1LDkwKSxyYW5nZSg5NSw5NSkscmFuZ2UoOTcsMTIyKV0pKX0pXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[3]; - tmp[0] = new CharStackNode(13923, 0, new int[][]{{48,48}}, null, null); - tmp[1] = new CharStackNode(13924, 1, new int[][]{{88,88},{120,120}}, null, null); - tmp[2] = new ListStackNode(13928, 2, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NykscmFuZ2UoNjUsNzApLHJhbmdlKDk3LDEwMildKSkp, new CharStackNode(13925, 0, new int[][]{{48,57},{65,70},{97,102}}, null, null), true, null, new ICompletionFilter[] {new CharFollowRestriction(new int[][]{{48,57},{65,90},{95,95},{97,122}})}); + tmp[0] = new CharStackNode(13860, 0, new int[][]{{48,48}}, null, null); + tmp[1] = new CharStackNode(13861, 1, new int[][]{{88,88},{120,120}}, null, null); + tmp[2] = new ListStackNode(13865, 2, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NykscmFuZ2UoNjUsNzApLHJhbmdlKDk3LDEwMildKSkp, new CharStackNode(13862, 0, new int[][]{{48,57},{65,70},{97,102}}, null, null), true, null, new ICompletionFilter[] {new CharFollowRestriction(new int[][]{{48,57},{65,90},{95,95},{97,122}})}); builder.addAlternative(RascalParser.cHJvZChsZXgoIkhleEludGVnZXJMaXRlcmFsIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg0OCw0OCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODgsODgpLHJhbmdlKDEyMCwxMjApXSksY29uZGl0aW9uYWwoaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpLHJhbmdlKDY1LDcwKSxyYW5nZSg5NywxMDIpXSkpLHtcbm90LWZvbGxvdyhcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpLHJhbmdlKDY1LDkwKSxyYW5nZSg5NSw5NSkscmFuZ2UoOTcsMTIyKV0pKX0pXSx7fSk00, tmp); } public static void init(ExpectBuilder builder){ @@ -13365,25 +13350,25 @@ protected static class KeywordArguments_W3NvcnQoIkV4cHJlc3Npb24iKV000 { protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixccGFyYW1ldGVyaXplZC1zb3J0KCJLZXl3b3JkQXJndW1lbnRzIixbc29ydCgiRXhwcmVzc2lvbiIpXSkpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgiXFxwYXJhbWV0ZXJpemVkLXNvcnQoXCJLZXl3b3JkQXJndW1lbnRzXCIsW3NvcnQoXCJFeHByZXNzaW9uXCIpXSkiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKFxwYXJhbWV0ZXJpemVkLXNvcnQoIktleXdvcmRBcmd1bWVudHMiLFtzb3J0KCJFeHByZXNzaW9uIildKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[3] = new ListStackNode(13938, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(13937, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[0] = new CharStackNode(13934, 0, new int[][]{{0,0}}, null, null); - tmp[4] = new CharStackNode(13939, 4, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(13936, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[1] = new LiteralStackNode(13935, 1, cHJvZChsaXQoIlxccGFyYW1ldGVyaXplZC1zb3J0KFwiS2V5d29yZEFyZ3VtZW50c1wiLFtzb3J0KFwiRXhwcmVzc2lvblwiKV0pIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg5Miw5MildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEyLDExMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDksMTA5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMjIsMTIyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDAsMTAwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NSw0NSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg3NSw3NSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTIxLDEyMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE5LDExOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAwLDEwMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNjUsNjUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMywxMDMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNywxMTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOSwxMDkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NCw0NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTEsOTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNjksNjkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEyMCwxMjApXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTMsOTMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {92,112,97,114,97,109,101,116,101,114,105,122,101,100,45,115,111,114,116,40,34,75,101,121,119,111,114,100,65,114,103,117,109,101,110,116,115,34,44,91,115,111,114,116,40,34,69,120,112,114,101,115,115,105,111,110,34,41,93,41}, null, null); + tmp[3] = new ListStackNode(13875, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(13874, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[0] = new CharStackNode(13871, 0, new int[][]{{0,0}}, null, null); + tmp[4] = new CharStackNode(13876, 4, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(13873, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[1] = new LiteralStackNode(13872, 1, cHJvZChsaXQoIlxccGFyYW1ldGVyaXplZC1zb3J0KFwiS2V5d29yZEFyZ3VtZW50c1wiLFtzb3J0KFwiRXhwcmVzc2lvblwiKV0pIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg5Miw5MildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEyLDExMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDksMTA5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMjIsMTIyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDAsMTAwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NSw0NSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg3NSw3NSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTIxLDEyMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE5LDExOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAwLDEwMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNjUsNjUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMywxMDMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNywxMTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOSwxMDkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NCw0NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTEsOTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNjksNjkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEyMCwxMjApXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTMsOTMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {92,112,97,114,97,109,101,116,101,114,105,122,101,100,45,115,111,114,116,40,34,75,101,121,119,111,114,100,65,114,103,117,109,101,110,116,115,34,44,91,115,111,114,116,40,34,69,120,112,114,101,115,115,105,111,110,34,41,93,41}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixccGFyYW1ldGVyaXplZC1zb3J0KCJLZXl3b3JkQXJndW1lbnRzIixbc29ydCgiRXhwcmVzc2lvbiIpXSkpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgiXFxwYXJhbWV0ZXJpemVkLXNvcnQoXCJLZXl3b3JkQXJndW1lbnRzXCIsW3NvcnQoXCJFeHByZXNzaW9uXCIpXSkiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKFxwYXJhbWV0ZXJpemVkLXNvcnQoIktleXdvcmRBcmd1bWVudHMiLFtzb3J0KCJFeHByZXNzaW9uIildKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgibm9uZSIsXHBhcmFtZXRlcml6ZWQtc29ydCgiS2V5d29yZEFyZ3VtZW50cyIsW3NvcnQoIkV4cHJlc3Npb24iKV0pKSxbXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new EpsilonStackNode(13944, 0); + tmp[0] = new EpsilonStackNode(13881, 0); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgibm9uZSIsXHBhcmFtZXRlcml6ZWQtc29ydCgiS2V5d29yZEFyZ3VtZW50cyIsW3NvcnQoIkV4cHJlc3Npb24iKV0pKSxbXSx7fSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiZGVmYXVsdCIsXHBhcmFtZXRlcml6ZWQtc29ydCgiS2V5d29yZEFyZ3VtZW50cyIsW3NvcnQoIkV4cHJlc3Npb24iKV0pKSxbbGFiZWwoIm9wdGlvbmFsQ29tbWEiLGxleCgiT3B0aW9uYWxDb21tYSIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksY29uZGl0aW9uYWwobGFiZWwoImtleXdvcmRBcmd1bWVudExpc3QiLFxpdGVyLXNlcHMoXHBhcmFtZXRlcml6ZWQtc29ydCgiS2V5d29yZEFyZ3VtZW50Iixbc29ydCgiRXhwcmVzc2lvbiIpXSksW2xheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIiwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIildKSkse3ByZWNlZGUoXGNoYXItY2xhc3MoW3JhbmdlKDksMTApLHJhbmdlKDMyLDMyKSxyYW5nZSg0MCw0MCkscmFuZ2UoNDQsNDQpXSkpfSldLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[3]; - tmp[1] = new NonTerminalStackNode(13950, 1, "layouts_LAYOUTLIST", null, null); - tmp[2] = new SeparatedListStackNode(13959, 2, cmVndWxhcihcaXRlci1zZXBzKFxwYXJhbWV0ZXJpemVkLXNvcnQoIktleXdvcmRBcmd1bWVudCIsW3NvcnQoIkV4cHJlc3Npb24iKV0pLFtsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpXSkp, new NonTerminalStackNode(13952, 0, "KeywordArgument_W3NvcnQoIkV4cHJlc3Npb24iKV000", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(13953, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(13954, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(13955, 3, "layouts_LAYOUTLIST", null, null)}, true, new IEnterFilter[] {new CharPrecedeRequirement(new int[][]{{9,10},{32,32},{40,40},{44,44}})}, null); - tmp[0] = new NonTerminalStackNode(13948, 0, "OptionalComma", null, null); + tmp[1] = new NonTerminalStackNode(13887, 1, "layouts_LAYOUTLIST", null, null); + tmp[2] = new SeparatedListStackNode(13896, 2, cmVndWxhcihcaXRlci1zZXBzKFxwYXJhbWV0ZXJpemVkLXNvcnQoIktleXdvcmRBcmd1bWVudCIsW3NvcnQoIkV4cHJlc3Npb24iKV0pLFtsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpXSkp, new NonTerminalStackNode(13889, 0, "KeywordArgument_W3NvcnQoIkV4cHJlc3Npb24iKV000", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(13890, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(13891, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(13892, 3, "layouts_LAYOUTLIST", null, null)}, true, new IEnterFilter[] {new CharPrecedeRequirement(new int[][]{{9,10},{32,32},{40,40},{44,44}})}, null); + tmp[0] = new NonTerminalStackNode(13885, 0, "OptionalComma", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiZGVmYXVsdCIsXHBhcmFtZXRlcml6ZWQtc29ydCgiS2V5d29yZEFyZ3VtZW50cyIsW3NvcnQoIkV4cHJlc3Npb24iKV0pKSxbbGFiZWwoIm9wdGlvbmFsQ29tbWEiLGxleCgiT3B0aW9uYWxDb21tYSIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksY29uZGl0aW9uYWwobGFiZWwoImtleXdvcmRBcmd1bWVudExpc3QiLFxpdGVyLXNlcHMoXHBhcmFtZXRlcml6ZWQtc29ydCgiS2V5d29yZEFyZ3VtZW50Iixbc29ydCgiRXhwcmVzc2lvbiIpXSksW2xheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIiwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIildKSkse3ByZWNlZGUoXGNoYXItY2xhc3MoW3JhbmdlKDksMTApLHJhbmdlKDMyLDMyKSxyYW5nZSg0MCw0MCkscmFuZ2UoNDQsNDQpXSkpfSldLHt9KQ0000, tmp); } public static void init(ExpectBuilder builder){ @@ -13408,17 +13393,17 @@ protected static class Formals { protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJGb3JtYWxzIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIkZvcm1hbHNcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKHNvcnQoIkZvcm1hbHMiKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[1] = new LiteralStackNode(13964, 1, cHJvZChsaXQoInNvcnQoXCJGb3JtYWxzXCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDcwLDcwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDksMTA5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {115,111,114,116,40,34,70,111,114,109,97,108,115,34,41}, null, null); - tmp[3] = new ListStackNode(13967, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(13966, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[0] = new CharStackNode(13963, 0, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(13965, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[4] = new CharStackNode(13968, 4, new int[][]{{0,0}}, null, null); + tmp[1] = new LiteralStackNode(13901, 1, cHJvZChsaXQoInNvcnQoXCJGb3JtYWxzXCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDcwLDcwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDksMTA5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {115,111,114,116,40,34,70,111,114,109,97,108,115,34,41}, null, null); + tmp[3] = new ListStackNode(13904, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(13903, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[0] = new CharStackNode(13900, 0, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(13902, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[4] = new CharStackNode(13905, 4, new int[][]{{0,0}}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJGb3JtYWxzIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIkZvcm1hbHNcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKHNvcnQoIkZvcm1hbHMiKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiZGVmYXVsdCIsc29ydCgiRm9ybWFscyIpKSxbbGFiZWwoImZvcm1hbHMiLFxpdGVyLXN0YXItc2Vwcyhzb3J0KCJQYXR0ZXJuIiksW2xheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIiwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIildKSldLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new SeparatedListStackNode(13976, 0, cmVndWxhcihcaXRlci1zdGFyLXNlcHMoc29ydCgiUGF0dGVybiIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpXSkp, new NonTerminalStackNode(13972, 0, "Pattern", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(13973, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(13974, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(13975, 3, "layouts_LAYOUTLIST", null, null)}, false, null, null); + tmp[0] = new SeparatedListStackNode(13913, 0, cmVndWxhcihcaXRlci1zdGFyLXNlcHMoc29ydCgiUGF0dGVybiIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpXSkp, new NonTerminalStackNode(13909, 0, "Pattern", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(13910, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(13911, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(13912, 3, "layouts_LAYOUTLIST", null, null)}, false, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiZGVmYXVsdCIsc29ydCgiRm9ybWFscyIpKSxbbGFiZWwoImZvcm1hbHMiLFxpdGVyLXN0YXItc2Vwcyhzb3J0KCJQYXR0ZXJuIiksW2xheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIiwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIildKSldLHt9KQ0000, tmp); } public static void init(ExpectBuilder builder){ @@ -13441,57 +13426,57 @@ protected static class Comprehension { protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJDb21wcmVoZW5zaW9uIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIkNvbXByZWhlbnNpb25cIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKHNvcnQoIkNvbXByZWhlbnNpb24iKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[2] = new LiteralStackNode(13994, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[0] = new CharStackNode(13992, 0, new int[][]{{0,0}}, null, null); - tmp[3] = new ListStackNode(13996, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(13995, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[1] = new LiteralStackNode(13993, 1, cHJvZChsaXQoInNvcnQoXCJDb21wcmVoZW5zaW9uXCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDY3LDY3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDksMTA5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTIsMTEyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDQsMTA0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {115,111,114,116,40,34,67,111,109,112,114,101,104,101,110,115,105,111,110,34,41}, null, null); - tmp[4] = new CharStackNode(13997, 4, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(13931, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[0] = new CharStackNode(13929, 0, new int[][]{{0,0}}, null, null); + tmp[3] = new ListStackNode(13933, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(13932, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[1] = new LiteralStackNode(13930, 1, cHJvZChsaXQoInNvcnQoXCJDb21wcmVoZW5zaW9uXCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDY3LDY3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDksMTA5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTIsMTEyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDQsMTA0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTAsMTEwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {115,111,114,116,40,34,67,111,109,112,114,101,104,101,110,115,105,111,110,34,41}, null, null); + tmp[4] = new CharStackNode(13934, 4, new int[][]{{0,0}}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJDb21wcmVoZW5zaW9uIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIkNvbXByZWhlbnNpb25cIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKHNvcnQoIkNvbXByZWhlbnNpb24iKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgic2V0Iixzb3J0KCJDb21wcmVoZW5zaW9uIikpLFtsaXQoInsiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInJlc3VsdHMiLFxpdGVyLXNlcHMoc29ydCgiRXhwcmVzc2lvbiIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpXSkpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoInwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImdlbmVyYXRvcnMiLFxpdGVyLXNlcHMoc29ydCgiRXhwcmVzc2lvbiIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpXSkpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIn0iKV0se3RhZygiYnJlYWthYmxlIigie3Jlc3VsdHMsZ2VuZXJhdG9yc30iKSl9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[9]; - tmp[3] = new NonTerminalStackNode(14009, 3, "layouts_LAYOUTLIST", null, null); - tmp[7] = new NonTerminalStackNode(14018, 7, "layouts_LAYOUTLIST", null, null); - tmp[0] = new LiteralStackNode(14001, 0, cHJvZChsaXQoInsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyMywxMjMpXSldLHt9KQ0000, new int[] {123}, null, null); - tmp[4] = new LiteralStackNode(14010, 4, cHJvZChsaXQoInwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyNCwxMjQpXSldLHt9KQ0000, new int[] {124}, null, null); - tmp[2] = new SeparatedListStackNode(14007, 2, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIkV4cHJlc3Npb24iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(14003, 0, "Expression", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(14004, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(14005, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(14006, 3, "layouts_LAYOUTLIST", null, null)}, true, null, null); - tmp[8] = new LiteralStackNode(14019, 8, cHJvZChsaXQoIn0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyNSwxMjUpXSldLHt9KQ0000, new int[] {125}, null, null); - tmp[1] = new NonTerminalStackNode(14002, 1, "layouts_LAYOUTLIST", null, null); - tmp[5] = new NonTerminalStackNode(14011, 5, "layouts_LAYOUTLIST", null, null); - tmp[6] = new SeparatedListStackNode(14016, 6, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIkV4cHJlc3Npb24iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(14012, 0, "Expression", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(14013, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(14014, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(14015, 3, "layouts_LAYOUTLIST", null, null)}, true, null, null); + tmp[3] = new NonTerminalStackNode(13946, 3, "layouts_LAYOUTLIST", null, null); + tmp[7] = new NonTerminalStackNode(13955, 7, "layouts_LAYOUTLIST", null, null); + tmp[0] = new LiteralStackNode(13938, 0, cHJvZChsaXQoInsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyMywxMjMpXSldLHt9KQ0000, new int[] {123}, null, null); + tmp[4] = new LiteralStackNode(13947, 4, cHJvZChsaXQoInwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyNCwxMjQpXSldLHt9KQ0000, new int[] {124}, null, null); + tmp[2] = new SeparatedListStackNode(13944, 2, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIkV4cHJlc3Npb24iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(13940, 0, "Expression", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(13941, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(13942, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(13943, 3, "layouts_LAYOUTLIST", null, null)}, true, null, null); + tmp[8] = new LiteralStackNode(13956, 8, cHJvZChsaXQoIn0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyNSwxMjUpXSldLHt9KQ0000, new int[] {125}, null, null); + tmp[1] = new NonTerminalStackNode(13939, 1, "layouts_LAYOUTLIST", null, null); + tmp[5] = new NonTerminalStackNode(13948, 5, "layouts_LAYOUTLIST", null, null); + tmp[6] = new SeparatedListStackNode(13953, 6, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIkV4cHJlc3Npb24iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(13949, 0, "Expression", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(13950, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(13951, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(13952, 3, "layouts_LAYOUTLIST", null, null)}, true, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgic2V0Iixzb3J0KCJDb21wcmVoZW5zaW9uIikpLFtsaXQoInsiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInJlc3VsdHMiLFxpdGVyLXNlcHMoc29ydCgiRXhwcmVzc2lvbiIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpXSkpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoInwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImdlbmVyYXRvcnMiLFxpdGVyLXNlcHMoc29ydCgiRXhwcmVzc2lvbiIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpXSkpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIn0iKV0se3RhZygiYnJlYWthYmxlIigie3Jlc3VsdHMsZ2VuZXJhdG9yc30iKSl9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgibGlzdCIsc29ydCgiQ29tcHJlaGVuc2lvbiIpKSxbbGl0KCJbIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJyZXN1bHRzIixcaXRlci1zZXBzKHNvcnQoIkV4cHJlc3Npb24iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJ8IiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJnZW5lcmF0b3JzIixcaXRlci1zZXBzKHNvcnQoIkV4cHJlc3Npb24iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJdIildLHt0YWcoImJyZWFrYWJsZSIoIntyZXN1bHRzLGdlbmVyYXRvcnN9IikpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[9]; - tmp[2] = new SeparatedListStackNode(14028, 2, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIkV4cHJlc3Npb24iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(14024, 0, "Expression", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(14025, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(14026, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(14027, 3, "layouts_LAYOUTLIST", null, null)}, true, null, null); - tmp[4] = new LiteralStackNode(14031, 4, cHJvZChsaXQoInwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyNCwxMjQpXSldLHt9KQ0000, new int[] {124}, null, null); - tmp[0] = new LiteralStackNode(14022, 0, cHJvZChsaXQoIlsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkxLDkxKV0pXSx7fSk00, new int[] {91}, null, null); - tmp[3] = new NonTerminalStackNode(14030, 3, "layouts_LAYOUTLIST", null, null); - tmp[6] = new SeparatedListStackNode(14037, 6, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIkV4cHJlc3Npb24iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(14033, 0, "Expression", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(14034, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(14035, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(14036, 3, "layouts_LAYOUTLIST", null, null)}, true, null, null); - tmp[7] = new NonTerminalStackNode(14039, 7, "layouts_LAYOUTLIST", null, null); - tmp[5] = new NonTerminalStackNode(14032, 5, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(14023, 1, "layouts_LAYOUTLIST", null, null); - tmp[8] = new LiteralStackNode(14040, 8, cHJvZChsaXQoIl0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkzLDkzKV0pXSx7fSk00, new int[] {93}, null, null); + tmp[2] = new SeparatedListStackNode(13965, 2, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIkV4cHJlc3Npb24iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(13961, 0, "Expression", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(13962, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(13963, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(13964, 3, "layouts_LAYOUTLIST", null, null)}, true, null, null); + tmp[4] = new LiteralStackNode(13968, 4, cHJvZChsaXQoInwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyNCwxMjQpXSldLHt9KQ0000, new int[] {124}, null, null); + tmp[0] = new LiteralStackNode(13959, 0, cHJvZChsaXQoIlsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkxLDkxKV0pXSx7fSk00, new int[] {91}, null, null); + tmp[3] = new NonTerminalStackNode(13967, 3, "layouts_LAYOUTLIST", null, null); + tmp[6] = new SeparatedListStackNode(13974, 6, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIkV4cHJlc3Npb24iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(13970, 0, "Expression", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(13971, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(13972, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(13973, 3, "layouts_LAYOUTLIST", null, null)}, true, null, null); + tmp[7] = new NonTerminalStackNode(13976, 7, "layouts_LAYOUTLIST", null, null); + tmp[5] = new NonTerminalStackNode(13969, 5, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(13960, 1, "layouts_LAYOUTLIST", null, null); + tmp[8] = new LiteralStackNode(13977, 8, cHJvZChsaXQoIl0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkzLDkzKV0pXSx7fSk00, new int[] {93}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgibGlzdCIsc29ydCgiQ29tcHJlaGVuc2lvbiIpKSxbbGl0KCJbIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJyZXN1bHRzIixcaXRlci1zZXBzKHNvcnQoIkV4cHJlc3Npb24iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJ8IiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJnZW5lcmF0b3JzIixcaXRlci1zZXBzKHNvcnQoIkV4cHJlc3Npb24iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJdIildLHt0YWcoImJyZWFrYWJsZSIoIntyZXN1bHRzLGdlbmVyYXRvcnN9IikpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgibWFwIixzb3J0KCJDb21wcmVoZW5zaW9uIikpLFtsaXQoIigiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImZyb20iLHNvcnQoIkV4cHJlc3Npb24iKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiOiIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgidG8iLHNvcnQoIkV4cHJlc3Npb24iKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgifCIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgiZ2VuZXJhdG9ycyIsXGl0ZXItc2Vwcyhzb3J0KCJFeHByZXNzaW9uIiksW2xheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIiwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIildKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiKSIpXSx7dGFnKCJicmVha2FibGUiKCJ7ZnJvbSx0byxnZW5lcmF0b3JzfSIpKX0p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[13]; - tmp[2] = new NonTerminalStackNode(14045, 2, "Expression", null, null); - tmp[12] = new LiteralStackNode(14062, 12, cHJvZChsaXQoIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {41}, null, null); - tmp[9] = new NonTerminalStackNode(14054, 9, "layouts_LAYOUTLIST", null, null); - tmp[8] = new LiteralStackNode(14053, 8, cHJvZChsaXQoInwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyNCwxMjQpXSldLHt9KQ0000, new int[] {124}, null, null); - tmp[6] = new NonTerminalStackNode(14050, 6, "Expression", null, null); - tmp[4] = new LiteralStackNode(14048, 4, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[10] = new SeparatedListStackNode(14059, 10, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIkV4cHJlc3Npb24iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(14055, 0, "Expression", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(14056, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(14057, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(14058, 3, "layouts_LAYOUTLIST", null, null)}, true, null, null); - tmp[0] = new LiteralStackNode(14043, 0, cHJvZChsaXQoIigiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pXSx7fSk00, new int[] {40}, null, null); - tmp[5] = new NonTerminalStackNode(14049, 5, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(14044, 1, "layouts_LAYOUTLIST", null, null); - tmp[7] = new NonTerminalStackNode(14052, 7, "layouts_LAYOUTLIST", null, null); - tmp[11] = new NonTerminalStackNode(14061, 11, "layouts_LAYOUTLIST", null, null); - tmp[3] = new NonTerminalStackNode(14047, 3, "layouts_LAYOUTLIST", null, null); + tmp[2] = new NonTerminalStackNode(13982, 2, "Expression", null, null); + tmp[12] = new LiteralStackNode(13999, 12, cHJvZChsaXQoIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {41}, null, null); + tmp[9] = new NonTerminalStackNode(13991, 9, "layouts_LAYOUTLIST", null, null); + tmp[8] = new LiteralStackNode(13990, 8, cHJvZChsaXQoInwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyNCwxMjQpXSldLHt9KQ0000, new int[] {124}, null, null); + tmp[6] = new NonTerminalStackNode(13987, 6, "Expression", null, null); + tmp[4] = new LiteralStackNode(13985, 4, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[10] = new SeparatedListStackNode(13996, 10, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIkV4cHJlc3Npb24iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiLCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(13992, 0, "Expression", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(13993, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(13994, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(13995, 3, "layouts_LAYOUTLIST", null, null)}, true, null, null); + tmp[0] = new LiteralStackNode(13980, 0, cHJvZChsaXQoIigiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pXSx7fSk00, new int[] {40}, null, null); + tmp[5] = new NonTerminalStackNode(13986, 5, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(13981, 1, "layouts_LAYOUTLIST", null, null); + tmp[7] = new NonTerminalStackNode(13989, 7, "layouts_LAYOUTLIST", null, null); + tmp[11] = new NonTerminalStackNode(13998, 11, "layouts_LAYOUTLIST", null, null); + tmp[3] = new NonTerminalStackNode(13984, 3, "layouts_LAYOUTLIST", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgibWFwIixzb3J0KCJDb21wcmVoZW5zaW9uIikpLFtsaXQoIigiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImZyb20iLHNvcnQoIkV4cHJlc3Npb24iKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiOiIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgidG8iLHNvcnQoIkV4cHJlc3Npb24iKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgifCIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgiZ2VuZXJhdG9ycyIsXGl0ZXItc2Vwcyhzb3J0KCJFeHByZXNzaW9uIiksW2xheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIiwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIildKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiKSIpXSx7dGFnKCJicmVha2FibGUiKCJ7ZnJvbSx0byxnZW5lcmF0b3JzfSIpKX0p, tmp); } public static void init(ExpectBuilder builder){ @@ -13518,31 +13503,31 @@ protected static class Mapping_W3NvcnQoIkV4cHJlc3Npb24iKV000 { protected static final void _init_cHJvZChsYWJlbCgiZGVmYXVsdCIsXHBhcmFtZXRlcml6ZWQtc29ydCgiTWFwcGluZyIsW3NvcnQoIkV4cHJlc3Npb24iKV0pKSxbbGFiZWwoImZyb20iLGNvbmRpdGlvbmFsKHNvcnQoIkV4cHJlc3Npb24iKSx7ZXhjZXB0KCJpZkRlZmluZWRPdGhlcndpc2UiKX0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCI6IiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJ0byIsc29ydCgiRXhwcmVzc2lvbiIpKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[3] = new NonTerminalStackNode(14142, 3, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(14140, 1, "layouts_LAYOUTLIST", null, null); - tmp[0] = new NonTerminalStackNode(14138, 0, "Expression", null, null); - tmp[4] = new NonTerminalStackNode(14143, 4, "Expression", null, null); - tmp[2] = new LiteralStackNode(14141, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[3] = new NonTerminalStackNode(14079, 3, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(14077, 1, "layouts_LAYOUTLIST", null, null); + tmp[0] = new NonTerminalStackNode(14075, 0, "Expression", null, null); + tmp[4] = new NonTerminalStackNode(14080, 4, "Expression", null, null); + tmp[2] = new LiteralStackNode(14078, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiZGVmYXVsdCIsXHBhcmFtZXRlcml6ZWQtc29ydCgiTWFwcGluZyIsW3NvcnQoIkV4cHJlc3Npb24iKV0pKSxbbGFiZWwoImZyb20iLGNvbmRpdGlvbmFsKHNvcnQoIkV4cHJlc3Npb24iKSx7ZXhjZXB0KCJpZkRlZmluZWRPdGhlcndpc2UiKX0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCI6IiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJ0byIsc29ydCgiRXhwcmVzc2lvbiIpKV0se30p, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixccGFyYW1ldGVyaXplZC1zb3J0KCJNYXBwaW5nIixbc29ydCgiRXhwcmVzc2lvbiIpXSkpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgiXFxwYXJhbWV0ZXJpemVkLXNvcnQoXCJNYXBwaW5nXCIsW3NvcnQoXCJFeHByZXNzaW9uXCIpXSkiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKFxwYXJhbWV0ZXJpemVkLXNvcnQoIk1hcHBpbmciLFtzb3J0KCJFeHByZXNzaW9uIildKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[1] = new LiteralStackNode(14149, 1, cHJvZChsaXQoIlxccGFyYW1ldGVyaXplZC1zb3J0KFwiTWFwcGluZ1wiLFtzb3J0KFwiRXhwcmVzc2lvblwiKV0pIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg5Miw5MildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEyLDExMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDksMTA5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMjIsMTIyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDAsMTAwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NSw0NSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg3Nyw3NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMywxMDMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NCw0NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTEsOTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNjksNjkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEyMCwxMjApXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTMsOTMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {92,112,97,114,97,109,101,116,101,114,105,122,101,100,45,115,111,114,116,40,34,77,97,112,112,105,110,103,34,44,91,115,111,114,116,40,34,69,120,112,114,101,115,115,105,111,110,34,41,93,41}, null, null); - tmp[3] = new ListStackNode(14152, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(14151, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[2] = new LiteralStackNode(14150, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[4] = new CharStackNode(14153, 4, new int[][]{{0,0}}, null, null); - tmp[0] = new CharStackNode(14148, 0, new int[][]{{0,0}}, null, null); + tmp[1] = new LiteralStackNode(14086, 1, cHJvZChsaXQoIlxccGFyYW1ldGVyaXplZC1zb3J0KFwiTWFwcGluZ1wiLFtzb3J0KFwiRXhwcmVzc2lvblwiKV0pIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg5Miw5MildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEyLDExMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDksMTA5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMjIsMTIyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDAsMTAwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NSw0NSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg3Nyw3NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMywxMDMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NCw0NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTEsOTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNjksNjkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEyMCwxMjApXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTMsOTMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {92,112,97,114,97,109,101,116,101,114,105,122,101,100,45,115,111,114,116,40,34,77,97,112,112,105,110,103,34,44,91,115,111,114,116,40,34,69,120,112,114,101,115,115,105,111,110,34,41,93,41}, null, null); + tmp[3] = new ListStackNode(14089, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(14088, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[2] = new LiteralStackNode(14087, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[4] = new CharStackNode(14090, 4, new int[][]{{0,0}}, null, null); + tmp[0] = new CharStackNode(14085, 0, new int[][]{{0,0}}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixccGFyYW1ldGVyaXplZC1zb3J0KCJNYXBwaW5nIixbc29ydCgiRXhwcmVzc2lvbiIpXSkpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgiXFxwYXJhbWV0ZXJpemVkLXNvcnQoXCJNYXBwaW5nXCIsW3NvcnQoXCJFeHByZXNzaW9uXCIpXSkiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKFxwYXJhbWV0ZXJpemVkLXNvcnQoIk1hcHBpbmciLFtzb3J0KCJFeHByZXNzaW9uIildKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixccGFyYW1ldGVyaXplZC1zb3J0KCJNYXBwaW5nIixbc29ydCgiRXhwcmVzc2lvbiIpXSkpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgiXFxpdGVyLXN0YXItc2VwcyhcXHBhcmFtZXRlcml6ZWQtc29ydChcIk1hcHBpbmdcIixbc29ydChcIkV4cHJlc3Npb25cIildKSxbbGl0KFwiLFwiKV0pIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihcaXRlci1zdGFyLXNlcHMoXHBhcmFtZXRlcml6ZWQtc29ydCgiTWFwcGluZyIsW3NvcnQoIkV4cHJlc3Npb24iKV0pLFtsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpXSkpKX0p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[1] = new LiteralStackNode(14160, 1, cHJvZChsaXQoIlxcaXRlci1zdGFyLXNlcHMoXFxwYXJhbWV0ZXJpemVkLXNvcnQoXCJNYXBwaW5nXCIsW3NvcnQoXCJFeHByZXNzaW9uXCIpXSksW2xpdChcIixcIildKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoOTIsOTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ1LDQ1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDUsNDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Miw5MildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEyLDExMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDksMTA5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMjIsMTIyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDAsMTAwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NSw0NSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg3Nyw3NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMywxMDMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NCw0NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTEsOTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNjksNjkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEyMCwxMjApXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTMsOTMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NCw0NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTEsOTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDQsNDQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTMsOTMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {92,105,116,101,114,45,115,116,97,114,45,115,101,112,115,40,92,112,97,114,97,109,101,116,101,114,105,122,101,100,45,115,111,114,116,40,34,77,97,112,112,105,110,103,34,44,91,115,111,114,116,40,34,69,120,112,114,101,115,115,105,111,110,34,41,93,41,44,91,108,105,116,40,34,44,34,41,93,41}, null, null); - tmp[3] = new ListStackNode(14163, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(14162, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[2] = new LiteralStackNode(14161, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[4] = new CharStackNode(14164, 4, new int[][]{{0,0}}, null, null); - tmp[0] = new CharStackNode(14159, 0, new int[][]{{0,0}}, null, null); + tmp[1] = new LiteralStackNode(14097, 1, cHJvZChsaXQoIlxcaXRlci1zdGFyLXNlcHMoXFxwYXJhbWV0ZXJpemVkLXNvcnQoXCJNYXBwaW5nXCIsW3NvcnQoXCJFeHByZXNzaW9uXCIpXSksW2xpdChcIixcIildKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoOTIsOTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ1LDQ1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDUsNDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Miw5MildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEyLDExMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDksMTA5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMjIsMTIyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDAsMTAwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NSw0NSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg3Nyw3NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMywxMDMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NCw0NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTEsOTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNjksNjkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEyMCwxMjApXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMiwxMTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTMsOTMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NCw0NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTEsOTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDQsNDQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTMsOTMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {92,105,116,101,114,45,115,116,97,114,45,115,101,112,115,40,92,112,97,114,97,109,101,116,101,114,105,122,101,100,45,115,111,114,116,40,34,77,97,112,112,105,110,103,34,44,91,115,111,114,116,40,34,69,120,112,114,101,115,115,105,111,110,34,41,93,41,44,91,108,105,116,40,34,44,34,41,93,41}, null, null); + tmp[3] = new ListStackNode(14100, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(14099, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[2] = new LiteralStackNode(14098, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[4] = new CharStackNode(14101, 4, new int[][]{{0,0}}, null, null); + tmp[0] = new CharStackNode(14096, 0, new int[][]{{0,0}}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixccGFyYW1ldGVyaXplZC1zb3J0KCJNYXBwaW5nIixbc29ydCgiRXhwcmVzc2lvbiIpXSkpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgiXFxpdGVyLXN0YXItc2VwcyhcXHBhcmFtZXRlcml6ZWQtc29ydChcIk1hcHBpbmdcIixbc29ydChcIkV4cHJlc3Npb25cIildKSxbbGl0KFwiLFwiKV0pIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihcaXRlci1zdGFyLXNlcHMoXHBhcmFtZXRlcml6ZWQtc29ydCgiTWFwcGluZyIsW3NvcnQoIkV4cHJlc3Npb24iKV0pLFtsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpXSkpKX0p, tmp); } public static void init(ExpectBuilder builder){ @@ -13567,287 +13552,287 @@ protected static class Sym { protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJTeW0iKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJzb3J0KFwiU3ltXCIpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihzb3J0KCJTeW0iKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[1] = new LiteralStackNode(14505, 1, cHJvZChsaXQoInNvcnQoXCJTeW1cIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODMsODMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEyMSwxMjEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOSwxMDkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,83,121,109,34,41}, null, null); - tmp[3] = new ListStackNode(14508, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(14507, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[2] = new LiteralStackNode(14506, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[4] = new CharStackNode(14509, 4, new int[][]{{0,0}}, null, null); - tmp[0] = new CharStackNode(14504, 0, new int[][]{{0,0}}, null, null); + tmp[1] = new LiteralStackNode(14442, 1, cHJvZChsaXQoInNvcnQoXCJTeW1cIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODMsODMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEyMSwxMjEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOSwxMDkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,83,121,109,34,41}, null, null); + tmp[3] = new ListStackNode(14445, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(14444, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[2] = new LiteralStackNode(14443, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[4] = new CharStackNode(14446, 4, new int[][]{{0,0}}, null, null); + tmp[0] = new CharStackNode(14441, 0, new int[][]{{0,0}}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJTeW0iKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJzb3J0KFwiU3ltXCIpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihzb3J0KCJTeW0iKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgicHJlY2VkZSIsc29ydCgiU3ltIikpLFtsYWJlbCgibWF0Y2giLHNvcnQoIlN5bSIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJcPFw8IiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJzeW1ib2wiLHNvcnQoIlN5bSIpKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[3] = new NonTerminalStackNode(14462, 3, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(14460, 1, "layouts_LAYOUTLIST", null, null); - tmp[4] = new NonTerminalStackNode(14463, 4, "Sym", null, null); - tmp[2] = new LiteralStackNode(14461, 2, cHJvZChsaXQoIlw8XDwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDYwLDYwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg2MCw2MCldKV0se30p, new int[] {60,60}, null, null); - tmp[0] = new NonTerminalStackNode(14458, 0, "Sym", null, null); + tmp[3] = new NonTerminalStackNode(14399, 3, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(14397, 1, "layouts_LAYOUTLIST", null, null); + tmp[4] = new NonTerminalStackNode(14400, 4, "Sym", null, null); + tmp[2] = new LiteralStackNode(14398, 2, cHJvZChsaXQoIlw8XDwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDYwLDYwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg2MCw2MCldKV0se30p, new int[] {60,60}, null, null); + tmp[0] = new NonTerminalStackNode(14395, 0, "Sym", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgicHJlY2VkZSIsc29ydCgiU3ltIikpLFtsYWJlbCgibWF0Y2giLHNvcnQoIlN5bSIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJcPFw8IiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJzeW1ib2wiLHNvcnQoIlN5bSIpKV0se30p, tmp); } protected static final void _init_cHJvZChsYWJlbCgiaXRlciIsc29ydCgiU3ltIikpLFtsYWJlbCgic3ltYm9sIixzb3J0KCJTeW0iKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiKyIpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[3]; - tmp[1] = new NonTerminalStackNode(14301, 1, "layouts_LAYOUTLIST", null, null); - tmp[0] = new NonTerminalStackNode(14299, 0, "Sym", null, null); - tmp[2] = new LiteralStackNode(14302, 2, cHJvZChsaXQoIisiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQzLDQzKV0pXSx7fSk00, new int[] {43}, null, null); + tmp[1] = new NonTerminalStackNode(14238, 1, "layouts_LAYOUTLIST", null, null); + tmp[0] = new NonTerminalStackNode(14236, 0, "Sym", null, null); + tmp[2] = new LiteralStackNode(14239, 2, cHJvZChsaXQoIisiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQzLDQzKV0pXSx7fSk00, new int[] {43}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiaXRlciIsc29ydCgiU3ltIikpLFtsYWJlbCgic3ltYm9sIixzb3J0KCJTeW0iKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiKyIpXSx7fSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgic3RhcnRPZkxpbmUiLHNvcnQoIlN5bSIpKSxbbGl0KCJeIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJzeW1ib2wiLHNvcnQoIlN5bSIpKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[3]; - tmp[1] = new NonTerminalStackNode(14306, 1, "layouts_LAYOUTLIST", null, null); - tmp[0] = new LiteralStackNode(14305, 0, cHJvZChsaXQoIl4iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDk0LDk0KV0pXSx7fSk00, new int[] {94}, null, null); - tmp[2] = new NonTerminalStackNode(14307, 2, "Sym", null, null); + tmp[1] = new NonTerminalStackNode(14243, 1, "layouts_LAYOUTLIST", null, null); + tmp[0] = new LiteralStackNode(14242, 0, cHJvZChsaXQoIl4iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDk0LDk0KV0pXSx7fSk00, new int[] {94}, null, null); + tmp[2] = new NonTerminalStackNode(14244, 2, "Sym", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgic3RhcnRPZkxpbmUiLHNvcnQoIlN5bSIpKSxbbGl0KCJeIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJzeW1ib2wiLHNvcnQoIlN5bSIpKV0se30p, tmp); } protected static final void _init_cHJvZChsYWJlbCgiaXRlclNlcCIsc29ydCgiU3ltIikpLFtsaXQoInsiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInN5bWJvbCIsc29ydCgiU3ltIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgic2VwIixzb3J0KCJTeW0iKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgifSIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIisiKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[9]; - tmp[8] = new LiteralStackNode(14321, 8, cHJvZChsaXQoIisiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQzLDQzKV0pXSx7fSk00, new int[] {43}, null, null); - tmp[7] = new NonTerminalStackNode(14320, 7, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(14312, 1, "layouts_LAYOUTLIST", null, null); - tmp[5] = new NonTerminalStackNode(14318, 5, "layouts_LAYOUTLIST", null, null); - tmp[3] = new NonTerminalStackNode(14315, 3, "layouts_LAYOUTLIST", null, null); - tmp[0] = new LiteralStackNode(14311, 0, cHJvZChsaXQoInsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyMywxMjMpXSldLHt9KQ0000, new int[] {123}, null, null); - tmp[2] = new NonTerminalStackNode(14313, 2, "Sym", null, null); - tmp[6] = new LiteralStackNode(14319, 6, cHJvZChsaXQoIn0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyNSwxMjUpXSldLHt9KQ0000, new int[] {125}, null, null); - tmp[4] = new NonTerminalStackNode(14316, 4, "Sym", null, null); + tmp[8] = new LiteralStackNode(14258, 8, cHJvZChsaXQoIisiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQzLDQzKV0pXSx7fSk00, new int[] {43}, null, null); + tmp[7] = new NonTerminalStackNode(14257, 7, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(14249, 1, "layouts_LAYOUTLIST", null, null); + tmp[5] = new NonTerminalStackNode(14255, 5, "layouts_LAYOUTLIST", null, null); + tmp[3] = new NonTerminalStackNode(14252, 3, "layouts_LAYOUTLIST", null, null); + tmp[0] = new LiteralStackNode(14248, 0, cHJvZChsaXQoInsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyMywxMjMpXSldLHt9KQ0000, new int[] {123}, null, null); + tmp[2] = new NonTerminalStackNode(14250, 2, "Sym", null, null); + tmp[6] = new LiteralStackNode(14256, 6, cHJvZChsaXQoIn0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyNSwxMjUpXSldLHt9KQ0000, new int[] {125}, null, null); + tmp[4] = new NonTerminalStackNode(14253, 4, "Sym", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiaXRlclNlcCIsc29ydCgiU3ltIikpLFtsaXQoInsiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInN5bWJvbCIsc29ydCgiU3ltIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgic2VwIixzb3J0KCJTeW0iKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgifSIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIisiKV0se30p, tmp); } protected static final void _init_cHJvZChsYWJlbCgicGFyYW1ldHJpemVkIixzb3J0KCJTeW0iKSksW2NvbmRpdGlvbmFsKGxhYmVsKCJub250ZXJtaW5hbCIsbGV4KCJOb250ZXJtaW5hbCIpKSx7Zm9sbG93KGxpdCgiWyIpKX0pLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIlsiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInBhcmFtZXRlcnMiLFxpdGVyLXNlcHMoc29ydCgiU3ltIiksW2xheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIiwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIildKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiXSIpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[7]; - tmp[1] = new NonTerminalStackNode(14328, 1, "layouts_LAYOUTLIST", null, null); - tmp[5] = new NonTerminalStackNode(14337, 5, "layouts_LAYOUTLIST", null, null); - tmp[3] = new NonTerminalStackNode(14330, 3, "layouts_LAYOUTLIST", null, null); - tmp[0] = new NonTerminalStackNode(14327, 0, "Nonterminal", null, new ICompletionFilter[] {new StringFollowRequirement(new int[] {91})}); - tmp[2] = new LiteralStackNode(14329, 2, cHJvZChsaXQoIlsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkxLDkxKV0pXSx7fSk00, new int[] {91}, null, null); - tmp[6] = new LiteralStackNode(14338, 6, cHJvZChsaXQoIl0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkzLDkzKV0pXSx7fSk00, new int[] {93}, null, null); - tmp[4] = new SeparatedListStackNode(14335, 4, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIlN5bSIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpXSkp, new NonTerminalStackNode(14331, 0, "Sym", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(14332, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(14333, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(14334, 3, "layouts_LAYOUTLIST", null, null)}, true, null, null); + tmp[1] = new NonTerminalStackNode(14265, 1, "layouts_LAYOUTLIST", null, null); + tmp[5] = new NonTerminalStackNode(14274, 5, "layouts_LAYOUTLIST", null, null); + tmp[3] = new NonTerminalStackNode(14267, 3, "layouts_LAYOUTLIST", null, null); + tmp[0] = new NonTerminalStackNode(14264, 0, "Nonterminal", null, new ICompletionFilter[] {new StringFollowRequirement(new int[] {91})}); + tmp[2] = new LiteralStackNode(14266, 2, cHJvZChsaXQoIlsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkxLDkxKV0pXSx7fSk00, new int[] {91}, null, null); + tmp[6] = new LiteralStackNode(14275, 6, cHJvZChsaXQoIl0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkzLDkzKV0pXSx7fSk00, new int[] {93}, null, null); + tmp[4] = new SeparatedListStackNode(14272, 4, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIlN5bSIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIsIiksbGF5b3V0cygiTEFZT1VUTElTVCIpXSkp, new NonTerminalStackNode(14268, 0, "Sym", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(14269, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(14270, 2, cHJvZChsaXQoIiwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pXSx7fSk00, new int[] {44}, null, null), new NonTerminalStackNode(14271, 3, "layouts_LAYOUTLIST", null, null)}, true, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgicGFyYW1ldHJpemVkIixzb3J0KCJTeW0iKSksW2NvbmRpdGlvbmFsKGxhYmVsKCJub250ZXJtaW5hbCIsbGV4KCJOb250ZXJtaW5hbCIpKSx7Zm9sbG93KGxpdCgiWyIpKX0pLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIlsiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInBhcmFtZXRlcnMiLFxpdGVyLXNlcHMoc29ydCgiU3ltIiksW2xheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIiwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIildKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiXSIpXSx7fSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgibGl0ZXJhbCIsc29ydCgiU3ltIikpLFtsYWJlbCgic3RyaW5nIixsZXgoIlN0cmluZ0NvbnN0YW50IikpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new NonTerminalStackNode(14341, 0, "StringConstant", null, null); + tmp[0] = new NonTerminalStackNode(14278, 0, "StringConstant", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgibGl0ZXJhbCIsc29ydCgiU3ltIikpLFtsYWJlbCgic3RyaW5nIixsZXgoIlN0cmluZ0NvbnN0YW50IikpXSx7fSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgibm90UHJlY2VkZSIsc29ydCgiU3ltIikpLFtsYWJlbCgibWF0Y2giLHNvcnQoIlN5bSIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIhXDxcPCIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgic3ltYm9sIixzb3J0KCJTeW0iKSldLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[3] = new NonTerminalStackNode(14471, 3, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(14469, 1, "layouts_LAYOUTLIST", null, null); - tmp[0] = new NonTerminalStackNode(14467, 0, "Sym", null, null); - tmp[4] = new NonTerminalStackNode(14472, 4, "Sym", null, null); - tmp[2] = new LiteralStackNode(14470, 2, cHJvZChsaXQoIiFcPFw8IiksW1xjaGFyLWNsYXNzKFtyYW5nZSgzMywzMyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNjAsNjApXSksXGNoYXItY2xhc3MoW3JhbmdlKDYwLDYwKV0pXSx7fSk00, new int[] {33,60,60}, null, null); + tmp[3] = new NonTerminalStackNode(14408, 3, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(14406, 1, "layouts_LAYOUTLIST", null, null); + tmp[0] = new NonTerminalStackNode(14404, 0, "Sym", null, null); + tmp[4] = new NonTerminalStackNode(14409, 4, "Sym", null, null); + tmp[2] = new LiteralStackNode(14407, 2, cHJvZChsaXQoIiFcPFw8IiksW1xjaGFyLWNsYXNzKFtyYW5nZSgzMywzMyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNjAsNjApXSksXGNoYXItY2xhc3MoW3JhbmdlKDYwLDYwKV0pXSx7fSk00, new int[] {33,60,60}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgibm90UHJlY2VkZSIsc29ydCgiU3ltIikpLFtsYWJlbCgibWF0Y2giLHNvcnQoIlN5bSIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIhXDxcPCIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgic3ltYm9sIixzb3J0KCJTeW0iKSldLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgib3B0aW9uYWwiLHNvcnQoIlN5bSIpKSxbbGFiZWwoInN5bWJvbCIsc29ydCgiU3ltIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIj8iKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[3]; - tmp[2] = new LiteralStackNode(14348, 2, cHJvZChsaXQoIj8iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDYzLDYzKV0pXSx7fSk00, new int[] {63}, null, null); - tmp[0] = new NonTerminalStackNode(14345, 0, "Sym", null, null); - tmp[1] = new NonTerminalStackNode(14347, 1, "layouts_LAYOUTLIST", null, null); + tmp[2] = new LiteralStackNode(14285, 2, cHJvZChsaXQoIj8iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDYzLDYzKV0pXSx7fSk00, new int[] {63}, null, null); + tmp[0] = new NonTerminalStackNode(14282, 0, "Sym", null, null); + tmp[1] = new NonTerminalStackNode(14284, 1, "layouts_LAYOUTLIST", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgib3B0aW9uYWwiLHNvcnQoIlN5bSIpKSxbbGFiZWwoInN5bWJvbCIsc29ydCgiU3ltIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIj8iKV0se30p, tmp); } protected static final void _init_cHJvZChsYWJlbCgibm9udGVybWluYWwiLHNvcnQoIlN5bSIpKSxbY29uZGl0aW9uYWwobGFiZWwoIm5vbnRlcm1pbmFsIixsZXgoIk5vbnRlcm1pbmFsIikpLHtcbm90LWZvbGxvdyhsaXQoIlsiKSl9KV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new NonTerminalStackNode(14354, 0, "Nonterminal", null, new ICompletionFilter[] {new StringFollowRestriction(new int[] {91})}); + tmp[0] = new NonTerminalStackNode(14291, 0, "Nonterminal", null, new ICompletionFilter[] {new StringFollowRestriction(new int[] {91})}); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgibm9udGVybWluYWwiLHNvcnQoIlN5bSIpKSxbY29uZGl0aW9uYWwobGFiZWwoIm5vbnRlcm1pbmFsIixsZXgoIk5vbnRlcm1pbmFsIikpLHtcbm90LWZvbGxvdyhsaXQoIlsiKSl9KV0se30p, tmp); } protected static final void _init_cHJvZChsYWJlbCgiZW5kT2ZMaW5lIixzb3J0KCJTeW0iKSksW2xhYmVsKCJzeW1ib2wiLHNvcnQoIlN5bSIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIkIildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[3]; - tmp[2] = new LiteralStackNode(14369, 2, cHJvZChsaXQoIiQiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDM2LDM2KV0pXSx7fSk00, new int[] {36}, null, null); - tmp[0] = new NonTerminalStackNode(14366, 0, "Sym", null, null); - tmp[1] = new NonTerminalStackNode(14368, 1, "layouts_LAYOUTLIST", null, null); + tmp[2] = new LiteralStackNode(14306, 2, cHJvZChsaXQoIiQiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDM2LDM2KV0pXSx7fSk00, new int[] {36}, null, null); + tmp[0] = new NonTerminalStackNode(14303, 0, "Sym", null, null); + tmp[1] = new NonTerminalStackNode(14305, 1, "layouts_LAYOUTLIST", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiZW5kT2ZMaW5lIixzb3J0KCJTeW0iKSksW2xhYmVsKCJzeW1ib2wiLHNvcnQoIlN5bSIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIkIildLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgiaXRlclN0YXJTZXAiLHNvcnQoIlN5bSIpKSxbbGl0KCJ7IiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJzeW1ib2wiLHNvcnQoIlN5bSIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInNlcCIsc29ydCgiU3ltIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIn0iKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIqIildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[9]; - tmp[0] = new LiteralStackNode(14389, 0, cHJvZChsaXQoInsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyMywxMjMpXSldLHt9KQ0000, new int[] {123}, null, null); - tmp[6] = new LiteralStackNode(14397, 6, cHJvZChsaXQoIn0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyNSwxMjUpXSldLHt9KQ0000, new int[] {125}, null, null); - tmp[2] = new NonTerminalStackNode(14391, 2, "Sym", null, null); - tmp[4] = new NonTerminalStackNode(14394, 4, "Sym", null, null); - tmp[8] = new LiteralStackNode(14399, 8, cHJvZChsaXQoIioiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQyLDQyKV0pXSx7fSk00, new int[] {42}, null, null); - tmp[7] = new NonTerminalStackNode(14398, 7, "layouts_LAYOUTLIST", null, null); - tmp[5] = new NonTerminalStackNode(14396, 5, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(14390, 1, "layouts_LAYOUTLIST", null, null); - tmp[3] = new NonTerminalStackNode(14393, 3, "layouts_LAYOUTLIST", null, null); + tmp[0] = new LiteralStackNode(14326, 0, cHJvZChsaXQoInsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyMywxMjMpXSldLHt9KQ0000, new int[] {123}, null, null); + tmp[6] = new LiteralStackNode(14334, 6, cHJvZChsaXQoIn0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyNSwxMjUpXSldLHt9KQ0000, new int[] {125}, null, null); + tmp[2] = new NonTerminalStackNode(14328, 2, "Sym", null, null); + tmp[4] = new NonTerminalStackNode(14331, 4, "Sym", null, null); + tmp[8] = new LiteralStackNode(14336, 8, cHJvZChsaXQoIioiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQyLDQyKV0pXSx7fSk00, new int[] {42}, null, null); + tmp[7] = new NonTerminalStackNode(14335, 7, "layouts_LAYOUTLIST", null, null); + tmp[5] = new NonTerminalStackNode(14333, 5, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(14327, 1, "layouts_LAYOUTLIST", null, null); + tmp[3] = new NonTerminalStackNode(14330, 3, "layouts_LAYOUTLIST", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiaXRlclN0YXJTZXAiLHNvcnQoIlN5bSIpKSxbbGl0KCJ7IiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJzeW1ib2wiLHNvcnQoIlN5bSIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInNlcCIsc29ydCgiU3ltIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIn0iKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIqIildLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgiaXRlclN0YXIiLHNvcnQoIlN5bSIpKSxbbGFiZWwoInN5bWJvbCIsc29ydCgiU3ltIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIioiKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[3]; - tmp[0] = new NonTerminalStackNode(14402, 0, "Sym", null, null); - tmp[2] = new LiteralStackNode(14405, 2, cHJvZChsaXQoIioiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQyLDQyKV0pXSx7fSk00, new int[] {42}, null, null); - tmp[1] = new NonTerminalStackNode(14404, 1, "layouts_LAYOUTLIST", null, null); + tmp[0] = new NonTerminalStackNode(14339, 0, "Sym", null, null); + tmp[2] = new LiteralStackNode(14342, 2, cHJvZChsaXQoIioiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQyLDQyKV0pXSx7fSk00, new int[] {42}, null, null); + tmp[1] = new NonTerminalStackNode(14341, 1, "layouts_LAYOUTLIST", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiaXRlclN0YXIiLHNvcnQoIlN5bSIpKSxbbGFiZWwoInN5bWJvbCIsc29ydCgiU3ltIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIioiKV0se30p, tmp); } protected static final void _init_cHJvZChsYWJlbCgic2VxdWVuY2UiLHNvcnQoIlN5bSIpKSxbbGl0KCIoIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJmaXJzdCIsc29ydCgiU3ltIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgic2VxdWVuY2UiLFxpdGVyLXNlcHMoc29ydCgiU3ltIiksW2xheW91dHMoIkxBWU9VVExJU1QiKV0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIpIildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[7]; - tmp[0] = new LiteralStackNode(14408, 0, cHJvZChsaXQoIigiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pXSx7fSk00, new int[] {40}, null, null); - tmp[4] = new SeparatedListStackNode(14415, 4, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIlN5bSIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIildKSk00, new NonTerminalStackNode(14413, 0, "Sym", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(14414, 1, "layouts_LAYOUTLIST", null, null)}, true, null, null); - tmp[6] = new LiteralStackNode(14418, 6, cHJvZChsaXQoIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {41}, null, null); - tmp[2] = new NonTerminalStackNode(14410, 2, "Sym", null, null); - tmp[3] = new NonTerminalStackNode(14412, 3, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(14409, 1, "layouts_LAYOUTLIST", null, null); - tmp[5] = new NonTerminalStackNode(14417, 5, "layouts_LAYOUTLIST", null, null); + tmp[0] = new LiteralStackNode(14345, 0, cHJvZChsaXQoIigiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pXSx7fSk00, new int[] {40}, null, null); + tmp[4] = new SeparatedListStackNode(14352, 4, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIlN5bSIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIildKSk00, new NonTerminalStackNode(14350, 0, "Sym", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(14351, 1, "layouts_LAYOUTLIST", null, null)}, true, null, null); + tmp[6] = new LiteralStackNode(14355, 6, cHJvZChsaXQoIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {41}, null, null); + tmp[2] = new NonTerminalStackNode(14347, 2, "Sym", null, null); + tmp[3] = new NonTerminalStackNode(14349, 3, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(14346, 1, "layouts_LAYOUTLIST", null, null); + tmp[5] = new NonTerminalStackNode(14354, 5, "layouts_LAYOUTLIST", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgic2VxdWVuY2UiLHNvcnQoIlN5bSIpKSxbbGl0KCIoIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJmaXJzdCIsc29ydCgiU3ltIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgic2VxdWVuY2UiLFxpdGVyLXNlcHMoc29ydCgiU3ltIiksW2xheW91dHMoIkxBWU9VVExJU1QiKV0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIpIildLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgiY2hhcmFjdGVyQ2xhc3MiLHNvcnQoIlN5bSIpKSxbbGFiZWwoImNoYXJDbGFzcyIsc29ydCgiQ2xhc3MiKSldLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new NonTerminalStackNode(14421, 0, "Class", null, null); + tmp[0] = new NonTerminalStackNode(14358, 0, "Class", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiY2hhcmFjdGVyQ2xhc3MiLHNvcnQoIlN5bSIpKSxbbGFiZWwoImNoYXJDbGFzcyIsc29ydCgiQ2xhc3MiKSldLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgiZXhjZXB0Iixzb3J0KCJTeW0iKSksW2xhYmVsKCJzeW1ib2wiLHNvcnQoIlN5bSIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIhIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJsYWJlbCIsbGV4KCJOb250ZXJtaW5hbExhYmVsIikpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[1] = new NonTerminalStackNode(14292, 1, "layouts_LAYOUTLIST", null, null); - tmp[3] = new NonTerminalStackNode(14294, 3, "layouts_LAYOUTLIST", null, null); - tmp[2] = new LiteralStackNode(14293, 2, cHJvZChsaXQoIiEiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDMzLDMzKV0pXSx7fSk00, new int[] {33}, null, null); - tmp[4] = new NonTerminalStackNode(14295, 4, "NonterminalLabel", null, null); - tmp[0] = new NonTerminalStackNode(14290, 0, "Sym", null, null); + tmp[1] = new NonTerminalStackNode(14229, 1, "layouts_LAYOUTLIST", null, null); + tmp[3] = new NonTerminalStackNode(14231, 3, "layouts_LAYOUTLIST", null, null); + tmp[2] = new LiteralStackNode(14230, 2, cHJvZChsaXQoIiEiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDMzLDMzKV0pXSx7fSk00, new int[] {33}, null, null); + tmp[4] = new NonTerminalStackNode(14232, 4, "NonterminalLabel", null, null); + tmp[0] = new NonTerminalStackNode(14227, 0, "Sym", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiZXhjZXB0Iixzb3J0KCJTeW0iKSksW2xhYmVsKCJzeW1ib2wiLHNvcnQoIlN5bSIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIhIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJsYWJlbCIsbGV4KCJOb250ZXJtaW5hbExhYmVsIikpXSx7fSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJTeW0iKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJcXGl0ZXItc2Vwcyhzb3J0KFwiU3ltXCIpLFtsaXQoXCIsXCIpXSkiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKFxpdGVyLXNlcHMoc29ydCgiU3ltIiksW2xheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIiwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIildKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[1] = new LiteralStackNode(14241, 1, cHJvZChsaXQoIlxcaXRlci1zZXBzKHNvcnQoXCJTeW1cIiksW2xpdChcIixcIildKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoOTIsOTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ1LDQ1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTIsMTEyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4Myw4MyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTIxLDEyMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NCw0NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTEsOTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDQsNDQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTMsOTMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {92,105,116,101,114,45,115,101,112,115,40,115,111,114,116,40,34,83,121,109,34,41,44,91,108,105,116,40,34,44,34,41,93,41}, null, null); - tmp[3] = new ListStackNode(14244, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(14243, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[2] = new LiteralStackNode(14242, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[4] = new CharStackNode(14245, 4, new int[][]{{0,0}}, null, null); - tmp[0] = new CharStackNode(14240, 0, new int[][]{{0,0}}, null, null); + tmp[1] = new LiteralStackNode(14178, 1, cHJvZChsaXQoIlxcaXRlci1zZXBzKHNvcnQoXCJTeW1cIiksW2xpdChcIixcIildKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoOTIsOTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ1LDQ1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTIsMTEyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4Myw4MyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTIxLDEyMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NCw0NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTEsOTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDQsNDQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTMsOTMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {92,105,116,101,114,45,115,101,112,115,40,115,111,114,116,40,34,83,121,109,34,41,44,91,108,105,116,40,34,44,34,41,93,41}, null, null); + tmp[3] = new ListStackNode(14181, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(14180, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[2] = new LiteralStackNode(14179, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[4] = new CharStackNode(14182, 4, new int[][]{{0,0}}, null, null); + tmp[0] = new CharStackNode(14177, 0, new int[][]{{0,0}}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJTeW0iKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJcXGl0ZXItc2Vwcyhzb3J0KFwiU3ltXCIpLFtsaXQoXCIsXCIpXSkiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKFxpdGVyLXNlcHMoc29ydCgiU3ltIiksW2xheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIiwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIildKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgibm90Rm9sbG93Iixzb3J0KCJTeW0iKSksW2xhYmVsKCJzeW1ib2wiLHNvcnQoIlN5bSIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIhXD5cPiIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgibWF0Y2giLHNvcnQoIlN5bSIpKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[3] = new NonTerminalStackNode(14480, 3, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(14478, 1, "layouts_LAYOUTLIST", null, null); - tmp[0] = new NonTerminalStackNode(14476, 0, "Sym", null, null); - tmp[4] = new NonTerminalStackNode(14481, 4, "Sym", null, null); - tmp[2] = new LiteralStackNode(14479, 2, cHJvZChsaXQoIiFcPlw11IiksW1xjaGFyLWNsYXNzKFtyYW5nZSgzMywzMyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNjIsNjIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDYyLDYyKV0pXSx7fSk00, new int[] {33,62,62}, null, null); + tmp[3] = new NonTerminalStackNode(14417, 3, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(14415, 1, "layouts_LAYOUTLIST", null, null); + tmp[0] = new NonTerminalStackNode(14413, 0, "Sym", null, null); + tmp[4] = new NonTerminalStackNode(14418, 4, "Sym", null, null); + tmp[2] = new LiteralStackNode(14416, 2, cHJvZChsaXQoIiFcPlw11IiksW1xjaGFyLWNsYXNzKFtyYW5nZSgzMywzMyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNjIsNjIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDYyLDYyKV0pXSx7fSk00, new int[] {33,62,62}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgibm90Rm9sbG93Iixzb3J0KCJTeW0iKSksW2xhYmVsKCJzeW1ib2wiLHNvcnQoIlN5bSIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIhXD5cPiIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgibWF0Y2giLHNvcnQoIlN5bSIpKV0se30p, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJTeW0iKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJpdGVyKHNvcnQoXCJTeW1cIikpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihcaXRlci1zZXBzKHNvcnQoIlN5bSIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIildKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[3] = new ListStackNode(14257, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(14256, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[1] = new LiteralStackNode(14254, 1, cHJvZChsaXQoIml0ZXIoc29ydChcIlN5bVwiKSkiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDgzLDgzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMjEsMTIxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDksMTA5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {105,116,101,114,40,115,111,114,116,40,34,83,121,109,34,41,41}, null, null); - tmp[0] = new CharStackNode(14253, 0, new int[][]{{0,0}}, null, null); - tmp[4] = new CharStackNode(14258, 4, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(14255, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[3] = new ListStackNode(14194, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(14193, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[1] = new LiteralStackNode(14191, 1, cHJvZChsaXQoIml0ZXIoc29ydChcIlN5bVwiKSkiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDgzLDgzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMjEsMTIxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDksMTA5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {105,116,101,114,40,115,111,114,116,40,34,83,121,109,34,41,41}, null, null); + tmp[0] = new CharStackNode(14190, 0, new int[][]{{0,0}}, null, null); + tmp[4] = new CharStackNode(14195, 4, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(14192, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJTeW0iKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJpdGVyKHNvcnQoXCJTeW1cIikpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihcaXRlci1zZXBzKHNvcnQoIlN5bSIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIildKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgidW5lcXVhbCIsc29ydCgiU3ltIikpLFtsYWJlbCgic3ltYm9sIixzb3J0KCJTeW0iKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiXFwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoIm1hdGNoIixzb3J0KCJTeW0iKSldLHthc3NvYyhsZWZ0KCkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[3] = new NonTerminalStackNode(14499, 3, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(14497, 1, "layouts_LAYOUTLIST", null, null); - tmp[0] = new NonTerminalStackNode(14495, 0, "Sym", null, null); - tmp[4] = new NonTerminalStackNode(14500, 4, "Sym", null, null); - tmp[2] = new LiteralStackNode(14498, 2, cHJvZChsaXQoIlxcIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg5Miw5MildKV0se30p, new int[] {92}, null, null); + tmp[3] = new NonTerminalStackNode(14436, 3, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(14434, 1, "layouts_LAYOUTLIST", null, null); + tmp[0] = new NonTerminalStackNode(14432, 0, "Sym", null, null); + tmp[4] = new NonTerminalStackNode(14437, 4, "Sym", null, null); + tmp[2] = new LiteralStackNode(14435, 2, cHJvZChsaXQoIlxcIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg5Miw5MildKV0se30p, new int[] {92}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgidW5lcXVhbCIsc29ydCgiU3ltIikpLFtsYWJlbCgic3ltYm9sIixzb3J0KCJTeW0iKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiXFwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoIm1hdGNoIixzb3J0KCJTeW0iKSldLHthc3NvYyhsZWZ0KCkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiY2FzZUluc2Vuc2l0aXZlTGl0ZXJhbCIsc29ydCgiU3ltIikpLFtsYWJlbCgiY2lzdHJpbmciLGxleCgiQ2FzZUluc2Vuc2l0aXZlU3RyaW5nQ29uc3RhbnQiKSldLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new NonTerminalStackNode(14430, 0, "CaseInsensitiveStringConstant", null, null); + tmp[0] = new NonTerminalStackNode(14367, 0, "CaseInsensitiveStringConstant", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiY2FzZUluc2Vuc2l0aXZlTGl0ZXJhbCIsc29ydCgiU3ltIikpLFtsYWJlbCgiY2lzdHJpbmciLGxleCgiQ2FzZUluc2Vuc2l0aXZlU3RyaW5nQ29uc3RhbnQiKSldLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgic3RhcnQiLHNvcnQoIlN5bSIpKSxbbGl0KCJzdGFydCIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIlsiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoIm5vbnRlcm1pbmFsIixsZXgoIk5vbnRlcm1pbmFsIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIl0iKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[7]; - tmp[3] = new NonTerminalStackNode(14437, 3, "layouts_LAYOUTLIST", null, null); - tmp[5] = new NonTerminalStackNode(14440, 5, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(14435, 1, "layouts_LAYOUTLIST", null, null); - tmp[0] = new LiteralStackNode(14434, 0, cHJvZChsaXQoInN0YXJ0IiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKV0se30p, new int[] {115,116,97,114,116}, null, null); - tmp[4] = new NonTerminalStackNode(14438, 4, "Nonterminal", null, null); - tmp[2] = new LiteralStackNode(14436, 2, cHJvZChsaXQoIlsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkxLDkxKV0pXSx7fSk00, new int[] {91}, null, null); - tmp[6] = new LiteralStackNode(14441, 6, cHJvZChsaXQoIl0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkzLDkzKV0pXSx7fSk00, new int[] {93}, null, null); + tmp[3] = new NonTerminalStackNode(14374, 3, "layouts_LAYOUTLIST", null, null); + tmp[5] = new NonTerminalStackNode(14377, 5, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(14372, 1, "layouts_LAYOUTLIST", null, null); + tmp[0] = new LiteralStackNode(14371, 0, cHJvZChsaXQoInN0YXJ0IiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKV0se30p, new int[] {115,116,97,114,116}, null, null); + tmp[4] = new NonTerminalStackNode(14375, 4, "Nonterminal", null, null); + tmp[2] = new LiteralStackNode(14373, 2, cHJvZChsaXQoIlsiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkxLDkxKV0pXSx7fSk00, new int[] {91}, null, null); + tmp[6] = new LiteralStackNode(14378, 6, cHJvZChsaXQoIl0iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkzLDkzKV0pXSx7fSk00, new int[] {93}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgic3RhcnQiLHNvcnQoIlN5bSIpKSxbbGl0KCJzdGFydCIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIlsiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoIm5vbnRlcm1pbmFsIixsZXgoIk5vbnRlcm1pbmFsIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIl0iKV0se30p, tmp); } protected static final void _init_cHJvZChsYWJlbCgiY29sdW1uIixzb3J0KCJTeW0iKSksW2xhYmVsKCJzeW1ib2wiLHNvcnQoIlN5bSIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJAIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJjb2x1bW4iLHNvcnQoIkludGVnZXJMaXRlcmFsIikpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[4] = new NonTerminalStackNode(14362, 4, "IntegerLiteral", null, null); - tmp[2] = new LiteralStackNode(14360, 2, cHJvZChsaXQoIkAiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDY0LDY0KV0pXSx7fSk00, new int[] {64}, null, null); - tmp[0] = new NonTerminalStackNode(14357, 0, "Sym", null, null); - tmp[3] = new NonTerminalStackNode(14361, 3, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(14359, 1, "layouts_LAYOUTLIST", null, null); + tmp[4] = new NonTerminalStackNode(14299, 4, "IntegerLiteral", null, null); + tmp[2] = new LiteralStackNode(14297, 2, cHJvZChsaXQoIkAiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDY0LDY0KV0pXSx7fSk00, new int[] {64}, null, null); + tmp[0] = new NonTerminalStackNode(14294, 0, "Sym", null, null); + tmp[3] = new NonTerminalStackNode(14298, 3, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(14296, 1, "layouts_LAYOUTLIST", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiY29sdW1uIixzb3J0KCJTeW0iKSksW2xhYmVsKCJzeW1ib2wiLHNvcnQoIlN5bSIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJAIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJjb2x1bW4iLHNvcnQoIkludGVnZXJMaXRlcmFsIikpXSx7fSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJTeW0iKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJcXGl0ZXItc3Rhcihzb3J0KFwiU3ltXCIpKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoXGl0ZXItc3Rhci1zZXBzKHNvcnQoIlN5bSIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIildKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[4] = new CharStackNode(14269, 4, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(14266, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[0] = new CharStackNode(14264, 0, new int[][]{{0,0}}, null, null); - tmp[3] = new ListStackNode(14268, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(14267, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[1] = new LiteralStackNode(14265, 1, cHJvZChsaXQoIlxcaXRlci1zdGFyKHNvcnQoXCJTeW1cIikpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg5Miw5MildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDUsNDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4Myw4MyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTIxLDEyMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {92,105,116,101,114,45,115,116,97,114,40,115,111,114,116,40,34,83,121,109,34,41,41}, null, null); + tmp[4] = new CharStackNode(14206, 4, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(14203, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[0] = new CharStackNode(14201, 0, new int[][]{{0,0}}, null, null); + tmp[3] = new ListStackNode(14205, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(14204, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[1] = new LiteralStackNode(14202, 1, cHJvZChsaXQoIlxcaXRlci1zdGFyKHNvcnQoXCJTeW1cIikpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSg5Miw5MildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDUsNDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4Myw4MyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTIxLDEyMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {92,105,116,101,114,45,115,116,97,114,40,115,111,114,116,40,34,83,121,109,34,41,41}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJTeW0iKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJcXGl0ZXItc3Rhcihzb3J0KFwiU3ltXCIpKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoXGl0ZXItc3Rhci1zZXBzKHNvcnQoIlN5bSIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIildKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiYWx0ZXJuYXRpdmUiLHNvcnQoIlN5bSIpKSxbbGl0KCIoIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJmaXJzdCIsc29ydCgiU3ltIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoInwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImFsdGVybmF0aXZlcyIsXGl0ZXItc2Vwcyhzb3J0KCJTeW0iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgifCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIpIildLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[9]; - tmp[4] = new LiteralStackNode(14377, 4, cHJvZChsaXQoInwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyNCwxMjQpXSldLHt9KQ0000, new int[] {124}, null, null); - tmp[2] = new NonTerminalStackNode(14374, 2, "Sym", null, null); - tmp[6] = new SeparatedListStackNode(14383, 6, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIlN5bSIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJ8IiksbGF5b3V0cygiTEFZT1VUTElTVCIpXSkp, new NonTerminalStackNode(14379, 0, "Sym", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(14380, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(14381, 2, cHJvZChsaXQoInwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyNCwxMjQpXSldLHt9KQ0000, new int[] {124}, null, null), new NonTerminalStackNode(14382, 3, "layouts_LAYOUTLIST", null, null)}, true, null, null); - tmp[0] = new LiteralStackNode(14372, 0, cHJvZChsaXQoIigiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pXSx7fSk00, new int[] {40}, null, null); - tmp[3] = new NonTerminalStackNode(14376, 3, "layouts_LAYOUTLIST", null, null); - tmp[5] = new NonTerminalStackNode(14378, 5, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(14373, 1, "layouts_LAYOUTLIST", null, null); - tmp[7] = new NonTerminalStackNode(14385, 7, "layouts_LAYOUTLIST", null, null); - tmp[8] = new LiteralStackNode(14386, 8, cHJvZChsaXQoIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {41}, null, null); + tmp[4] = new LiteralStackNode(14314, 4, cHJvZChsaXQoInwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyNCwxMjQpXSldLHt9KQ0000, new int[] {124}, null, null); + tmp[2] = new NonTerminalStackNode(14311, 2, "Sym", null, null); + tmp[6] = new SeparatedListStackNode(14320, 6, cmVndWxhcihcaXRlci1zZXBzKHNvcnQoIlN5bSIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJ8IiksbGF5b3V0cygiTEFZT1VUTElTVCIpXSkp, new NonTerminalStackNode(14316, 0, "Sym", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(14317, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(14318, 2, cHJvZChsaXQoInwiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDEyNCwxMjQpXSldLHt9KQ0000, new int[] {124}, null, null), new NonTerminalStackNode(14319, 3, "layouts_LAYOUTLIST", null, null)}, true, null, null); + tmp[0] = new LiteralStackNode(14309, 0, cHJvZChsaXQoIigiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pXSx7fSk00, new int[] {40}, null, null); + tmp[3] = new NonTerminalStackNode(14313, 3, "layouts_LAYOUTLIST", null, null); + tmp[5] = new NonTerminalStackNode(14315, 5, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(14310, 1, "layouts_LAYOUTLIST", null, null); + tmp[7] = new NonTerminalStackNode(14322, 7, "layouts_LAYOUTLIST", null, null); + tmp[8] = new LiteralStackNode(14323, 8, cHJvZChsaXQoIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {41}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiYWx0ZXJuYXRpdmUiLHNvcnQoIlN5bSIpKSxbbGl0KCIoIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJmaXJzdCIsc29ydCgiU3ltIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoInwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoImFsdGVybmF0aXZlcyIsXGl0ZXItc2Vwcyhzb3J0KCJTeW0iKSxbbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgifCIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCIpIildLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgiZm9sbG93Iixzb3J0KCJTeW0iKSksW2xhYmVsKCJzeW1ib2wiLHNvcnQoIlN5bSIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJcPlw11IiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJtYXRjaCIsc29ydCgiU3ltIikpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[4] = new NonTerminalStackNode(14490, 4, "Sym", null, null); - tmp[2] = new LiteralStackNode(14488, 2, cHJvZChsaXQoIlw11XD4iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDYyLDYyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg2Miw2MildKV0se30p, new int[] {62,62}, null, null); - tmp[0] = new NonTerminalStackNode(14485, 0, "Sym", null, null); - tmp[3] = new NonTerminalStackNode(14489, 3, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(14487, 1, "layouts_LAYOUTLIST", null, null); + tmp[4] = new NonTerminalStackNode(14427, 4, "Sym", null, null); + tmp[2] = new LiteralStackNode(14425, 2, cHJvZChsaXQoIlw11XD4iKSxbXGNoYXItY2xhc3MoW3JhbmdlKDYyLDYyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg2Miw2MildKV0se30p, new int[] {62,62}, null, null); + tmp[0] = new NonTerminalStackNode(14422, 0, "Sym", null, null); + tmp[3] = new NonTerminalStackNode(14426, 3, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(14424, 1, "layouts_LAYOUTLIST", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiZm9sbG93Iixzb3J0KCJTeW0iKSksW2xhYmVsKCJzeW1ib2wiLHNvcnQoIlN5bSIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCJcPlw11IiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJtYXRjaCIsc29ydCgiU3ltIikpXSx7fSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgicGFyYW1ldGVyIixzb3J0KCJTeW0iKSksW2xpdCgiJiIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgibm9udGVybWluYWwiLGxleCgiTm9udGVybWluYWwiKSldLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[3]; - tmp[0] = new LiteralStackNode(14444, 0, cHJvZChsaXQoIiYiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDM4LDM4KV0pXSx7fSk00, new int[] {38}, null, null); - tmp[2] = new NonTerminalStackNode(14446, 2, "Nonterminal", null, null); - tmp[1] = new NonTerminalStackNode(14445, 1, "layouts_LAYOUTLIST", null, null); + tmp[0] = new LiteralStackNode(14381, 0, cHJvZChsaXQoIiYiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDM4LDM4KV0pXSx7fSk00, new int[] {38}, null, null); + tmp[2] = new NonTerminalStackNode(14383, 2, "Nonterminal", null, null); + tmp[1] = new NonTerminalStackNode(14382, 1, "layouts_LAYOUTLIST", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgicGFyYW1ldGVyIixzb3J0KCJTeW0iKSksW2xpdCgiJiIpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgibm9udGVybWluYWwiLGxleCgiTm9udGVybWluYWwiKSldLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgibGFiZWxlZCIsc29ydCgiU3ltIikpLFtsYWJlbCgic3ltYm9sIixzb3J0KCJTeW0iKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJsYWJlbCIsbGV4KCJOb250ZXJtaW5hbExhYmVsIikpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[3]; - tmp[0] = new NonTerminalStackNode(14450, 0, "Sym", null, null); - tmp[2] = new NonTerminalStackNode(14453, 2, "NonterminalLabel", null, null); - tmp[1] = new NonTerminalStackNode(14452, 1, "layouts_LAYOUTLIST", null, null); + tmp[0] = new NonTerminalStackNode(14387, 0, "Sym", null, null); + tmp[2] = new NonTerminalStackNode(14390, 2, "NonterminalLabel", null, null); + tmp[1] = new NonTerminalStackNode(14389, 1, "layouts_LAYOUTLIST", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgibGFiZWxlZCIsc29ydCgiU3ltIikpLFtsYWJlbCgic3ltYm9sIixzb3J0KCJTeW0iKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJsYWJlbCIsbGV4KCJOb250ZXJtaW5hbExhYmVsIikpXSx7fSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJTeW0iKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJcXGl0ZXItc2Vwcyhzb3J0KFwiU3ltXCIpLFtsaXQoXCJ8XCIpXSkiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKFxpdGVyLXNlcHMoc29ydCgiU3ltIiksW2xheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoInwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIildKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[0] = new CharStackNode(14275, 0, new int[][]{{0,0}}, null, null); - tmp[4] = new CharStackNode(14280, 4, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(14277, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[3] = new ListStackNode(14279, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(14278, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[1] = new LiteralStackNode(14276, 1, cHJvZChsaXQoIlxcaXRlci1zZXBzKHNvcnQoXCJTeW1cIiksW2xpdChcInxcIildKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoOTIsOTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ1LDQ1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTIsMTEyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4Myw4MyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTIxLDEyMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NCw0NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTEsOTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTI0LDEyNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Myw5MyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {92,105,116,101,114,45,115,101,112,115,40,115,111,114,116,40,34,83,121,109,34,41,44,91,108,105,116,40,34,124,34,41,93,41}, null, null); + tmp[0] = new CharStackNode(14212, 0, new int[][]{{0,0}}, null, null); + tmp[4] = new CharStackNode(14217, 4, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(14214, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[3] = new ListStackNode(14216, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(14215, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[1] = new LiteralStackNode(14213, 1, cHJvZChsaXQoIlxcaXRlci1zZXBzKHNvcnQoXCJTeW1cIiksW2xpdChcInxcIildKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoOTIsOTIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ1LDQ1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTIsMTEyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4Myw4MyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTIxLDEyMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA5LDEwOSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NCw0NCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTEsOTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOCwxMDgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTI0LDEyNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Myw5MyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {92,105,116,101,114,45,115,101,112,115,40,115,111,114,116,40,34,83,121,109,34,41,44,91,108,105,116,40,34,124,34,41,93,41}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJTeW0iKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJcXGl0ZXItc2Vwcyhzb3J0KFwiU3ltXCIpLFtsaXQoXCJ8XCIpXSkiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKFxpdGVyLXNlcHMoc29ydCgiU3ltIiksW2xheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoInwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIildKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiZW1wdHkiLHNvcnQoIlN5bSIpKSxbbGl0KCIoIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiKSIpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[3]; - tmp[0] = new LiteralStackNode(14425, 0, cHJvZChsaXQoIigiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pXSx7fSk00, new int[] {40}, null, null); - tmp[2] = new LiteralStackNode(14427, 2, cHJvZChsaXQoIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {41}, null, null); - tmp[1] = new NonTerminalStackNode(14426, 1, "layouts_LAYOUTLIST", null, null); + tmp[0] = new LiteralStackNode(14362, 0, cHJvZChsaXQoIigiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pXSx7fSk00, new int[] {40}, null, null); + tmp[2] = new LiteralStackNode(14364, 2, cHJvZChsaXQoIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDQxLDQxKV0pXSx7fSk00, new int[] {41}, null, null); + tmp[1] = new NonTerminalStackNode(14363, 1, "layouts_LAYOUTLIST", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiZW1wdHkiLHNvcnQoIlN5bSIpKSxbbGl0KCIoIiksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxpdCgiKSIpXSx7fSk00, tmp); } public static void init(ExpectBuilder builder){ @@ -13926,27 +13911,27 @@ protected static class QualifiedName { protected static final void _init_cHJvZChsYWJlbCgiZGVmYXVsdCIsc29ydCgiUXVhbGlmaWVkTmFtZSIpKSxbY29uZGl0aW9uYWwobGFiZWwoIm5hbWVzIixcaXRlci1zZXBzKGxleCgiTmFtZSIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCI6OiIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKSx7XG5vdC1mb2xsb3cobGl0KCI6OiIpKX0pXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new SeparatedListStackNode(14643, 0, cmVndWxhcihcaXRlci1zZXBzKGxleCgiTmFtZSIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCI6OiIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(14636, 0, "Name", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(14637, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(14638, 2, cHJvZChsaXQoIjo6IiksW1xjaGFyLWNsYXNzKFtyYW5nZSg1OCw1OCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNTgsNTgpXSldLHt9KQ0000, new int[] {58,58}, null, null), new NonTerminalStackNode(14639, 3, "layouts_LAYOUTLIST", null, null)}, true, null, new ICompletionFilter[] {new StringFollowRestriction(new int[] {58,58})}); + tmp[0] = new SeparatedListStackNode(14580, 0, cmVndWxhcihcaXRlci1zZXBzKGxleCgiTmFtZSIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCI6OiIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKQ0000, new NonTerminalStackNode(14573, 0, "Name", null, null), (AbstractStackNode[]) new AbstractStackNode[]{new NonTerminalStackNode(14574, 1, "layouts_LAYOUTLIST", null, null), new LiteralStackNode(14575, 2, cHJvZChsaXQoIjo6IiksW1xjaGFyLWNsYXNzKFtyYW5nZSg1OCw1OCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNTgsNTgpXSldLHt9KQ0000, new int[] {58,58}, null, null), new NonTerminalStackNode(14576, 3, "layouts_LAYOUTLIST", null, null)}, true, null, new ICompletionFilter[] {new StringFollowRestriction(new int[] {58,58})}); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiZGVmYXVsdCIsc29ydCgiUXVhbGlmaWVkTmFtZSIpKSxbY29uZGl0aW9uYWwobGFiZWwoIm5hbWVzIixcaXRlci1zZXBzKGxleCgiTmFtZSIpLFtsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGl0KCI6OiIpLGxheW91dHMoIkxBWU9VVExJU1QiKV0pKSx7XG5vdC1mb2xsb3cobGl0KCI6OiIpKX0pXSx7fSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJRdWFsaWZpZWROYW1lIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgiXFxpdGVyLXNlcHMoc29ydChcIlF1YWxpZmllZE5hbWVcIiksW2xpdChcIixcIildKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoXGl0ZXItc2Vwcyhzb3J0KCJRdWFsaWZpZWROYW1lIiksW2xheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIiwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIildKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[4] = new CharStackNode(14651, 4, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(14648, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[0] = new CharStackNode(14646, 0, new int[][]{{0,0}}, null, null); - tmp[3] = new ListStackNode(14650, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(14649, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[1] = new LiteralStackNode(14647, 1, cHJvZChsaXQoIlxcaXRlci1zZXBzKHNvcnQoXCJRdWFsaWZpZWROYW1lXCIpLFtsaXQoXCIsXCIpXSkiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkyLDkyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NSw0NSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEyLDExMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODEsODEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNywxMTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDIsMTAyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDAsMTAwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg3OCw3OCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOSwxMDkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDQsNDQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDkxLDkxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDkzLDkzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {92,105,116,101,114,45,115,101,112,115,40,115,111,114,116,40,34,81,117,97,108,105,102,105,101,100,78,97,109,101,34,41,44,91,108,105,116,40,34,44,34,41,93,41}, null, null); + tmp[4] = new CharStackNode(14588, 4, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(14585, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[0] = new CharStackNode(14583, 0, new int[][]{{0,0}}, null, null); + tmp[3] = new ListStackNode(14587, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(14586, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[1] = new LiteralStackNode(14584, 1, cHJvZChsaXQoIlxcaXRlci1zZXBzKHNvcnQoXCJRdWFsaWZpZWROYW1lXCIpLFtsaXQoXCIsXCIpXSkiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDkyLDkyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0NSw0NSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTEyLDExMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODEsODEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNywxMTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDIsMTAyKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDAsMTAwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg3OCw3OCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwOSwxMDkpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMSwxMDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDQsNDQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDkxLDkxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQ0LDQ0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDkzLDkzKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {92,105,116,101,114,45,115,101,112,115,40,115,111,114,116,40,34,81,117,97,108,105,102,105,101,100,78,97,109,101,34,41,44,91,108,105,116,40,34,44,34,41,93,41}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJRdWFsaWZpZWROYW1lIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgiXFxpdGVyLXNlcHMoc29ydChcIlF1YWxpZmllZE5hbWVcIiksW2xpdChcIixcIildKSIpLGxpdCgiOiIpLGl0ZXIoXGNoYXItY2xhc3MoW3JhbmdlKDQ4LDU3KV0pKSxcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pXSx7dGFnKCJob2xlVHlwZSIoXGl0ZXItc2Vwcyhzb3J0KCJRdWFsaWZpZWROYW1lIiksW2xheW91dHMoIkxBWU9VVExJU1QiKSxsaXQoIiwiKSxsYXlvdXRzKCJMQVlPVVRMSVNUIildKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJRdWFsaWZpZWROYW1lIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIlF1YWxpZmllZE5hbWVcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKHNvcnQoIlF1YWxpZmllZE5hbWUiKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[4] = new CharStackNode(14664, 4, new int[][]{{0,0}}, null, null); - tmp[2] = new LiteralStackNode(14661, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[0] = new CharStackNode(14659, 0, new int[][]{{0,0}}, null, null); - tmp[3] = new ListStackNode(14663, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(14662, 0, new int[][]{{48,57}}, null, null), true, null, null); - tmp[1] = new LiteralStackNode(14660, 1, cHJvZChsaXQoInNvcnQoXCJRdWFsaWZpZWROYW1lXCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDgxLDgxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTcsMTE3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAyLDEwMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAwLDEwMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNzgsNzgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDksMTA5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {115,111,114,116,40,34,81,117,97,108,105,102,105,101,100,78,97,109,101,34,41}, null, null); + tmp[4] = new CharStackNode(14601, 4, new int[][]{{0,0}}, null, null); + tmp[2] = new LiteralStackNode(14598, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[0] = new CharStackNode(14596, 0, new int[][]{{0,0}}, null, null); + tmp[3] = new ListStackNode(14600, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(14599, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[1] = new LiteralStackNode(14597, 1, cHJvZChsaXQoInNvcnQoXCJRdWFsaWZpZWROYW1lXCIpIiksW1xjaGFyLWNsYXNzKFtyYW5nZSgxMTUsMTE1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTEsMTExKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTQsMTE0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTYsMTE2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MCw0MCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMzQsMzQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDgxLDgxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMTcsMTE3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg5Nyw5NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA4LDEwOCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAyLDEwMildKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA1LDEwNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAxLDEwMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTAwLDEwMCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNzgsNzgpXSksXGNoYXItY2xhc3MoW3JhbmdlKDk3LDk3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDksMTA5KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {115,111,114,116,40,34,81,117,97,108,105,102,105,101,100,78,97,109,101,34,41}, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJRdWFsaWZpZWROYW1lIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIlF1YWxpZmllZE5hbWVcIikiKSxsaXQoIjoiKSxpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSksXGNoYXItY2xhc3MoW3JhbmdlKDAsMCldKV0se3RhZygiaG9sZVR5cGUiKHNvcnQoIlF1YWxpZmllZE5hbWUiKSkpfSk00, tmp); } public static void init(ExpectBuilder builder){ @@ -13971,37 +13956,37 @@ protected static class StringMiddle { protected static final void _init_cHJvZChsYWJlbCgidGVtcGxhdGUiLHNvcnQoIlN0cmluZ01pZGRsZSIpKSxbbGFiZWwoIm1pZCIsbGV4KCJNaWRTdHJpbmdDaGFycyIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInRlbXBsYXRlIixzb3J0KCJTdHJpbmdUZW1wbGF0ZSIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInRhaWwiLHNvcnQoIlN0cmluZ01pZGRsZSIpKV0se30p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[3] = new NonTerminalStackNode(14862, 3, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(14859, 1, "layouts_LAYOUTLIST", null, null); - tmp[0] = new NonTerminalStackNode(14857, 0, "MidStringChars", null, null); - tmp[4] = new NonTerminalStackNode(14863, 4, "StringMiddle", null, null); - tmp[2] = new NonTerminalStackNode(14860, 2, "StringTemplate", null, null); + tmp[3] = new NonTerminalStackNode(14799, 3, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(14796, 1, "layouts_LAYOUTLIST", null, null); + tmp[0] = new NonTerminalStackNode(14794, 0, "MidStringChars", null, null); + tmp[4] = new NonTerminalStackNode(14800, 4, "StringMiddle", null, null); + tmp[2] = new NonTerminalStackNode(14797, 2, "StringTemplate", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgidGVtcGxhdGUiLHNvcnQoIlN0cmluZ01pZGRsZSIpKSxbbGFiZWwoIm1pZCIsbGV4KCJNaWRTdHJpbmdDaGFycyIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInRlbXBsYXRlIixzb3J0KCJTdHJpbmdUZW1wbGF0ZSIpKSxsYXlvdXRzKCJMQVlPVVRMSVNUIiksbGFiZWwoInRhaWwiLHNvcnQoIlN0cmluZ01pZGRsZSIpKV0se30p, tmp); } protected static final void _init_cHJvZChsYWJlbCgibWlkIixzb3J0KCJTdHJpbmdNaWRkbGUiKSksW2xhYmVsKCJtaWQiLGxleCgiTWlkU3RyaW5nQ2hhcnMiKSldLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new NonTerminalStackNode(14867, 0, "MidStringChars", null, null); + tmp[0] = new NonTerminalStackNode(14804, 0, "MidStringChars", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgibWlkIixzb3J0KCJTdHJpbmdNaWRkbGUiKSksW2xhYmVsKCJtaWQiLGxleCgiTWlkU3RyaW5nQ2hhcnMiKSldLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJTdHJpbmdNaWRkbGUiKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJzb3J0KFwiU3RyaW5nTWlkZGxlXCIpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihzb3J0KCJTdHJpbmdNaWRkbGUiKSkpfSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[2] = new LiteralStackNode(14873, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[4] = new CharStackNode(14876, 4, new int[][]{{0,0}}, null, null); - tmp[0] = new CharStackNode(14871, 0, new int[][]{{0,0}}, null, null); - tmp[1] = new LiteralStackNode(14872, 1, cHJvZChsaXQoInNvcnQoXCJTdHJpbmdNaWRkbGVcIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODMsODMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMywxMDMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDc3LDc3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDAsMTAwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDAsMTAwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {115,111,114,116,40,34,83,116,114,105,110,103,77,105,100,100,108,101,34,41}, null, null); - tmp[3] = new ListStackNode(14875, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(14874, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[2] = new LiteralStackNode(14810, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[4] = new CharStackNode(14813, 4, new int[][]{{0,0}}, null, null); + tmp[0] = new CharStackNode(14808, 0, new int[][]{{0,0}}, null, null); + tmp[1] = new LiteralStackNode(14809, 1, cHJvZChsaXQoInNvcnQoXCJTdHJpbmdNaWRkbGVcIikiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMSwxMTEpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDQwLDQwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODMsODMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNiwxMTYpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwNSwxMDUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExMCwxMTApXSksXGNoYXItY2xhc3MoW3JhbmdlKDEwMywxMDMpXSksXGNoYXItY2xhc3MoW3JhbmdlKDc3LDc3KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDUsMTA1KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDAsMTAwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDAsMTAwKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDgsMTA4KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgxMDEsMTAxKV0pLFxjaGFyLWNsYXNzKFtyYW5nZSgzNCwzNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDEsNDEpXSldLHt9KQ0000, new int[] {115,111,114,116,40,34,83,116,114,105,110,103,77,105,100,100,108,101,34,41}, null, null); + tmp[3] = new ListStackNode(14812, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(14811, 0, new int[][]{{48,57}}, null, null), true, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixzb3J0KCJTdHJpbmdNaWRkbGUiKSksW1xjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSksbGl0KCJzb3J0KFwiU3RyaW5nTWlkZGxlXCIpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihzb3J0KCJTdHJpbmdNaWRkbGUiKSkpfSk00, tmp); } protected static final void _init_cHJvZChsYWJlbCgiaW50ZXJwb2xhdGVkIixzb3J0KCJTdHJpbmdNaWRkbGUiKSksW2xhYmVsKCJtaWQiLGxleCgiTWlkU3RyaW5nQ2hhcnMiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJleHByZXNzaW9uIixzb3J0KCJFeHByZXNzaW9uIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgidGFpbCIsc29ydCgiU3RyaW5nTWlkZGxlIikpXSx7fSk00(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[0] = new NonTerminalStackNode(14880, 0, "MidStringChars", null, null); - tmp[4] = new NonTerminalStackNode(14886, 4, "StringMiddle", null, null); - tmp[2] = new NonTerminalStackNode(14883, 2, "Expression", null, null); - tmp[3] = new NonTerminalStackNode(14885, 3, "layouts_LAYOUTLIST", null, null); - tmp[1] = new NonTerminalStackNode(14882, 1, "layouts_LAYOUTLIST", null, null); + tmp[0] = new NonTerminalStackNode(14817, 0, "MidStringChars", null, null); + tmp[4] = new NonTerminalStackNode(14823, 4, "StringMiddle", null, null); + tmp[2] = new NonTerminalStackNode(14820, 2, "Expression", null, null); + tmp[3] = new NonTerminalStackNode(14822, 3, "layouts_LAYOUTLIST", null, null); + tmp[1] = new NonTerminalStackNode(14819, 1, "layouts_LAYOUTLIST", null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiaW50ZXJwb2xhdGVkIixzb3J0KCJTdHJpbmdNaWRkbGUiKSksW2xhYmVsKCJtaWQiLGxleCgiTWlkU3RyaW5nQ2hhcnMiKSksbGF5b3V0cygiTEFZT1VUTElTVCIpLGxhYmVsKCJleHByZXNzaW9uIixzb3J0KCJFeHByZXNzaW9uIikpLGxheW91dHMoIkxBWU9VVExJU1QiKSxsYWJlbCgidGFpbCIsc29ydCgiU3RyaW5nTWlkZGxlIikpXSx7fSk00, tmp); } public static void init(ExpectBuilder builder){ @@ -14028,17 +14013,17 @@ protected static class URLChars { protected static final void _init_cHJvZChsZXgoIlVSTENoYXJzIiksW1xpdGVyLXN0YXIoXGNoYXItY2xhc3MoW3JhbmdlKDEsOCkscmFuZ2UoMTEsMTIpLHJhbmdlKDE0LDMxKSxyYW5nZSgzMyw1OSkscmFuZ2UoNjEsMTIzKSxyYW5nZSgxMjUsMTExNDExMSldKSldLHt9KQ0000(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[1]; - tmp[0] = new ListStackNode(14891, 0, cmVndWxhcihcaXRlci1zdGFyKFxjaGFyLWNsYXNzKFtyYW5nZSgxLDgpLHJhbmdlKDExLDEyKSxyYW5nZSgxNCwzMSkscmFuZ2UoMzMsNTkpLHJhbmdlKDYxLDEyMykscmFuZ2UoMTI1LDExMTQxMTEpXSkpKQ0000, new CharStackNode(14890, 0, new int[][]{{1,8},{11,12},{14,31},{33,59},{61,123},{125,1114111}}, null, null), false, null, null); + tmp[0] = new ListStackNode(14828, 0, cmVndWxhcihcaXRlci1zdGFyKFxjaGFyLWNsYXNzKFtyYW5nZSgxLDgpLHJhbmdlKDExLDEyKSxyYW5nZSgxNCwzMSkscmFuZ2UoMzMsNTkpLHJhbmdlKDYxLDEyMykscmFuZ2UoMTI1LDExMTQxMTEpXSkpKQ0000, new CharStackNode(14827, 0, new int[][]{{1,8},{11,12},{14,31},{33,59},{61,123},{125,1114111}}, null, null), false, null, null); builder.addAlternative(RascalParser.cHJvZChsZXgoIlVSTENoYXJzIiksW1xpdGVyLXN0YXIoXGNoYXItY2xhc3MoW3JhbmdlKDEsOCkscmFuZ2UoMTEsMTIpLHJhbmdlKDE0LDMxKSxyYW5nZSgzMyw1OSkscmFuZ2UoNjEsMTIzKSxyYW5nZSgxMjUsMTExNDExMSldKSldLHt9KQ0000, tmp); } protected static final void _init_cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIlVSTENoYXJzIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIlVSTENoYXJzXCIpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihsZXgoIlVSTENoYXJzIikpKX0p(ExpectBuilder builder) { AbstractStackNode[] tmp = (AbstractStackNode[]) new AbstractStackNode[5]; - tmp[2] = new LiteralStackNode(14896, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); - tmp[4] = new CharStackNode(14899, 4, new int[][]{{0,0}}, null, null); - tmp[0] = new CharStackNode(14894, 0, new int[][]{{0,0}}, null, null); - tmp[1] = new LiteralStackNode(14895, 1, cHJvZChsaXQoInNvcnQoXCJVUkxDaGFyc1wiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4NSw4NSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODIsODIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDc2LDc2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg2Nyw2NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA0LDEwNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,85,82,76,67,104,97,114,115,34,41}, null, null); - tmp[3] = new ListStackNode(14898, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(14897, 0, new int[][]{{48,57}}, null, null), true, null, null); + tmp[2] = new LiteralStackNode(14833, 2, cHJvZChsaXQoIjoiKSxbXGNoYXItY2xhc3MoW3JhbmdlKDU4LDU4KV0pXSx7fSk00, new int[] {58}, null, null); + tmp[4] = new CharStackNode(14836, 4, new int[][]{{0,0}}, null, null); + tmp[0] = new CharStackNode(14831, 0, new int[][]{{0,0}}, null, null); + tmp[1] = new LiteralStackNode(14832, 1, cHJvZChsaXQoInNvcnQoXCJVUkxDaGFyc1wiKSIpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMTE1LDExNSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTExLDExMSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE0LDExNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTE2LDExNildKSxcY2hhci1jbGFzcyhbcmFuZ2UoNDAsNDApXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg4NSw4NSldKSxcY2hhci1jbGFzcyhbcmFuZ2UoODIsODIpXSksXGNoYXItY2xhc3MoW3JhbmdlKDc2LDc2KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg2Nyw2NyldKSxcY2hhci1jbGFzcyhbcmFuZ2UoMTA0LDEwNCldKSxcY2hhci1jbGFzcyhbcmFuZ2UoOTcsOTcpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNCwxMTQpXSksXGNoYXItY2xhc3MoW3JhbmdlKDExNSwxMTUpXSksXGNoYXItY2xhc3MoW3JhbmdlKDM0LDM0KV0pLFxjaGFyLWNsYXNzKFtyYW5nZSg0MSw0MSldKV0se30p, new int[] {115,111,114,116,40,34,85,82,76,67,104,97,114,115,34,41}, null, null); + tmp[3] = new ListStackNode(14835, 3, cmVndWxhcihpdGVyKFxjaGFyLWNsYXNzKFtyYW5nZSg0OCw1NyldKSkp, new CharStackNode(14834, 0, new int[][]{{48,57}}, null, null), true, null, null); builder.addAlternative(RascalParser.cHJvZChsYWJlbCgiJE1ldGFIb2xlIixsZXgoIlVSTENoYXJzIikpLFtcY2hhci1jbGFzcyhbcmFuZ2UoMCwwKV0pLGxpdCgic29ydChcIlVSTENoYXJzXCIpIiksbGl0KCI6IiksaXRlcihcY2hhci1jbGFzcyhbcmFuZ2UoNDgsNTcpXSkpLFxjaGFyLWNsYXNzKFtyYW5nZSgwLDApXSldLHt0YWcoImhvbGVUeXBlIihsZXgoIlVSTENoYXJzIikpKX0p, tmp); } public static void init(ExpectBuilder builder){ @@ -14050,7 +14035,7 @@ public static void init(ExpectBuilder builder){ } } - private int nextFreeStackNodeId = 14901; + private int nextFreeStackNodeId = 14838; protected int getFreeStackNodeId() { return nextFreeStackNodeId++; } diff --git a/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc b/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc index 85571ea4b05..a701ed71ace 100644 --- a/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc +++ b/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc @@ -85,6 +85,7 @@ test bool originTracking() { @synopsis{Normalizer used to create lists out of other containers} value allContainersToLists(set[value] x) = [*x]; value allContainersToLists(value tup) = [] when \tuple(_) := typeOf(tup), "" == "\<\>"; +value allContainersToLists(<>) = []; value allContainersToLists() = [x]; value allContainersToLists() = [x,y]; value allContainersToLists() = [x,y,z]; diff --git a/src/org/rascalmpl/semantics/dynamic/Expression.java b/src/org/rascalmpl/semantics/dynamic/Expression.java index a7f7b5e6d12..70787931e03 100644 --- a/src/org/rascalmpl/semantics/dynamic/Expression.java +++ b/src/org/rascalmpl/semantics/dynamic/Expression.java @@ -2763,7 +2763,7 @@ public IBooleanResult buildBacktracker(IEvaluatorContext __eval) { @Override public IMatchingResult buildMatcher(IEvaluatorContext eval, boolean bindTypeParameters) { - return new TuplePattern(eval, this, buildMatchers(this.getElements(), eval, bindTypeParameters)); + return new TuplePattern(eval, this, buildMatchers(this.getElements0(), eval, bindTypeParameters)); } @Override @@ -2772,8 +2772,7 @@ public Result interpret(IEvaluator> __eval) { __eval.setCurrentAST(this); __eval.notifyAboutSuspension(this); - java.util.List elements = this - .getElements(); + var elements = this.getElements0(); IValue[] values = new IValue[elements.size()]; Type[] types = new Type[elements.size()]; @@ -2798,7 +2797,7 @@ public Result interpret(IEvaluator> __eval) { @Override public Type typeOf(Environment env, IEvaluator> eval, boolean instantiateTypeParameters) { - java.util.List fields = getElements(); + java.util.List fields = getElements0(); Type fieldTypes[] = new Type[fields.size()]; for (int i = 0; i < fields.size(); i++) { From 98c3e8b90591168a5d9f6020973fa41316eba5a1 Mon Sep 17 00:00:00 2001 From: Davy Landman Date: Fri, 20 Dec 2024 09:57:48 +0100 Subject: [PATCH 090/191] Finished rewriting REPL framework to prepare for compiler and parametric --- .../ideservices/BasicIDEServices.java | 15 ++-- .../repl/{BaseREPL2.java => BaseREPL.java} | 31 ++------ src/org/rascalmpl/repl/IREPLService.java | 2 + .../rascalmpl/repl/output/IOutputPrinter.java | 8 +- ...ter.java => AsciiStringOutputPrinter.java} | 10 +-- .../repl/parametric/ILanguageProtocol.java | 2 +- .../repl/rascal/IRascalLanguageProtocol.java | 6 +- .../repl/rascal/RascalInterpreterREPL.java | 39 ++++++--- .../repl/rascal/RascalReplServices.java | 17 +++- .../repl/rascal/RascalValuePrinter.java | 79 +++++++++++-------- src/org/rascalmpl/shell/RascalShell2.java | 47 +++-------- 11 files changed, 131 insertions(+), 125 deletions(-) rename src/org/rascalmpl/repl/{BaseREPL2.java => BaseREPL.java} (86%) rename src/org/rascalmpl/repl/output/impl/{StringOutputPrinter.java => AsciiStringOutputPrinter.java} (64%) diff --git a/src/org/rascalmpl/ideservices/BasicIDEServices.java b/src/org/rascalmpl/ideservices/BasicIDEServices.java index 4f6ea8063ab..2e9ccbaa3e8 100644 --- a/src/org/rascalmpl/ideservices/BasicIDEServices.java +++ b/src/org/rascalmpl/ideservices/BasicIDEServices.java @@ -20,6 +20,7 @@ import java.nio.file.Path; import java.nio.file.Paths; +import org.jline.terminal.Terminal; import org.rascalmpl.debug.IRascalMonitor; import org.rascalmpl.uri.URIResolverRegistry; import org.rascalmpl.uri.URIUtil; @@ -34,15 +35,12 @@ public class BasicIDEServices implements IDEServices { private final IRascalMonitor monitor; private final PrintWriter stderr; - private final Runnable clearRepl; + private final Terminal terminal; - public BasicIDEServices(PrintWriter stderr, IRascalMonitor monitor){ - this(stderr, monitor, () -> {}); - } - public BasicIDEServices(PrintWriter stderr, IRascalMonitor monitor, Runnable clearRepl){ + public BasicIDEServices(PrintWriter stderr, IRascalMonitor monitor, Terminal terminal){ this.stderr = stderr; this.monitor = monitor; - this.clearRepl = clearRepl; + this.terminal = terminal; } @Override @@ -51,9 +49,10 @@ public PrintWriter stderr() { } @Override - public void clearRepl() { - this.clearRepl.run(); + public Terminal activeTerminal() { + return terminal; } + public void browse(ISourceLocation loc, String title, int viewColumn){ browse(loc.getURI(), title, viewColumn); diff --git a/src/org/rascalmpl/repl/BaseREPL2.java b/src/org/rascalmpl/repl/BaseREPL.java similarity index 86% rename from src/org/rascalmpl/repl/BaseREPL2.java rename to src/org/rascalmpl/repl/BaseREPL.java index 1975fe8bbe4..ddd70ee3e53 100644 --- a/src/org/rascalmpl/repl/BaseREPL2.java +++ b/src/org/rascalmpl/repl/BaseREPL.java @@ -23,19 +23,18 @@ import org.rascalmpl.repl.output.IErrorCommandOutput; import org.rascalmpl.repl.output.IOutputPrinter; -public class BaseREPL2 { +public class BaseREPL { private final IREPLService replService; private final Terminal term; private final LineReader reader; private volatile boolean keepRunning = true; private final @MonotonicNonNull DefaultHistory history; - private String currentPrompt; + private final String normalPrompt; private final boolean ansiColorsSupported; - private final boolean advancedTermFeaturesSupported; private final boolean unicodeSupported; - public BaseREPL2(IREPLService replService, Terminal term) { + public BaseREPL(IREPLService replService, Terminal term) { this.replService = replService; this.term = term; @@ -60,23 +59,9 @@ public BaseREPL2(IREPLService replService, Terminal term) { if (replService.supportsCompletion()) { reader.completer(new AggregateCompleter(replService.completers())); } - - switch (term.getType()) { - case Terminal.TYPE_DUMB: - this.ansiColorsSupported = false; - this.advancedTermFeaturesSupported = false; - break; - case Terminal.TYPE_DUMB_COLOR: - this.ansiColorsSupported = false; - this.advancedTermFeaturesSupported = true; - break; - default: - this.ansiColorsSupported = true; - this.advancedTermFeaturesSupported = true; - break; - } + this.ansiColorsSupported = !term.getType().equals(Terminal.TYPE_DUMB); this.unicodeSupported = term.encoding().newEncoder().canEncode("💓"); - this.currentPrompt = replService.prompt(ansiColorsSupported, unicodeSupported); + this.normalPrompt = replService.prompt(ansiColorsSupported, unicodeSupported); reader.variable(LineReader.SECONDARY_PROMPT_PATTERN, replService.parseErrorPrompt(ansiColorsSupported, unicodeSupported)); this.reader = reader.build(); @@ -101,7 +86,7 @@ public void run() throws IOException { while (keepRunning) { try { replService.flush(); - String line = reader.readLine(this.currentPrompt); + String line = reader.readLine(this.normalPrompt); if (line == null) { // EOF @@ -112,7 +97,7 @@ public void run() throws IOException { } catch (UserInterruptException u) { // only thrown while `readLine` is active - reader.printAbove(">>>>>>> Interrupted"); + reader.printAbove(replService.interruptedPrompt(ansiColorsSupported, unicodeSupported)); term.flush(); } finally { @@ -206,6 +191,6 @@ private void writeResult(ICommandOutput result) { writer = result.asPlain(); } - writer.write(target); + writer.write(target, unicodeSupported); } } diff --git a/src/org/rascalmpl/repl/IREPLService.java b/src/org/rascalmpl/repl/IREPLService.java index e7792540a5c..b9f9b0c8f8e 100644 --- a/src/org/rascalmpl/repl/IREPLService.java +++ b/src/org/rascalmpl/repl/IREPLService.java @@ -98,4 +98,6 @@ default Path historyFile() { */ void flush(); + String interruptedPrompt(boolean ansiColorsSupported, boolean unicodeSupported); + } diff --git a/src/org/rascalmpl/repl/output/IOutputPrinter.java b/src/org/rascalmpl/repl/output/IOutputPrinter.java index 83c1b1c0c76..06ef62caedf 100644 --- a/src/org/rascalmpl/repl/output/IOutputPrinter.java +++ b/src/org/rascalmpl/repl/output/IOutputPrinter.java @@ -14,8 +14,9 @@ public interface IOutputPrinter { /** * Write the output on this print writer interface. It should always print something, even if it's a warning saying it cannot be printed * @param target where to write the output to. + * @param unicodeSupported if the target can render unicode characters */ - void write(PrintWriter target); + void write(PrintWriter target, boolean unicodeSupported); String mimeType(); @@ -24,12 +25,13 @@ public interface IOutputPrinter { * The standard implementation takes care to just call the write function with a buffer. * If you however can provide a streaming reading, override this function instead, depending * on the consumer, it might be called instead of the write function. + * @param unicodeSupported if the consumer can render unicode characters * @return a reader that produces the same contents as the write function, but in a pull style instead of push. */ - default Reader asReader() { + default Reader asReader(boolean unicodeSupported) { try (var result = new StringWriter()) { try (var resultWriter = new PrintWriter(result)) { - write(resultWriter); + write(resultWriter, unicodeSupported); } return new StringReader(result.toString()); } diff --git a/src/org/rascalmpl/repl/output/impl/StringOutputPrinter.java b/src/org/rascalmpl/repl/output/impl/AsciiStringOutputPrinter.java similarity index 64% rename from src/org/rascalmpl/repl/output/impl/StringOutputPrinter.java rename to src/org/rascalmpl/repl/output/impl/AsciiStringOutputPrinter.java index 5d856462d8d..54219ba7140 100644 --- a/src/org/rascalmpl/repl/output/impl/StringOutputPrinter.java +++ b/src/org/rascalmpl/repl/output/impl/AsciiStringOutputPrinter.java @@ -7,14 +7,14 @@ import org.rascalmpl.repl.output.IOutputPrinter; import org.rascalmpl.repl.output.MimeTypes; -public class StringOutputPrinter implements IOutputPrinter { +public class AsciiStringOutputPrinter implements IOutputPrinter { private final String body; - public StringOutputPrinter(String body) { + public AsciiStringOutputPrinter(String body) { this(body, MimeTypes.PLAIN_TEXT); } - public StringOutputPrinter(String body, String mimeType) { + public AsciiStringOutputPrinter(String body, String mimeType) { this.body = body; } @@ -24,12 +24,12 @@ public String mimeType() { } @Override - public void write(PrintWriter target) { + public void write(PrintWriter target, boolean unicodeSupported) { target.println(body); } @Override - public Reader asReader() { + public Reader asReader(boolean unicodeSupported) { return new StringReader(body + System.lineSeparator()); } } diff --git a/src/org/rascalmpl/repl/parametric/ILanguageProtocol.java b/src/org/rascalmpl/repl/parametric/ILanguageProtocol.java index a85cc6eb084..26d921b6d0e 100644 --- a/src/org/rascalmpl/repl/parametric/ILanguageProtocol.java +++ b/src/org/rascalmpl/repl/parametric/ILanguageProtocol.java @@ -21,7 +21,7 @@ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY * WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -package org.rascalmpl.repl; +package org.rascalmpl.repl.parametric; import java.io.InputStream; import java.io.PrintWriter; diff --git a/src/org/rascalmpl/repl/rascal/IRascalLanguageProtocol.java b/src/org/rascalmpl/repl/rascal/IRascalLanguageProtocol.java index fc8c1609bef..cfa00e8ccc7 100644 --- a/src/org/rascalmpl/repl/rascal/IRascalLanguageProtocol.java +++ b/src/org/rascalmpl/repl/rascal/IRascalLanguageProtocol.java @@ -28,16 +28,18 @@ import java.util.List; import java.util.Map; +import org.jline.terminal.Terminal; import org.rascalmpl.debug.IRascalMonitor; import org.rascalmpl.ideservices.IDEServices; import org.rascalmpl.repl.output.ICommandOutput; import org.rascalmpl.values.parsetrees.ITree; + public interface IRascalLanguageProtocol { - IDEServices buildIDEService(PrintWriter err, IRascalMonitor monitor); + IDEServices buildIDEService(PrintWriter err, IRascalMonitor monitor, Terminal term); /** * During the constructor call initialize is called after the REPL is setup enough to have a stdout and std err to write to. @@ -73,7 +75,7 @@ public interface IRascalLanguageProtocol { * * If possible, print the current stack trace. */ - void stackTraceRequested(); + ICommandOutput stackTraceRequested(); void flush(); diff --git a/src/org/rascalmpl/repl/rascal/RascalInterpreterREPL.java b/src/org/rascalmpl/repl/rascal/RascalInterpreterREPL.java index 89db5caeac7..8d882b4c6cb 100644 --- a/src/org/rascalmpl/repl/rascal/RascalInterpreterREPL.java +++ b/src/org/rascalmpl/repl/rascal/RascalInterpreterREPL.java @@ -8,14 +8,16 @@ import java.io.PrintWriter; import java.io.Reader; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.function.Function; -import java.util.HashMap; import org.jline.reader.EndOfFileException; +import org.jline.terminal.Terminal; import org.rascalmpl.debug.IRascalMonitor; +import org.rascalmpl.exceptions.StackTrace; import org.rascalmpl.exceptions.Throw; import org.rascalmpl.ideservices.BasicIDEServices; import org.rascalmpl.ideservices.IDEServices; @@ -40,7 +42,7 @@ import io.usethesource.vallang.IValue; import io.usethesource.vallang.IValueFactory; -public abstract class RascalInterpreterREPL implements IRascalLanguageProtocol { +public class RascalInterpreterREPL implements IRascalLanguageProtocol { private Evaluator eval; private final RascalValuePrinter printer; @@ -70,8 +72,8 @@ protected Function liftProviderFunction(IFunction func) { } @Override - public IDEServices buildIDEService(PrintWriter err, IRascalMonitor monitor) { - return new BasicIDEServices(err, monitor); + public IDEServices buildIDEService(PrintWriter err, IRascalMonitor monitor, Terminal term) { + return new BasicIDEServices(err, monitor, term); } /** @@ -110,23 +112,26 @@ public ICommandOutput handleInput(String command) throws InterruptedException { return printer.outputResult(value); } catch (InterruptException ex) { - return printer.outputError((w, sw) -> { + return printer.outputError((w, sw, u) -> { + if (u) { + w.print("»» "); + } w.println("Interrupted"); ex.getRascalStackTrace().prettyPrintedString(w, sw); }); } catch (ParseError pe) { - return printer.outputError((w, sw) -> { + return printer.outputError((w, sw, _u) -> { parseErrorMessage(w, command, "prompt", pe, sw); }); } catch (StaticError e) { - return printer.outputError((w, sw) -> { + return printer.outputError((w, sw, _u) -> { staticErrorMessage(w, e, sw); }); } catch (Throw e) { - return printer.outputError((w, sw) -> { + return printer.outputError((w, sw, _u) -> { throwMessage(w,e, sw); }); } @@ -134,7 +139,7 @@ public ICommandOutput handleInput(String command) throws InterruptedException { throw new EndOfFileException("Quiting REPL"); } catch (Throwable e) { - return printer.outputError((w, sw) -> { + return printer.outputError((w, sw, _u) -> { throwableMessage(w, e, eval.getStackTrace(), sw); }); } @@ -149,9 +154,13 @@ public void cancelRunningCommandRequested() { } @Override - public void stackTraceRequested() { - // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'stackTraceRequested'"); + public ICommandOutput stackTraceRequested() { + StackTrace trace = eval.getStackTrace(); + return printer.prettyPrinted((w, sw, u) -> { + w.println("Current stack trace:"); + trace.prettyPrintedString(w, sw); + w.flush(); + }); } @Override @@ -176,4 +185,10 @@ public Map availableCommandLineOptions() { return commandLineOptions; } + @Override + public void flush() { + eval.getStdErr().flush(); + eval.getStdOut().flush(); + } + } diff --git a/src/org/rascalmpl/repl/rascal/RascalReplServices.java b/src/org/rascalmpl/repl/rascal/RascalReplServices.java index b3299a393e1..c9c346bbe4c 100644 --- a/src/org/rascalmpl/repl/rascal/RascalReplServices.java +++ b/src/org/rascalmpl/repl/rascal/RascalReplServices.java @@ -7,6 +7,8 @@ import java.util.TreeMap; import org.jline.jansi.Ansi; +import org.jline.jansi.AnsiColors; +import org.jline.jansi.Ansi.Color; import org.jline.reader.Completer; import org.jline.reader.Parser; import org.jline.terminal.Terminal; @@ -41,7 +43,7 @@ public void connect(Terminal term) { var monitor = new TerminalProgressBarMonitor(term); out = monitor; err = generateErrorStream(term, monitor); - var service = lang.buildIDEService(err, monitor); + var service = lang.buildIDEService(err, monitor, term); lang.initialize(term.reader(), out, err, service); } @@ -90,6 +92,7 @@ public void handleInterrupt() throws InterruptedException { @Override public String prompt(boolean ansiColorsSupported, boolean unicodeSupported) { + if (ansiColorsSupported) { return Ansi.ansi().reset().bold() + "rascal>" + Ansi.ansi().reset(); } @@ -144,5 +147,17 @@ public List completers() { result.add(new RascalLocationCompletion()); return result; } + + @Override + public String interruptedPrompt(boolean ansiColorsSupported, boolean unicodeSupported) { + String prompt = ">>>>>>> Interrupted"; + if (unicodeSupported) { + prompt = prompt.replace(">", "»"); + } + if (ansiColorsSupported) { + prompt = Ansi.ansi().reset().fgRed().bold() + prompt + Ansi.ansi().reset(); + } + return prompt; + } } diff --git a/src/org/rascalmpl/repl/rascal/RascalValuePrinter.java b/src/org/rascalmpl/repl/rascal/RascalValuePrinter.java index 426413f4250..bc3c8d90aac 100644 --- a/src/org/rascalmpl/repl/rascal/RascalValuePrinter.java +++ b/src/org/rascalmpl/repl/rascal/RascalValuePrinter.java @@ -18,7 +18,7 @@ import org.rascalmpl.repl.output.IOutputPrinter; import org.rascalmpl.repl.output.IWebContentOutput; import org.rascalmpl.repl.output.MimeTypes; -import org.rascalmpl.repl.output.impl.StringOutputPrinter; +import org.rascalmpl.repl.output.impl.AsciiStringOutputPrinter; import org.rascalmpl.repl.streams.LimitedLineWriter; import org.rascalmpl.repl.streams.LimitedWriter; import org.rascalmpl.repl.streams.ReplTextWriter; @@ -53,26 +53,40 @@ public abstract class RascalValuePrinter { @FunctionalInterface public static interface ThrowingWriter { - void write(PrintWriter writer, StandardTextWriter prettyPrinter) throws IOException; + void write(PrintWriter writer, StandardTextWriter prettyPrinter, boolean unicodeSupported) throws IOException; } public IErrorCommandOutput outputError(ThrowingWriter writer) { return new IErrorCommandOutput() { @Override public ICommandOutput getError() { - return new DoubleOutput(writer); + return prettyPrinted(writer); } @Override public IOutputPrinter asPlain() { - return new ParameterizedPrinterOutput(writer, plainIndentedPrinter, MimeTypes.PLAIN_TEXT); + return new PrettyPrintedOutput(writer, plainIndentedPrinter, MimeTypes.PLAIN_TEXT); + } + }; + } + + public ICommandOutput prettyPrinted(ThrowingWriter writer) { + return new IAnsiCommandOutput() { + @Override + public IOutputPrinter asAnsi() { + return new PrettyPrintedOutput(writer, ansiIndentedPrinter, MimeTypes.ANSI); + } + + @Override + public IOutputPrinter asPlain() { + return new PrettyPrintedOutput(writer, plainIndentedPrinter, MimeTypes.PLAIN_TEXT); } }; } public ICommandOutput outputResult(IRascalResult result) { if (result == null || result.getValue() == null) { - return () -> new StringOutputPrinter("ok", MimeTypes.PLAIN_TEXT); + return () -> new AsciiStringOutputPrinter("ok", MimeTypes.PLAIN_TEXT); } IValue value = result.getValue(); Type type = result.getStaticType(); @@ -83,14 +97,14 @@ public ICommandOutput outputResult(IRascalResult result) { ThrowingWriter resultWriter; if (type.isAbstractData() && type.isStrictSubtypeOf(RascalValueFactory.Tree) && !type.isBottom()) { - resultWriter = (w, sw) -> { + resultWriter = (w, sw, _u) -> { w.write("(" + type.toString() +") `"); TreeAdapter.yield((IConstructor)value, sw == ansiIndentedPrinter, w); w.write("`"); }; } else if (type.isString()) { - resultWriter = (w, sw) -> { + resultWriter = (w, sw, u) -> { // TODO: do something special for the reader version of IString, when that is released // for now, we only support write @@ -103,7 +117,7 @@ else if (type.isString()) { // "Self-suppression not permitted" } w.println(); - w.println("---"); + printShortLine(w, u); try (Writer wrt = new LimitedWriter(new LimitedLineWriter(w, LINE_LIMIT), CHAR_LIMIT)) { ((IString) value).write(wrt); } @@ -113,11 +127,11 @@ else if (type.isString()) { // "Self-suppression not permitted" } w.println(); - w.print("---"); + printShortLine(w, u); }; } else { - resultWriter = (w, sw) -> { + resultWriter = (w, sw, _u) -> { try (Writer wrt = new LimitedWriter(new LimitedLineWriter(w, LINE_LIMIT), CHAR_LIMIT)) { sw.write(value, wrt); } @@ -129,31 +143,22 @@ else if (type.isString()) { }; } - ThrowingWriter typePrefixed = (w, sw) -> { + ThrowingWriter typePrefixed = (w, sw, u) -> { w.write(type.toString()); w.write(": "); - resultWriter.write(w, sw); + resultWriter.write(w, sw, u); w.println(); }; - return new DoubleOutput(typePrefixed); + return prettyPrinted(typePrefixed); } - private static class DoubleOutput implements IAnsiCommandOutput { - private ThrowingWriter writer; - - DoubleOutput(ThrowingWriter writer) { - this.writer = writer; + private void printShortLine(PrintWriter writer, boolean unicodeSupported) { + if (unicodeSupported) { + writer.println("───"); } - - @Override - public IOutputPrinter asAnsi() { - return new ParameterizedPrinterOutput(writer, ansiIndentedPrinter, MimeTypes.ANSI); - } - - @Override - public IOutputPrinter asPlain() { - return new ParameterizedPrinterOutput(writer, plainIndentedPrinter, MimeTypes.PLAIN_TEXT); + else { + writer.println("---"); } } @@ -185,13 +190,13 @@ private ICommandOutput serveContent(IConstructor provider) { } catch (IOException e) { - return outputError((w, sw) -> { + return outputError((w, sw, _u) -> { w.println("Could not start webserver to render html content: "); w.println(e.getMessage()); }); } catch (URISyntaxException e) { - return outputError((w, sw) -> { + return outputError((w, sw, _u) -> { w.println("Could not start build the uri: "); w.println(e.getMessage()); }); @@ -215,13 +220,17 @@ private static class HostedWebContentOutput implements IWebContentOutput, IHtmlC public IOutputPrinter asPlain() { return new IOutputPrinter() { @Override - public void write(PrintWriter target) { + public void write(PrintWriter target, boolean unicodeSupported) { + if (unicodeSupported) { + target.print("🔗 "); + } target.print("Serving \'"); target.print(id); target.print("\' at |"); target.print(uri.toASCIIString()); target.println("|"); } + @Override public String mimeType() { return MimeTypes.PLAIN_TEXT; @@ -233,7 +242,7 @@ public String mimeType() { public IOutputPrinter asHtml() { return new IOutputPrinter() { @Override - public void write(PrintWriter target) { + public void write(PrintWriter target, boolean unicodeSupported) { target.print("", MimeTypes.HTML); + } + + @Override + public IOutputPrinter asPlain() { + return new AsciiStringOutputPrinter("Serving visual content at |" + URL + "|", MimeTypes.PLAIN_TEXT); + } + + @Override + public URI webUri() { + return URL; + } + + @Override + public String webTitle() { + // TODO: extract from ADT + return id; + } + + @Override + public int webviewColumn() { + // TODO: extract from ADT + return 1; + } + + }; + } + + private Function liftProviderFunction(IValue callback) { + IFunction func = (IFunction) callback; + + return (t) -> { + // This function will be called from another thread (the webserver) + // That is problematic if the current repl is doing something else at that time. + // The evaluator is already locked by the outer Rascal REPL (if this REPL was started from `startREPL`). + // synchronized(eval) { + return func.call(t); + }; + } + + private ICommandOutput handleJSONResponse(IConstructor response) { + IValue data = response.get("val"); + IWithKeywordParameters kws = response.asWithKeywordParameters(); + + IValue dtf = kws.getParameter("dateTimeFormat"); + IValue dai = kws.getParameter("dateTimeAsInt"); + + JsonValueWriter writer = new JsonValueWriter() + .setCalendarFormat(dtf != null ? ((IString) dtf).getValue() : "yyyy-MM-dd\'T\'HH:mm:ss\'Z\'") + .setDatesAsInt(dai != null ? ((IBool) dai).getValue() : true); + + return new ICommandOutput() { + @Override + public IOutputPrinter asPlain() { + return new IOutputPrinter() { + @Override + public void write(PrintWriter target, boolean unicodeSupported) { + try (var json = new JsonWriter(target)) { + writer.write(json, data); + } + catch (IOException ex) { + target.println("Unexpected IO exception: " + ex); + } + } + @Override + public String mimeType() { + return "application/json"; + } + }; + } + + }; + } + + private ICommandOutput handleFileResponse(IConstructor response) + throws UnsupportedEncodingException { + IString fileMimetype = (IString) response.get("mimeType"); + ISourceLocation file = (ISourceLocation) response.get("file"); + return new ISourceLocationCommandOutput() { + @Override + public ISourceLocation asLocation() { + return file; + } + @Override + public String locationMimeType() { + return fileMimetype.getValue(); + } + + @Override + public IOutputPrinter asPlain() { + return new AsciiStringOutputPrinter("Direct file returned, REPL doesn't support file results", MimeTypes.PLAIN_TEXT); + } + + }; + } + + private ICommandOutput handlePlainTextResponse(IConstructor response) + throws UnsupportedEncodingException { + String content = ((IString) response.get("content")).getValue(); + String contentMimetype = ((IString) response.get("mimeType")).getValue(); + return () -> new AsciiStringOutputPrinter(content, contentMimetype); + } + + @Override + public boolean supportsCompletion() { + return true; + } + + + private IValue call(IFunction f, Type[] types, IValue[] args) { + if (f instanceof AbstractFunction) { + Evaluator eval = (Evaluator) ((AbstractFunction) f).getEval(); + synchronized (eval) { + try { + eval.overrideDefaultWriters(input, stdout, stderr); + return f.call(args); + } + finally { + stdout.flush(); + stderr.flush(); + eval.revertToDefaultWriters(); + } + } + } + else { + throw RuntimeExceptionFactory.illegalArgument(f, "term repl only works with interpreter for now"); + } + } + + @Override + public Map completeFragment(String line, String word) { + IMap result = (IMap)call(completor, new Type[] { tf.stringType(), tf.stringType() }, + new IValue[] { vf.string(line), vf.string(word) }); + + var resultMap = new HashMap(); + var it = result.entryIterator(); + while (it.hasNext()) { + var c = it.next(); + resultMap.put(((IString)c.getKey()).getValue(), ((IString)c.getValue()).getValue()); + } + return resultMap; + } + } +} diff --git a/src/org/rascalmpl/library/util/TermREPL.java_disabled b/src/org/rascalmpl/library/util/TermREPL.java_disabled deleted file mode 100644 index d6728583314..00000000000 --- a/src/org/rascalmpl/library/util/TermREPL.java_disabled +++ /dev/null @@ -1,339 +0,0 @@ -package org.rascalmpl.library.util; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.io.OutputStreamWriter; -import java.io.PrintWriter; -import java.io.Reader; -import java.io.UnsupportedEncodingException; -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.function.Function; - - -import org.rascalmpl.exceptions.RuntimeExceptionFactory; -import org.rascalmpl.ideservices.IDEServices; -import org.rascalmpl.interpreter.Evaluator; -import org.rascalmpl.interpreter.IEvaluatorContext; -import org.rascalmpl.interpreter.result.AbstractFunction; -import org.rascalmpl.library.lang.json.internal.JsonValueWriter; -import org.rascalmpl.repl.BaseREPL; -import org.rascalmpl.repl.CompletionResult; -import org.rascalmpl.repl.ILanguageProtocol; -import org.rascalmpl.repl.REPLContentServer; -import org.rascalmpl.repl.REPLContentServerManager; -import org.rascalmpl.uri.URIResolverRegistry; -import org.rascalmpl.values.IRascalValueFactory; -import org.rascalmpl.values.functions.IFunction; - -import com.google.gson.stream.JsonWriter; - -import io.usethesource.vallang.IBool; -import io.usethesource.vallang.IConstructor; -import io.usethesource.vallang.IInteger; -import io.usethesource.vallang.IList; -import io.usethesource.vallang.ISourceLocation; -import io.usethesource.vallang.IString; -import io.usethesource.vallang.ITuple; -import io.usethesource.vallang.IValue; -import io.usethesource.vallang.IValueFactory; -import io.usethesource.vallang.IWithKeywordParameters; -import io.usethesource.vallang.type.Type; -import io.usethesource.vallang.type.TypeFactory; - -public class TermREPL { - private final IRascalValueFactory vf; - private ILanguageProtocol lang; - private final PrintWriter out; - private final PrintWriter err; - private final Reader in; - - - public TermREPL(IRascalValueFactory vf, PrintWriter out, PrintWriter err, Reader in) { - this.vf = vf; - this.out = out; - this.err = err; - this.in = in; - } - - public ITuple newREPL(IConstructor repl, IString title, IString welcome, IString prompt, IString quit, - ISourceLocation history, IFunction handler, IFunction completor, IFunction stacktrace, IEvaluatorContext eval) { - lang = new TheREPL(vf, title, welcome, prompt, quit, history, handler, completor, stacktrace, in, err, out); - BaseREPL baseRepl; - try { - baseRepl = new BaseREPL(lang, null, in, err, out, true, true, history, TerminalFactory.get(), null); - } - catch (Throwable e) { - throw RuntimeExceptionFactory.io(e.getMessage()); - } - - TypeFactory tf = TypeFactory.getInstance(); - IFunction run = vf.function(tf.functionType(tf.voidType(), tf.tupleEmpty(), tf.tupleEmpty()), - (args, kwargs) -> { - try { - baseRepl.run(); - } - catch (IOException e) { - throw RuntimeExceptionFactory.io(e.getMessage()); - } - return vf.tuple(); - }); - - IFunction send = vf.function(tf.functionType(tf.voidType(), tf.tupleType(tf.stringType()), tf.tupleEmpty()), - (args, kwargs) -> { - baseRepl.queueCommand(((IString)args[0]).getValue()); - return vf.tuple(); - }); - - return vf.tuple(run, send); - } - - public static class TheREPL implements ILanguageProtocol { - private final REPLContentServerManager contentManager = new REPLContentServerManager(); - private final TypeFactory tf = TypeFactory.getInstance(); - private PrintWriter stdout; - private PrintWriter stderr; - private Reader input; - private String currentPrompt; - private String quit; - private final AbstractFunction handler; - private final AbstractFunction completor; - private final IValueFactory vf; - private final AbstractFunction stacktrace; - - public TheREPL(IValueFactory vf, IString title, IString welcome, IString prompt, IString quit, ISourceLocation history, - IFunction handler, IFunction completor, IValue stacktrace, Reader input, PrintWriter stderr, PrintWriter stdout) { - this.vf = vf; - this.input = input; - this.stderr = stderr; - this.stdout = stdout; - - // TODO: these casts mean that TheRepl only works with functions produced by the - // interpreter for now. The reason is that the REPL needs access to environment configuration - // parameters of these functions such as stdout, stdin, etc. - // TODO: rethink the term repl in the compiled context, based on the compiled REPL for Rascal - // which does not exist yet. - this.handler = (AbstractFunction) handler; - this.completor = (AbstractFunction) completor; - this.stacktrace = (AbstractFunction) stacktrace; - this.currentPrompt = prompt.getValue(); - this.quit = quit.getValue(); - } - - @Override - public void cancelRunningCommandRequested() { - handler.getEval().interrupt(); - handler.getEval().__setInterrupt(false); - } - - @Override - public void terminateRequested() { - handler.getEval().interrupt(); - } - - @Override - public void stop() { - handler.getEval().interrupt(); - } - - @Override - public void stackTraceRequested() { - stacktrace.call(new Type[0], new IValue[0], null); - } - - @Override - public void initialize(Reader input, PrintWriter stdout, PrintWriter stderr, IDEServices services) { - this.stdout = stdout; - this.stderr = stderr; - this.input = input; - } - - @Override - public String getPrompt() { - return currentPrompt; - } - - @Override - public void handleInput(String line, Map output, Map metadata) throws InterruptedException { - - if (line.trim().equals(quit)) { - throw new InterruptedException(quit); - } - else { - try { - handler.getEval().__setInterrupt(false); - IConstructor content = (IConstructor) call(handler, new Type[] { tf.stringType() }, new IValue[] { vf.string(line) }); - - if (content.has("id")) { - handleInteractiveContent(output, metadata, content); - } - else { - IConstructor response = (IConstructor) content.get("response"); - switch (response.getName()) { - case "response": - handlePlainTextResponse(output, response); - break; - case "fileResponse": - handleFileResponse(output, response); - break; - case "jsonResponse": - handleJSONResponse(output, response); - } - } - } - catch (IOException e) { - output.put("text/plain", new ByteArrayInputStream(e.getMessage().getBytes())); - } - catch (Throwable e) { - output.put("text/plain", new ByteArrayInputStream(e.getMessage() != null ? e.getMessage().getBytes() : e.getClass().getName().getBytes())); - } - } - } - - private void handleInteractiveContent(Map output, Map metadata, - IConstructor content) throws IOException, UnsupportedEncodingException { - String id = ((IString) content.get("id")).getValue(); - Function callback = liftProviderFunction(content.get("callback")); - REPLContentServer server = contentManager.addServer(id, callback); - - String URL = "http://localhost:" + server.getListeningPort(); - - produceHTMLResponse(id, URL, output, metadata); - } - - private void produceHTMLResponse(String id, String URL, Map output, Map metadata) throws UnsupportedEncodingException{ - String html; - if (metadata.containsKey("origin") && metadata.get("origin").equals("notebook")) - html = " \n
\n
"; - else - html = ""; - - metadata.put("url", URL); - - output.put("text/html", new ByteArrayInputStream(html.getBytes("UTF8"))); - - String message = "Serving visual content at |" + URL + "|"; - output.put("text/plain", new ByteArrayInputStream(message.getBytes("UTF8"))); - - } - - private Function liftProviderFunction(IValue callback) { - IFunction func = (IFunction) callback; - - return (t) -> { - // This function will be called from another thread (the webserver) - // That is problematic if the current repl is doing something else at that time. - // The evaluator is already locked by the outer Rascal REPL (if this REPL was started from `startREPL`). - // synchronized(eval) { - return func.call(t); - }; - } - - private void handleJSONResponse(Map output, IConstructor response) throws IOException { - IValue data = response.get("val"); - IWithKeywordParameters kws = response.asWithKeywordParameters(); - - IValue dtf = kws.getParameter("dateTimeFormat"); - IValue dai = kws.getParameter("dateTimeAsInt"); - - JsonValueWriter writer = new JsonValueWriter() - .setCalendarFormat(dtf != null ? ((IString) dtf).getValue() : "yyyy-MM-dd\'T\'HH:mm:ss\'Z\'") - .setDatesAsInt(dai != null ? ((IBool) dai).getValue() : true); - - final ByteArrayOutputStream baos = new ByteArrayOutputStream(); - - JsonWriter out = new JsonWriter(new OutputStreamWriter(baos, Charset.forName("UTF8"))); - - writer.write(out, data); - out.flush(); - out.close(); - - output.put("application/json", new ByteArrayInputStream(baos.toByteArray())); - } - - private void handleFileResponse(Map output, IConstructor response) - throws UnsupportedEncodingException { - IString fileMimetype = (IString) response.get("mimeType"); - ISourceLocation file = (ISourceLocation) response.get("file"); - try { - output.put(fileMimetype.getValue(), URIResolverRegistry.getInstance().getInputStream(file)); - } - catch (IOException e) { - output.put("text/plain", new ByteArrayInputStream(e.getMessage().getBytes("UTF8"))); - } - } - - private void handlePlainTextResponse(Map output, IConstructor response) - throws UnsupportedEncodingException { - IString content = (IString) response.get("content"); - IString contentMimetype = (IString) response.get("mimeType"); - - output.put(contentMimetype.getValue(), new ByteArrayInputStream(content.getValue().getBytes("UTF8"))); - } - - @Override - public boolean supportsCompletion() { - return true; - } - - @Override - public boolean printSpaceAfterFullCompletion() { - return false; - } - - private IValue call(IFunction f, Type[] types, IValue[] args) { - if (f instanceof AbstractFunction) { - Evaluator eval = (Evaluator) ((AbstractFunction) f).getEval(); - synchronized (eval) { - try { - eval.overrideDefaultWriters(input, stdout, stderr); - return f.call(args); - } - finally { - stdout.flush(); - stderr.flush(); - eval.revertToDefaultWriters(); - } - } - } - else { - throw RuntimeExceptionFactory.illegalArgument(f, "term repl only works with interpreter for now"); - } - } - - @Override - public CompletionResult completeFragment(String line, int cursor) { - ITuple result = (ITuple)call(completor, new Type[] { tf.stringType(), tf.integerType() }, - new IValue[] { vf.string(line), vf.integer(cursor) }); - - List suggestions = new ArrayList<>(); - - for (IValue v: (IList)result.get(1)) { - suggestions.add(((IString)v).getValue()); - } - - if (suggestions.isEmpty()) { - return null; - } - - int offset = ((IInteger)result.get(0)).intValue(); - - return new CompletionResult(offset, suggestions); - } - - @Override - public void handleReset(Map output, Map metadata) throws InterruptedException { - handleInput("", output, metadata); - } - - @Override - public boolean isStatementComplete(String command) { - return true; - } - } -} diff --git a/src/org/rascalmpl/repl/BaseREPL.java b/src/org/rascalmpl/repl/BaseREPL.java index 8c71c9d7fc7..d30f8c8b5c2 100644 --- a/src/org/rascalmpl/repl/BaseREPL.java +++ b/src/org/rascalmpl/repl/BaseREPL.java @@ -69,7 +69,6 @@ public BaseREPL(IREPLService replService, Terminal term) { // todo: // - ctrl + / support (might not be possible) // - highlighting in the prompt? (future work, as it also hurts other parts) - // - nested REPLs // - measure time // - possible to tee output (future work) // - check if the REPL close properly closes the right streams diff --git a/src/org/rascalmpl/repl/output/INotebookOutput.java b/src/org/rascalmpl/repl/output/INotebookOutput.java new file mode 100644 index 00000000000..d6b2b58595f --- /dev/null +++ b/src/org/rascalmpl/repl/output/INotebookOutput.java @@ -0,0 +1,5 @@ +package org.rascalmpl.repl.output; + +public interface INotebookOutput extends IHtmlCommandOutput { + IOutputPrinter asNotebook(); +} diff --git a/src/org/rascalmpl/repl/output/ISourceLocationCommandOutput.java b/src/org/rascalmpl/repl/output/ISourceLocationCommandOutput.java new file mode 100644 index 00000000000..02c4791cb89 --- /dev/null +++ b/src/org/rascalmpl/repl/output/ISourceLocationCommandOutput.java @@ -0,0 +1,8 @@ +package org.rascalmpl.repl.output; + +import io.usethesource.vallang.ISourceLocation; + +public interface ISourceLocationCommandOutput extends ICommandOutput { + ISourceLocation asLocation(); + String locationMimeType(); +} diff --git a/src/org/rascalmpl/repl/parametric/ILanguageProtocol.java b/src/org/rascalmpl/repl/parametric/ILanguageProtocol.java index 26d921b6d0e..764446e2496 100644 --- a/src/org/rascalmpl/repl/parametric/ILanguageProtocol.java +++ b/src/org/rascalmpl/repl/parametric/ILanguageProtocol.java @@ -23,12 +23,12 @@ */ package org.rascalmpl.repl.parametric; -import java.io.InputStream; import java.io.PrintWriter; import java.io.Reader; import java.util.Map; import org.rascalmpl.ideservices.IDEServices; +import org.rascalmpl.repl.output.ICommandOutput; public interface ILanguageProtocol { @@ -53,14 +53,8 @@ public interface ILanguageProtocol { * @param metadata is a map to encode a plain object with meta-data encoded as strings * @throws InterruptedException throw this exception to stop the REPL (instead of calling .stop()) */ - void handleInput(String line, Map output, Map metadata) throws InterruptedException; + ICommandOutput handleInput(String line) throws InterruptedException; - /** - * If a line is canceled with ctrl-C this method is called too handle the reset in the child-class. - * @throws InterruptedException throw this exception to stop the REPL (instead of calling .stop()) - */ - void handleReset(Map output, Map metadata) throws InterruptedException; - /** * Test if completion of statement in the current line is supported * @return true if the completeFragment method can provide completions @@ -68,18 +62,12 @@ public interface ILanguageProtocol { boolean supportsCompletion(); /** - * If the completion succeeded with one match, should a space be printed aftwards? - * @return true if completed fragment should be followed by a space - */ - boolean printSpaceAfterFullCompletion(); - - /** - * If a user hits the TAB key, the current line and the offset is provided to try and complete a fragment of the current line. + * If a user hits the TAB key, the current line and the word the cursor is at is provided, you can only provide completions for the current word. * @param line The current line. - * @param cursor The cursor offset in the line. - * @return suggestions for the line. + * @param word which word in the line the user pressed TAB on + * @return suggestions for the word (key: completion, value: category) */ - void/*CompletionResult*/ completeFragment(String line, int cursor); + Map completeFragment(String line, String word); /** * This method gets called from another thread, and indicates the user pressed CTLR-C during a call to handleInput. @@ -88,13 +76,6 @@ public interface ILanguageProtocol { */ void cancelRunningCommandRequested(); - /** - * This method gets called from another thread, and indicates the user pressed CTLR-D during a call to handleInput. - * - * Quit the code from handleInput as soon as possible, assume the REPL will close after this. - */ - void terminateRequested(); - /** * This method gets called from another thread, indicates a user pressed CTRL+\ during a call to handleInput. * @@ -102,11 +83,4 @@ public interface ILanguageProtocol { */ void stackTraceRequested(); - public abstract boolean isStatementComplete(String command); - - /** - * Tell the language to stop without waiting for it to stop - * @throws InterruptedException - */ - void stop(); } diff --git a/src/org/rascalmpl/repl/parametric/ParametricCompleter.java b/src/org/rascalmpl/repl/parametric/ParametricCompleter.java new file mode 100644 index 00000000000..882211ba615 --- /dev/null +++ b/src/org/rascalmpl/repl/parametric/ParametricCompleter.java @@ -0,0 +1,28 @@ +package org.rascalmpl.repl.parametric; + +import java.util.List; + +import org.jline.reader.Candidate; +import org.jline.reader.Completer; +import org.jline.reader.LineReader; +import org.jline.reader.ParsedLine; + +public class ParametricCompleter implements Completer { + private final ILanguageProtocol lang; + + public ParametricCompleter(ILanguageProtocol lang) { + this.lang = lang; + } + + @Override + public void complete(LineReader reader, ParsedLine line, List candidates) { + var word = line.word(); + if (word == null) { + word = ""; + } + // TODO: in the future consider making the interface more a map of the jline3 candidate interface + lang.completeFragment(line.line(), word) + .forEach((c, g) -> candidates.add(new Candidate(c, c, g, null, null, null, false))); + } + +} diff --git a/src/org/rascalmpl/repl/parametric/ParametricReplService.java b/src/org/rascalmpl/repl/parametric/ParametricReplService.java new file mode 100644 index 00000000000..1c37b4f34e8 --- /dev/null +++ b/src/org/rascalmpl/repl/parametric/ParametricReplService.java @@ -0,0 +1,118 @@ +package org.rascalmpl.repl.parametric; + +import java.io.PrintWriter; +import java.nio.file.Path; +import java.util.Collections; +import java.util.List; + +import org.checkerframework.checker.nullness.qual.Nullable; +import org.jline.reader.Completer; +import org.jline.reader.Parser; +import org.jline.reader.impl.DefaultParser; +import org.jline.terminal.Terminal; +import org.rascalmpl.ideservices.IDEServices; +import org.rascalmpl.repl.IREPLService; +import org.rascalmpl.repl.output.ICommandOutput; +import org.rascalmpl.repl.output.IWebContentOutput; +import org.rascalmpl.repl.streams.StreamUtil; + +public class ParametricReplService implements IREPLService { + + private final ILanguageProtocol lang; + private final IDEServices ide; + private final @Nullable Path historyFile; + private PrintWriter out; + private PrintWriter err; + + public ParametricReplService(ILanguageProtocol lang, IDEServices ide, @Nullable Path historyFile) { + this.lang = lang; + this.ide = ide; + this.historyFile = historyFile; + } + + @Override + public void connect(Terminal term) { + out = term.writer(); + err = StreamUtil.generateErrorStream(term, term.writer()); + lang.initialize(term.reader(), out, err, ide); + } + + @Override + public String prompt(boolean ansiColorsSupported, boolean unicodeSupported) { + return lang.getPrompt(); + } + + @Override + public ICommandOutput handleInput(String input) throws InterruptedException { + var result = lang.handleInput(input); + if (result instanceof IWebContentOutput) { + try { + var webResult = (IWebContentOutput)result; + ide.browse(webResult.webUri(), webResult.webTitle(), webResult.webviewColumn()); + } catch (Throwable _ignored) {} + } + return result; + } + + @Override + public void handleInterrupt() throws InterruptedException { + lang.cancelRunningCommandRequested(); + } + + + @Override + public String parseErrorPrompt(boolean ansiColorSupported, boolean unicodeSupported) { + return ">> Parse error"; + } + + + @Override + public PrintWriter errorWriter() { + return err; + } + + @Override + public PrintWriter outputWriter() { + return out; + } + + @Override + public void flush() { + err.flush(); + out.flush(); + } + + @Override + public String interruptedPrompt(boolean ansiColorsSupported, boolean unicodeSupported) { + return ">> Interrupted"; + } + + + @Override + public boolean supportsCompletion() { + return lang.supportsCompletion(); + } + + @Override + public List completers() { + return Collections.singletonList(new ParametricCompleter(lang)); + } + + @Override + public Parser inputParser() { + // TODO: allow for a user to provide regexes for the + // input parser, to get better completor support and options for multiline + return new DefaultParser(); + } + + @Override + public boolean storeHistory() { + return this.historyFile == null; + } + + @Override + public Path historyFile() { + return this.historyFile; + } + +} diff --git a/src/org/rascalmpl/repl/rascal/RascalInterpreterREPL.java b/src/org/rascalmpl/repl/rascal/RascalInterpreterREPL.java index 864e34243a7..4396843f5c4 100644 --- a/src/org/rascalmpl/repl/rascal/RascalInterpreterREPL.java +++ b/src/org/rascalmpl/repl/rascal/RascalInterpreterREPL.java @@ -46,7 +46,8 @@ /** * In most cases you might want to override the {@link #buildIDEService(PrintWriter, IRascalMonitor, Terminal)} and the {@link #buildEvaluator(Reader, PrintWriter, PrintWriter, IDEServices)} functions. */ -public abstract class RascalInterpreterREPL implements IRascalLanguageProtocol { +public class RascalInterpreterREPL implements IRascalLanguageProtocol { + protected IDEServices services; protected Evaluator eval; private final RascalValuePrinter printer; @@ -104,12 +105,10 @@ protected Evaluator buildEvaluator(Reader input, PrintWriter stdout, PrintWriter return evaluator; } - protected abstract void openWebContent(IWebContentOutput webContent); - @Override public void initialize(Reader input, PrintWriter stdout, PrintWriter stderr, IRascalMonitor monitor, Terminal term) { - var services = buildIDEService(stderr, monitor, term); + services = buildIDEService(stderr, monitor, term); if (eval != null) { throw new IllegalStateException("Already initialized"); } @@ -126,7 +125,8 @@ public ICommandOutput handleInput(String command) throws InterruptedException { var result = printer.outputResult(value); if (result instanceof IWebContentOutput) { try { - openWebContent((IWebContentOutput)result); + var webResult = (IWebContentOutput)result; + services.browse(webResult.webUri(), webResult.webTitle(), webResult.webviewColumn()); } catch (Throwable _ignore) {} } return result; diff --git a/src/org/rascalmpl/repl/jline3/RascalLineParser.java b/src/org/rascalmpl/repl/rascal/RascalLineParser.java similarity index 99% rename from src/org/rascalmpl/repl/jline3/RascalLineParser.java rename to src/org/rascalmpl/repl/rascal/RascalLineParser.java index f754f157b43..888d9a7c465 100644 --- a/src/org/rascalmpl/repl/jline3/RascalLineParser.java +++ b/src/org/rascalmpl/repl/rascal/RascalLineParser.java @@ -1,4 +1,4 @@ -package org.rascalmpl.repl.jline3; +package org.rascalmpl.repl.rascal; import java.util.ArrayList; import java.util.List; diff --git a/src/org/rascalmpl/repl/rascal/RascalReplServices.java b/src/org/rascalmpl/repl/rascal/RascalReplServices.java index 9a8c3343741..888a1d36870 100644 --- a/src/org/rascalmpl/repl/rascal/RascalReplServices.java +++ b/src/org/rascalmpl/repl/rascal/RascalReplServices.java @@ -18,7 +18,6 @@ import org.rascalmpl.repl.completers.RascalKeywordCompletion; import org.rascalmpl.repl.completers.RascalLocationCompletion; import org.rascalmpl.repl.completers.RascalModuleCompletion; -import org.rascalmpl.repl.jline3.RascalLineParser; import org.rascalmpl.repl.output.ICommandOutput; import org.rascalmpl.repl.streams.StreamUtil; diff --git a/src/org/rascalmpl/shell/REPLRunner.java b/src/org/rascalmpl/shell/REPLRunner.java index b85768f0451..c58f996f8cd 100644 --- a/src/org/rascalmpl/shell/REPLRunner.java +++ b/src/org/rascalmpl/shell/REPLRunner.java @@ -1,6 +1,5 @@ package org.rascalmpl.shell; -import java.awt.Desktop; import java.io.IOException; import java.io.PrintWriter; import java.io.Reader; @@ -12,7 +11,6 @@ import org.rascalmpl.ideservices.IDEServices; import org.rascalmpl.interpreter.Evaluator; import org.rascalmpl.repl.BaseREPL; -import org.rascalmpl.repl.output.IWebContentOutput; import org.rascalmpl.repl.rascal.RascalInterpreterREPL; import org.rascalmpl.repl.rascal.RascalReplServices; @@ -32,26 +30,6 @@ protected Evaluator buildEvaluator(Reader input, PrintWriter stdout, PrintWriter IDEServices services) { return ShellEvaluatorFactory.getDefaultEvaluator(input, stdout, stderr, services); } - - @Override - protected void openWebContent(IWebContentOutput webContent) { - try { - // Note that Desktop.isDesktopSupported can not be factored into a class constant because - // it may throw exceptions on headless machines which are ignored below. - if (Desktop.isDesktopSupported()) { - try { - Desktop.getDesktop().browse(webContent.webUri()); - } - catch (IOException e) { - eval.getStdErr().println("failed to display content: " + e.getMessage()); - } - } - } - catch (Throwable e) { - // we fail silently in order to support headless machines - } - - } }, getHistoryFile()), term); repl.run(); } diff --git a/test/org/rascalmpl/test/repl/JlineParserTest.java b/test/org/rascalmpl/test/repl/JlineParserTest.java index 91e082e1d44..392c0e3c712 100644 --- a/test/org/rascalmpl/test/repl/JlineParserTest.java +++ b/test/org/rascalmpl/test/repl/JlineParserTest.java @@ -6,7 +6,7 @@ import org.jline.reader.Parser.ParseContext; import org.junit.Test; import org.rascalmpl.parser.gtd.exception.ParseError; -import org.rascalmpl.repl.jline3.RascalLineParser; +import org.rascalmpl.repl.rascal.RascalLineParser; import org.rascalmpl.uri.URIUtil; public class JlineParserTest { From e4564201dec891170798b5b0a8ef768965b4d0da Mon Sep 17 00:00:00 2001 From: Rodin Aarssen Date: Mon, 23 Dec 2024 11:02:26 +0100 Subject: [PATCH 096/191] Updated dependencies --- pom.xml | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/pom.xml b/pom.xml index a4f803401d6..01fdf9a4df2 100644 --- a/pom.xml +++ b/pom.xml @@ -29,7 +29,7 @@ UTF-8 7.5.0 - 3.9.8 + 3.9.9 org.rascalmpl.shell.RascalShell 2 11 @@ -104,7 +104,7 @@ org.codehaus.mojo buildnumber-maven-plugin - 3.2.0 + 3.2.1 validate @@ -213,7 +213,7 @@ org.apache.maven.plugins maven-surefire-plugin - 3.3.1 + 3.5.2 test @@ -261,7 +261,7 @@ org.apache.maven.plugins maven-dependency-plugin - 3.7.1 + 3.8.1 @@ -277,7 +277,7 @@ org.apache.maven.plugins maven-release-plugin - 3.1.0 + 3.1.1 v@{project.version} -Drascal.compile.skip -Drascal.tutor.skip -DskipTests @@ -286,7 +286,7 @@ org.codehaus.mojo license-maven-plugin - 2.4.0 + 2.5.0 download-licenses @@ -454,22 +454,22 @@ org.apache.commons commons-compress - 1.26.1 + 1.27.1 com.github.luben zstd-jni - 1.5.5-11 + 1.5.6-8 commons-codec commons-codec - 1.17.0 + 1.17.1 com.google.code.gson gson - 2.10.1 + 2.11.0 jline @@ -479,7 +479,7 @@ org.yaml snakeyaml - 2.2 + 2.3 org.jsoup @@ -519,7 +519,7 @@ com.ibm.icu icu4j - 74.2 + 76.1 org.apache.maven @@ -529,7 +529,7 @@ org.apache.maven.plugins maven-dependency-plugin - 3.7.1 + 3.8.1 org.slf4j From 1faf55f48a5e3c7150e0b38f0de046c008953afe Mon Sep 17 00:00:00 2001 From: Rodin Aarssen Date: Mon, 23 Dec 2024 11:07:44 +0100 Subject: [PATCH 097/191] Added profile to pom for creation of unshaded Rascal jar --- pom.xml | 78 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) diff --git a/pom.xml b/pom.xml index 01fdf9a4df2..17302bd96d4 100644 --- a/pom.xml +++ b/pom.xml @@ -547,4 +547,82 @@ ${maven-version} + + + unshaded + + + + org.apache.maven.plugins + maven-shade-plugin + 3.6.0 + + + package + + shade + + + + + + rascal + org.rascalmpl.shell.RascalShell + ${project.version} + http://www.usethesource.io + + + + org/rascalmpl/uri/resolvers.config + + + io/usethesource/vallang/type/types.config + + + + + org.fusesource.jansi + org.rascalmpl.fusesource.jansi + + org.fusesource.jansi.internal.* + + + + jline + org.rascalmpl.jline + + + + + *:* + + META-INF/*.SF + META-INF/*.DSA + META-INF/*.RSA + + + + + + jline:* + + + unshaded + + + + + + org.codehaus.mojo + license-maven-plugin + + true + + + + + + + + From b1a54814a9f7f3aa3033b5bd73375694e455deea Mon Sep 17 00:00:00 2001 From: Rodin Aarssen Date: Mon, 23 Dec 2024 11:24:12 +0100 Subject: [PATCH 098/191] Updated dependencies (#2110) --- pom.xml | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/pom.xml b/pom.xml index a4f803401d6..01fdf9a4df2 100644 --- a/pom.xml +++ b/pom.xml @@ -29,7 +29,7 @@ UTF-8 7.5.0 - 3.9.8 + 3.9.9 org.rascalmpl.shell.RascalShell 2 11 @@ -104,7 +104,7 @@ org.codehaus.mojo buildnumber-maven-plugin - 3.2.0 + 3.2.1 validate @@ -213,7 +213,7 @@ org.apache.maven.plugins maven-surefire-plugin - 3.3.1 + 3.5.2 test @@ -261,7 +261,7 @@ org.apache.maven.plugins maven-dependency-plugin - 3.7.1 + 3.8.1 @@ -277,7 +277,7 @@ org.apache.maven.plugins maven-release-plugin - 3.1.0 + 3.1.1 v@{project.version} -Drascal.compile.skip -Drascal.tutor.skip -DskipTests @@ -286,7 +286,7 @@ org.codehaus.mojo license-maven-plugin - 2.4.0 + 2.5.0 download-licenses @@ -454,22 +454,22 @@ org.apache.commons commons-compress - 1.26.1 + 1.27.1 com.github.luben zstd-jni - 1.5.5-11 + 1.5.6-8 commons-codec commons-codec - 1.17.0 + 1.17.1 com.google.code.gson gson - 2.10.1 + 2.11.0 jline @@ -479,7 +479,7 @@ org.yaml snakeyaml - 2.2 + 2.3 org.jsoup @@ -519,7 +519,7 @@ com.ibm.icu icu4j - 74.2 + 76.1 org.apache.maven @@ -529,7 +529,7 @@ org.apache.maven.plugins maven-dependency-plugin - 3.7.1 + 3.8.1 org.slf4j From b1b59cc67308c91932b974f989b68f2e424abcbd Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Mon, 23 Dec 2024 12:00:32 +0100 Subject: [PATCH 099/191] normalized datetime output for testing purposes --- .../lang/json/internal/JsonValueWriter.java | 1 - .../tests/library/lang/json/JSONIOTests.rsc | 46 +++++++++++++------ 2 files changed, 32 insertions(+), 15 deletions(-) diff --git a/src/org/rascalmpl/library/lang/json/internal/JsonValueWriter.java b/src/org/rascalmpl/library/lang/json/internal/JsonValueWriter.java index c0ef7f412b1..e836f63576d 100644 --- a/src/org/rascalmpl/library/lang/json/internal/JsonValueWriter.java +++ b/src/org/rascalmpl/library/lang/json/internal/JsonValueWriter.java @@ -376,7 +376,6 @@ public Void visitBoolean(IBool boolValue) throws IOException { @Override public Void visitExternal(IExternalValue externalValue) throws IOException { - // TODO throw new IOException("External values are not supported by JSon serialisation yet"); } diff --git a/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc b/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc index a8f2db18fe2..e3e43db158f 100644 --- a/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc +++ b/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc @@ -7,6 +7,7 @@ import util::Maybe; import IO; import util::Math; import Type; +import DateTime; loc targetFile = |memory://test-tmp/test-<"">.json|; @@ -42,7 +43,7 @@ test bool jsonWithBool1(bool dt) = writeRead(#bool, dt); test bool jsonWithInt1(int dt) = writeRead(#int, dt); test bool jsonWithReal1(real dt) = writeRead(#real, dt); test bool jsonWithRat1(rat dt) = writeRead(#rat, dt); -test bool jsonWithNum1(num dt) = writeRead(#num, dt, normalizer=toDefaultValue); +test bool jsonWithNum1(num dt) = writeRead(#num, dt, normalizer=toDefaultRec); test bool jsonWithLoc1(loc dt) = writeRead(#loc, dt); test bool jsonWithStr1(str dt) = writeRead(#str, dt); @@ -50,7 +51,7 @@ test bool jsonWithDatetime1(datetime dt) = writeRead(#datetime, dt); test bool jsonWithList1(list[int] dt) = writeRead(#list[int], dt); test bool jsonWithSet1(set[int] dt) = writeRead(#set[int], dt); test bool jsonWithMap1(map[int, int] dt) = writeRead(#map[int,int], dt); -test bool jsonWithNode1(node dt) = writeRead(#node, dt, normalizer = toDefaultValue); +test bool jsonWithNode1(node dt) = writeRead(#node, dt, normalizer = toDefaultRec); test bool jsonWithDATA11(DATA1 dt) = writeRead(#DATA1, dt); test bool jsonWithDATA21(DATA2 dt) = writeRead(#DATA2, dt); @@ -60,7 +61,7 @@ test bool jsonWithDATA21(DATA2 dt) = writeRead(#DATA2, dt); However sets are always read back in as lists if we don't have a specific abstract data-type that can enforce sets. } -test bool jsonRandom1(value dt) = writeRead(#value, dt, normalizer=toDefaultValue); +test bool jsonRandom1(value dt) = writeRead(#value, dt, normalizer=toDefaultRec); test bool json1() = writeRead(#DATA1, data1(123)); test bool json2() = writeRead(#DATA2, data2("123")); @@ -83,18 +84,35 @@ test bool originTracking() { } @synopsis{Normalizer used to replace unrecoverable types with their default representatives} -value toDefaultValue(value readBack) = visit(readBack) { - case value _:set[value] x=> [*x] - case value _:map[void,void] _ => "object"() - case value _:<> => [] - case value _: => [x] - case value _: => [x,y] - case value _:=> [x,y,z] - case value _:loc l => "" - case value _:datetime t => "" - case value _:real r => round(r) when r - round(r) == 0 +value toDefaultRec(value readBack) = visit(readBack) { + case value x => toDefaultValue(x) }; +value toDefaultValue(set[value] x) = [*x]; +value toDefaultValue(map[void,void] _) = "object"(); +value toDefaultValue(<>) = []; +value toDefaultValue() = [x]; +value toDefaultValue() = [x,y]; +value toDefaultValue() = [x,y,z]; +value toDefaultValue(loc l) { + // this simulates the simplications the writer applies + if (!(l.offset?)) { + if (l.scheme == "file") { + return l.path; + } + else { + return ""[1..-1]; + } + } + else { + return ""; + } +} + +value toDefaultValue(datetime t) = printDateTime(t, "yyyy-MM-dd\'T\'HH:mm:ssZ"); +value toDefaultValue(real r) = round(r) when r - round(r) == 0; +default value toDefaultValue(value x) = x; + test bool accurateParseErrors() { ex = readFile(|std:///lang/rascal/tests/library/lang/json/glossary.json|); broken = ex[..size(ex)/2] + ex[size(ex)/2+10..]; @@ -109,7 +127,7 @@ test bool accurateParseErrors() { // accurate locations have to be provided also when trackOrigins=false ex2 = parseJSON(#node, broken, trackOrigins=false); } - catch ParseError(loc l): // , cause=/^Unterminated object.*/, path="$.glossary.GlossDiv.GlossList.GlossEntry.GlossTerm") : + catch ParseError(loc l): return l.begin.line == 14; return true; From 6e230e29dbeae4caa9aa67aa937948b68cbb0d6a Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Mon, 23 Dec 2024 12:31:15 +0100 Subject: [PATCH 100/191] added normalization of rationals --- .../lang/json/internal/JsonValueReader.java | 37 ++++++++++++++++++- .../tests/library/lang/json/JSONIOTests.rsc | 7 ++++ 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java index 79ccfe54fb4..1d4571d46c8 100644 --- a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java +++ b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java @@ -27,6 +27,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.Set; import org.rascalmpl.debug.IRascalMonitor; import org.rascalmpl.exceptions.RuntimeExceptionFactory; @@ -716,6 +717,25 @@ public IValue visitConstructor(Type type) throws IOException { return read(in, type.getAbstractDataType()); } + private boolean isJavaIdentifier(String s) { + if (s.isEmpty()) { + return false; + } + else { + if (!Character.isJavaIdentifierStart(s.charAt(0))) { + return false; + } + + for (int i = 1; i < s.length(); i++) { + if (!Character.isJavaIdentifierPart(i)) { + return false; + } + } + } + + return true; + } + @Override public IValue visitNode(Type type) throws IOException { if (isNull()) { @@ -729,11 +749,14 @@ public IValue visitNode(Type type) throws IOException { Map kws = new HashMap<>(); Map args = new HashMap<>(); + boolean allIdentifiers = true; String name = "object"; while (in.hasNext()) { String kwName = nextName(); + allIdentifiers &= isJavaIdentifier(kwName); + if (kwName.equals("_name")) { name = ((IString) read(in, TF.stringType())).getValue(); continue; @@ -771,7 +794,19 @@ public IValue visitNode(Type type) throws IOException { .map(e -> e.getValue()) .toArray(IValue[]::new); - return vf.node(name, argArray, kws); + if (allIdentifiers) { + return vf.node(name, argArray, kws); + } + else { + assert args.isEmpty(); + IMapWriter newMap = vf.mapWriter(); + + for (Entry e : kws.entrySet()) { + newMap.put(vf.string(e.getKey()), e.getValue()); + } + + return newMap.done(); + } } @Override diff --git a/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc b/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc index e3e43db158f..f7e5831ca76 100644 --- a/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc +++ b/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc @@ -90,10 +90,17 @@ value toDefaultRec(value readBack) = visit(readBack) { value toDefaultValue(set[value] x) = [*x]; value toDefaultValue(map[void,void] _) = "object"(); +value toDefaultValue(rat r) = [numerator(r), denominator(r)]; value toDefaultValue(<>) = []; value toDefaultValue() = [x]; value toDefaultValue() = [x,y]; value toDefaultValue() = [x,y,z]; +value toDefaultValue() = [x,y,z,a]; +value toDefaultValue() = [x,y,z,a,b]; +value toDefaultValue() = [x,y,z,a,b,c]; +value toDefaultValue() = [x,y,z,a,b,c,d]; +value toDefaultValue() = [x,y,z,a,b,c,d,e]; +value toDefaultValue() = [x,y,z,a,b,c,d,e,f]; value toDefaultValue(loc l) { // this simulates the simplications the writer applies if (!(l.offset?)) { From e3b3065110f5b34dae5d5e2acc8186e7d10be332 Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Mon, 23 Dec 2024 12:41:47 +0100 Subject: [PATCH 101/191] more progress on getting the tests right --- .../library/lang/json/internal/JsonValueReader.java | 2 +- .../lang/rascal/tests/library/lang/json/JSONIOTests.rsc | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java index 1d4571d46c8..81203455444 100644 --- a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java +++ b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java @@ -722,7 +722,7 @@ private boolean isJavaIdentifier(String s) { return false; } else { - if (!Character.isJavaIdentifierStart(s.charAt(0))) { + if (s.charAt(0) != '_' && !Character.isJavaIdentifierStart(s.charAt(0))) { return false; } diff --git a/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc b/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc index f7e5831ca76..cbc86face57 100644 --- a/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc +++ b/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc @@ -43,7 +43,7 @@ test bool jsonWithBool1(bool dt) = writeRead(#bool, dt); test bool jsonWithInt1(int dt) = writeRead(#int, dt); test bool jsonWithReal1(real dt) = writeRead(#real, dt); test bool jsonWithRat1(rat dt) = writeRead(#rat, dt); -test bool jsonWithNum1(num dt) = writeRead(#num, dt, normalizer=toDefaultRec); +test bool jsonWithNum1(num dt) = writeRead(#num, dt, normalizer=numNormalizer); test bool jsonWithLoc1(loc dt) = writeRead(#loc, dt); test bool jsonWithStr1(str dt) = writeRead(#str, dt); @@ -83,14 +83,18 @@ test bool originTracking() { return true; } +value numNormalizer(real r) = round(r) when r - round(r) == 0; +default value numNormalizer(value x) = x; + + @synopsis{Normalizer used to replace unrecoverable types with their default representatives} value toDefaultRec(value readBack) = visit(readBack) { case value x => toDefaultValue(x) }; +value toDefaultValue(rat r) = ["", ""]; value toDefaultValue(set[value] x) = [*x]; value toDefaultValue(map[void,void] _) = "object"(); -value toDefaultValue(rat r) = [numerator(r), denominator(r)]; value toDefaultValue(<>) = []; value toDefaultValue() = [x]; value toDefaultValue() = [x,y]; From b5bdb9070aec0e3029d34438de7692c3fb134c15 Mon Sep 17 00:00:00 2001 From: Rodin Aarssen Date: Mon, 23 Dec 2024 13:19:17 +0100 Subject: [PATCH 102/191] Removed vallang files from unshaded jar configuration --- pom.xml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/pom.xml b/pom.xml index 17302bd96d4..847ab810acb 100644 --- a/pom.xml +++ b/pom.xml @@ -572,12 +572,6 @@ http://www.usethesource.io - - org/rascalmpl/uri/resolvers.config - - - io/usethesource/vallang/type/types.config - From a7939fc846fddea22fdedbd29afa44cca527092e Mon Sep 17 00:00:00 2001 From: Rodin Aarssen Date: Mon, 23 Dec 2024 14:06:24 +0100 Subject: [PATCH 103/191] Updated GitHub workflow to additionally deploy an unshaded jar --- .github/workflows/build.yaml | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 8525489a09b..7234586e7a1 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -93,7 +93,7 @@ jobs: tests (buildjet-4vcpu-ubuntu-2204-arm) ttl: 15 - - name: Deploy + - name: Deploy shaded jar if: startsWith(github.ref, 'refs/tags/v') uses: usethesource/releases-maven-action@v1 with: @@ -105,6 +105,19 @@ jobs: ssh-username: ${{ secrets.RELEASE_SSH_USERNAME }} ssh-private-key: ${{ secrets.RELEASE_SSH_PRIVATE_KEY }} + - name: Deploy unshaded jar + if: startsWith(github.ref, 'refs/tags/v') + uses: usethesource/releases-maven-action@v1 + with: + maven-username: ${{ secrets.RELEASE_MAVEN_USERNAME }} + maven-password: ${{ secrets.RELEASE_MAVEN_PASSWORD }} + maven-local-port: ${{ secrets.RELEASE_MAVEN_LOCAL_PORT }} + ssh-hostname: ${{ secrets.RELEASE_SSH_SERVER }} + ssh-known-host: ${{ secrets.RELEASE_SSH_KNOWN_HOSTS }} + ssh-username: ${{ secrets.RELEASE_SSH_USERNAME }} + ssh-private-key: ${{ secrets.RELEASE_SSH_PRIVATE_KEY }} + maven-options: -Punshaded + - name: Prepare Draft Release uses: softprops/action-gh-release@v2 if: startsWith(github.ref, 'refs/tags/') From 81d29acb49f14aa35995500dec49d99628bc6bd3 Mon Sep 17 00:00:00 2001 From: Rodin Aarssen Date: Mon, 23 Dec 2024 14:06:42 +0100 Subject: [PATCH 104/191] Tweaked unshaded jar configuration --- pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/pom.xml b/pom.xml index 847ab810acb..b6682e69996 100644 --- a/pom.xml +++ b/pom.xml @@ -602,6 +602,7 @@ unshaded + true From 8e299464c239b20d461ed79829ec959cc20511c1 Mon Sep 17 00:00:00 2001 From: Davy Landman Date: Mon, 23 Dec 2024 14:44:44 +0100 Subject: [PATCH 105/191] [maven-release-plugin] prepare release v0.41.0-RC2 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index b6682e69996..3da4ca33e65 100644 --- a/pom.xml +++ b/pom.xml @@ -3,12 +3,12 @@ org.rascalmpl rascal - 0.41.0-RC2-SNAPSHOT + 0.41.0-RC2 jar scm:git:ssh://git@github.com/usethesource/rascal.git - v0.41.0-RC1 + v0.41.0-RC2 From 92bebee9481f676217ce9524ad4c4eb504601ad9 Mon Sep 17 00:00:00 2001 From: Davy Landman Date: Mon, 23 Dec 2024 14:44:52 +0100 Subject: [PATCH 106/191] [maven-release-plugin] prepare for next development iteration --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 3da4ca33e65..272f76742b4 100644 --- a/pom.xml +++ b/pom.xml @@ -3,12 +3,12 @@ org.rascalmpl rascal - 0.41.0-RC2 + 0.41.0-RC3-SNAPSHOT jar scm:git:ssh://git@github.com/usethesource/rascal.git - v0.41.0-RC2 + v0.41.0-RC1 From 92711edc5f9384eb1d23590c612f23534c3e5aca Mon Sep 17 00:00:00 2001 From: Toine Hartman Date: Mon, 23 Dec 2024 16:19:59 +0100 Subject: [PATCH 107/191] Add non-throwing variant of createFromURI. --- src/org/rascalmpl/uri/URIUtil.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/org/rascalmpl/uri/URIUtil.java b/src/org/rascalmpl/uri/URIUtil.java index 1b0d4ee5566..1420b3b2da9 100644 --- a/src/org/rascalmpl/uri/URIUtil.java +++ b/src/org/rascalmpl/uri/URIUtil.java @@ -157,6 +157,16 @@ public static URI assumeCorrect(String scheme, String authority, String path, St throw y; } } + /** + * Non throwing variant of createFromURI, in case of scenarios where input can be trusted. + */ + public static ISourceLocation assumeCorrectLocation(String uri) { + try { + return createFromURI(uri); + } catch (URISyntaxException e) { + throw new IllegalArgumentException(e); + } + } public static ISourceLocation correctLocation(String scheme, String authority, String path) { try { From 322e83040d39b9cbd8b539c7ef91c98e1277b23f Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Mon, 23 Dec 2024 20:08:00 +0100 Subject: [PATCH 108/191] more bug squashing --- .../lang/json/internal/JsonValueWriter.java | 4 +-- .../tests/library/lang/json/JSONIOTests.rsc | 29 +++++++++++-------- 2 files changed, 19 insertions(+), 14 deletions(-) diff --git a/src/org/rascalmpl/library/lang/json/internal/JsonValueWriter.java b/src/org/rascalmpl/library/lang/json/internal/JsonValueWriter.java index e836f63576d..68830ddf99f 100644 --- a/src/org/rascalmpl/library/lang/json/internal/JsonValueWriter.java +++ b/src/org/rascalmpl/library/lang/json/internal/JsonValueWriter.java @@ -126,8 +126,8 @@ public Void visitReal(IReal o) throws IOException { @Override public Void visitRational(IRational o) throws IOException { out.beginArray(); - out.value(o.numerator().getStringRepresentation()); - out.value(o.denominator().getStringRepresentation()); + out.value(o.numerator().longValue()); + out.value(o.denominator().longValue()); out.endArray(); return null; diff --git a/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc b/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc index cbc86face57..8c4bebe763c 100644 --- a/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc +++ b/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc @@ -8,6 +8,7 @@ import IO; import util::Math; import Type; import DateTime; +import List; loc targetFile = |memory://test-tmp/test-<"">.json|; @@ -88,23 +89,26 @@ default value numNormalizer(value x) = x; @synopsis{Normalizer used to replace unrecoverable types with their default representatives} -value toDefaultRec(value readBack) = visit(readBack) { +value toDefaultRec(value readBack) = visit(readBack) { case value x => toDefaultValue(x) }; -value toDefaultValue(rat r) = ["", ""]; -value toDefaultValue(set[value] x) = [*x]; +// this list order depends on the hashcodes of the children +// as the writer is top-down and this rewrite is bottom-up +// we end up with different lists sometimes (if the elements have been rewritten). +value toDefaultValue(set[value] x) = [*x]; + value toDefaultValue(map[void,void] _) = "object"(); value toDefaultValue(<>) = []; -value toDefaultValue() = [x]; -value toDefaultValue() = [x,y]; -value toDefaultValue() = [x,y,z]; -value toDefaultValue() = [x,y,z,a]; -value toDefaultValue() = [x,y,z,a,b]; -value toDefaultValue() = [x,y,z,a,b,c]; -value toDefaultValue() = [x,y,z,a,b,c,d]; -value toDefaultValue() = [x,y,z,a,b,c,d,e]; -value toDefaultValue() = [x,y,z,a,b,c,d,e,f]; +value toDefaultValue() = [x]; +value toDefaultValue() = [x,y]; +value toDefaultValue() = [x,y,z]; +value toDefaultValue() = [x,y,z,a]; +value toDefaultValue() = [x,y,z,a,b]; +value toDefaultValue() = [x,y,z,a,b,c]; +value toDefaultValue() = [x,y,z,a,b,c,d]; +value toDefaultValue() = [x,y,z,a,b,c,d,e]; +value toDefaultValue() = [x,y,z,a,b,c,d,e,f]; value toDefaultValue(loc l) { // this simulates the simplications the writer applies if (!(l.offset?)) { @@ -120,6 +124,7 @@ value toDefaultValue(loc l) { } } +value toDefaultValue(rat r) = [numerator(r), denominator(r)]; value toDefaultValue(datetime t) = printDateTime(t, "yyyy-MM-dd\'T\'HH:mm:ssZ"); value toDefaultValue(real r) = round(r) when r - round(r) == 0; default value toDefaultValue(value x) = x; From 9fb3493a51b7a2bbdb95ab973ee1148f4b7e8304 Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Mon, 23 Dec 2024 20:15:56 +0100 Subject: [PATCH 109/191] testing ignores orders in lists when testing value and node categories --- .../lang/json/internal/JsonValueReader.java | 23 ++----------------- .../tests/library/lang/json/JSONIOTests.rsc | 6 ++--- 2 files changed, 5 insertions(+), 24 deletions(-) diff --git a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java index 81203455444..1e5de9fc460 100644 --- a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java +++ b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java @@ -346,31 +346,12 @@ public IValue visitRational(Type type) throws IOException { } switch (in.peek()) { - case BEGIN_OBJECT: - in.beginObject(); - IInteger nomO = null, denomO = null; - while (in.hasNext()) { - switch (nextName()) { - case "nominator": - nomO = (IInteger) read(in, TF.integerType()); - case "denominator": - denomO = (IInteger) read(in, TF.integerType()); - } - } - - in.endObject(); - - if (nomO == null || denomO == null) { - throw parseErrorHere("Did not find all fields of expected rational at " + in.getPath()); - } - - return vf.rational(nomO, denomO); case BEGIN_ARRAY: in.beginArray(); - IInteger nomA = (IInteger) read(in, TF.integerType()); + IInteger numA = (IInteger) read(in, TF.integerType()); IInteger denomA = (IInteger) read(in, TF.integerType()); in.endArray(); - return vf.rational(nomA, denomA); + return vf.rational(numA, denomA); case STRING: return vf.rational(nextString()); default: diff --git a/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc b/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc index 8c4bebe763c..608b0897345 100644 --- a/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc +++ b/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc @@ -21,7 +21,7 @@ bool writeRead(type[&T] returnType, &T dt, value (value x) normalizer = value(va } json = asJSON(dt); - readBack = parseJSON(returnType, json); + readBack = normalizer(parseJSON(returnType, json)); if (readBack !:= normalizer(dt) /* ignores additional src fields */) { println("What is read back, a :"); iprintln(readBack); @@ -97,7 +97,7 @@ value toDefaultRec(value readBack) = visit(readBack) { // as the writer is top-down and this rewrite is bottom-up // we end up with different lists sometimes (if the elements have been rewritten). value toDefaultValue(set[value] x) = [*x]; - +value toDefaultValue(list[value] x) = [*{*x}]; // re-order to default set order for comparison purposes value toDefaultValue(map[void,void] _) = "object"(); value toDefaultValue(<>) = []; value toDefaultValue() = [x]; @@ -124,7 +124,7 @@ value toDefaultValue(loc l) { } } -value toDefaultValue(rat r) = [numerator(r), denominator(r)]; +value toDefaultValue(rat r) = [*{*[numerator(r), denominator(r)]}]; value toDefaultValue(datetime t) = printDateTime(t, "yyyy-MM-dd\'T\'HH:mm:ssZ"); value toDefaultValue(real r) = round(r) when r - round(r) == 0; default value toDefaultValue(value x) = x; From 69dfc60657448de34b36a34f87c765b915748f08 Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Tue, 24 Dec 2024 15:11:54 +0100 Subject: [PATCH 110/191] added docs and fixed the last bug --- src/org/rascalmpl/library/lang/json/IO.rsc | 25 +++++++++++++ .../lang/json/internal/JsonValueReader.java | 20 ++--------- .../tests/library/lang/json/JSONIOTests.rsc | 36 +++++++++++-------- 3 files changed, 49 insertions(+), 32 deletions(-) diff --git a/src/org/rascalmpl/library/lang/json/IO.rsc b/src/org/rascalmpl/library/lang/json/IO.rsc index 02ab284e0bf..8b370552775 100644 --- a/src/org/rascalmpl/library/lang/json/IO.rsc +++ b/src/org/rascalmpl/library/lang/json/IO.rsc @@ -11,7 +11,32 @@ @contributor{Arnold Lankamp - Arnold.Lankamp@cwi.nl} @contributor{Tijs van der Storm - storm@cwi.nl (CWI)} @contributor{Davy Landman - landman@cwi.nl (CWI)} +@description{ +The pairs ((asJSON)):((parseJSON)) and ((writeJSON)):((readJSON)) are both bi-directional +transformations between serializable Rascal values (all except function instances) and JSON strings. +The ((asJSON)) and ((parseJSON)) work on `str` representations, while ((writeJSON)) and ((readJSON)) +stream to/from files directly. +The basic principle of the bi-directional mapping is that constructors of algebraic data-types +map one-to-one to JSON object notation, and vice versa. The other builtin Rascal data-structures +are judiciously mapped to objects and arrays, and strings, etc. The goal is that their representation +is natural on the receiving end (e.g. TypeScript, Javascript and Python code), without sacrificing +on the naturalness of the Rascal representation. +} +@pitfalls{ +* ((asJSON)) and ((writeJSON)) are not isomorphisms. They are homomorphisms that choose +JSON arrays or JSON objects for multiple different kinds of Rascal values. For example +maps and nodes and ADT's are all mapped to JSON object notation (homonyms). +} +@benefits{ +* Using the `expected`` type arguments of ((parseJSON)) and ((readJSON)) the homonyms created by ((asJSON)) and ((writeJSON)) can be converted back to their +original Rascal structures. If the expected type contains only _concrete types_, and no _abstract types_ then +then pairs ((asJSON))/((parseJSON)) and ((writeJSON))/((readJSON)) are isomorphic. + * The _abstract types_ are `value`, `node`, `num` or any composite type that contains it. + * The _concrete types_ are all types which are not _abstract types_. +* If you provide `value` or `node` as an expected type, you will always get a useful representation +on the Rascal side. It is not guaranteed to be the same representation as before. +} module lang::json::IO import util::Maybe; diff --git a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java index 1e5de9fc460..5de69d66ef1 100644 --- a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java +++ b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java @@ -730,14 +730,12 @@ public IValue visitNode(Type type) throws IOException { Map kws = new HashMap<>(); Map args = new HashMap<>(); - boolean allIdentifiers = true; + String name = "object"; while (in.hasNext()) { String kwName = nextName(); - allIdentifiers &= isJavaIdentifier(kwName); - if (kwName.equals("_name")) { name = ((IString) read(in, TF.stringType())).getValue(); continue; @@ -774,20 +772,8 @@ public IValue visitNode(Type type) throws IOException { .sorted((e, f) -> e.getKey().compareTo(f.getKey())) .map(e -> e.getValue()) .toArray(IValue[]::new); - - if (allIdentifiers) { - return vf.node(name, argArray, kws); - } - else { - assert args.isEmpty(); - IMapWriter newMap = vf.mapWriter(); - - for (Entry e : kws.entrySet()) { - newMap.put(vf.string(e.getKey()), e.getValue()); - } - - return newMap.done(); - } + + return vf.node(name, argArray, kws); } @Override diff --git a/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc b/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc index 608b0897345..479d9c30ded 100644 --- a/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc +++ b/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc @@ -9,6 +9,7 @@ import util::Math; import Type; import DateTime; import List; +import Node; loc targetFile = |memory://test-tmp/test-<"">.json|; @@ -93,22 +94,27 @@ value toDefaultRec(value readBack) = visit(readBack) { case value x => toDefaultValue(x) }; -// this list order depends on the hashcodes of the children +// The list order depends on the hashcodes of the children // as the writer is top-down and this rewrite is bottom-up // we end up with different lists sometimes (if the elements have been rewritten). -value toDefaultValue(set[value] x) = [*x]; -value toDefaultValue(list[value] x) = [*{*x}]; // re-order to default set order for comparison purposes -value toDefaultValue(map[void,void] _) = "object"(); -value toDefaultValue(<>) = []; -value toDefaultValue() = [x]; -value toDefaultValue() = [x,y]; -value toDefaultValue() = [x,y,z]; -value toDefaultValue() = [x,y,z,a]; -value toDefaultValue() = [x,y,z,a,b]; -value toDefaultValue() = [x,y,z,a,b,c]; -value toDefaultValue() = [x,y,z,a,b,c,d]; -value toDefaultValue() = [x,y,z,a,b,c,d,e]; -value toDefaultValue() = [x,y,z,a,b,c,d,e,f]; +// therefore we normalize all lists to sets, as they can be tested for equality +// regardless of order and hashcode collisions + +value toDefaultValue(set[value] x) = x; +value toDefaultValue(list[value] x) = {*x}; // re-order to default set order for comparison purposes +value toDefaultValue(map[void,void] _) = {}; +value toDefaultValue(node x) = { {k, m[k]} | m := getKeywordParameters(x), k <- m}; +value toDefaultValue(map[value,value] m) = {{k,m[k]} | k <- m}; +value toDefaultValue(<>) = {}; +value toDefaultValue() = {x}; +value toDefaultValue() = {x,y}; +value toDefaultValue() = {x,y,z}; +value toDefaultValue() = {x,y,z,a}; +value toDefaultValue() = {x,y,z,a,b}; +value toDefaultValue() = {x,y,z,a,b,c}; +value toDefaultValue() = {x,y,z,a,b,c,d}; +value toDefaultValue() = {x,y,z,a,b,c,d,e}; +value toDefaultValue() = {x,y,z,a,b,c,d,e,f}; value toDefaultValue(loc l) { // this simulates the simplications the writer applies if (!(l.offset?)) { @@ -124,7 +130,7 @@ value toDefaultValue(loc l) { } } -value toDefaultValue(rat r) = [*{*[numerator(r), denominator(r)]}]; +value toDefaultValue(rat r) = {numerator(r), denominator(r)}; value toDefaultValue(datetime t) = printDateTime(t, "yyyy-MM-dd\'T\'HH:mm:ssZ"); value toDefaultValue(real r) = round(r) when r - round(r) == 0; default value toDefaultValue(value x) = x; From 437c892049838625574bfb91a3aa97084be8ad47 Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Tue, 24 Dec 2024 15:15:21 +0100 Subject: [PATCH 111/191] comment --- src/org/rascalmpl/library/lang/json/IO.rsc | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/org/rascalmpl/library/lang/json/IO.rsc b/src/org/rascalmpl/library/lang/json/IO.rsc index 8b370552775..0ce5ca9f2ad 100644 --- a/src/org/rascalmpl/library/lang/json/IO.rsc +++ b/src/org/rascalmpl/library/lang/json/IO.rsc @@ -32,8 +32,9 @@ maps and nodes and ADT's are all mapped to JSON object notation (homonyms). * Using the `expected`` type arguments of ((parseJSON)) and ((readJSON)) the homonyms created by ((asJSON)) and ((writeJSON)) can be converted back to their original Rascal structures. If the expected type contains only _concrete types_, and no _abstract types_ then then pairs ((asJSON))/((parseJSON)) and ((writeJSON))/((readJSON)) are isomorphic. - * The _abstract types_ are `value`, `node`, `num` or any composite type that contains it. - * The _concrete types_ are all types which are not _abstract types_. + * The _abstract types_ are `value`, `node`, `num` or any composite type that contains it. `Maybe[value]` is an example of an abstract type. + * The _concrete types_ are all types which are not _abstract types_. `Maybe[int]` is an example of a concrete type. + * Run-time values always have concrete types, while variables in code often have abstract types. * If you provide `value` or `node` as an expected type, you will always get a useful representation on the Rascal side. It is not guaranteed to be the same representation as before. } From 083d1297cebcac48edd21e291b3fa8e30e01ed38 Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Tue, 24 Dec 2024 15:20:45 +0100 Subject: [PATCH 112/191] added missing positional parameters to normalization --- .../lang/rascal/tests/library/lang/json/JSONIOTests.rsc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc b/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc index 479d9c30ded..0c319fdebef 100644 --- a/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc +++ b/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc @@ -103,7 +103,8 @@ value toDefaultRec(value readBack) = visit(readBack) { value toDefaultValue(set[value] x) = x; value toDefaultValue(list[value] x) = {*x}; // re-order to default set order for comparison purposes value toDefaultValue(map[void,void] _) = {}; -value toDefaultValue(node x) = { {k, m[k]} | m := getKeywordParameters(x), k <- m}; +value toDefaultValue(node x) = { {k, m[k]} | m := getKeywordParameters(x), k <- m} + + {*[{"arg", c[i]} | c := getChildren(x), i <- index(c)]}; value toDefaultValue(map[value,value] m) = {{k,m[k]} | k <- m}; value toDefaultValue(<>) = {}; value toDefaultValue() = {x}; From 3fb9b237771927ec526da6f693f5034e11581105 Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Tue, 24 Dec 2024 15:27:25 +0100 Subject: [PATCH 113/191] fixed compilation errors due to changes in AST API --- .../utils/IUPTRAstToSymbolConstructor.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/org/rascalmpl/interpreter/utils/IUPTRAstToSymbolConstructor.java b/src/org/rascalmpl/interpreter/utils/IUPTRAstToSymbolConstructor.java index 900708bace3..3d7485eb447 100644 --- a/src/org/rascalmpl/interpreter/utils/IUPTRAstToSymbolConstructor.java +++ b/src/org/rascalmpl/interpreter/utils/IUPTRAstToSymbolConstructor.java @@ -109,7 +109,7 @@ public IConstructor visitExpressionCallOrTree(CallOrTree x) { if (name.equals("seq")) { IList list = vf.list(); Expression.List arg = (List) x.getArguments().get(0); - for (Expression y: arg.getElements()) { + for (Expression y: arg.getElements0()) { list = list.append(y.accept(this)); } return vf.constructor(RascalValueFactory.Symbol_Seq, list); @@ -124,7 +124,7 @@ public IConstructor visitExpressionCallOrTree(CallOrTree x) { if (name.equals("alt")) { ISet set = vf.set(); Expression.Set arg = (Set) x.getArguments().get(0); - for(Expression y: arg.getElements()){ + for(Expression y: arg.getElements0()){ set = set.insert(y.accept(this)); } return vf.constructor(RascalValueFactory.Symbol_Alt, set); @@ -134,7 +134,7 @@ public IConstructor visitExpressionCallOrTree(CallOrTree x) { java.util.List args = x.getArguments(); IConstructor head = args.get(0).accept(this); IList rest = vf.list(); - for (Expression arg: ((Expression.List)args.get(1)).getElements()) { + for (Expression arg: ((Expression.List)args.get(1)).getElements0()) { rest = rest.append(arg.accept(this)); } return vf.constructor(RascalValueFactory.Symbol_Tuple, head, rest); @@ -171,7 +171,7 @@ public IConstructor visitExpressionCallOrTree(CallOrTree x) { IConstructor arg = x.getArguments().get(0).accept(this); Expression.List args = (Expression.List) x.getArguments().get(1); IList seps = vf.list(); - for (Expression elem: args.getElements()) { + for (Expression elem: args.getElements0()) { seps = seps.append(elem.accept(this)); } return vf.constructor(RascalValueFactory.Symbol_IterStarSeps, arg, seps); @@ -181,7 +181,7 @@ public IConstructor visitExpressionCallOrTree(CallOrTree x) { IConstructor arg = x.getArguments().get(0).accept(this); Expression.List args = (Expression.List) x.getArguments().get(1); IList seps = vf.list(); - for (Expression elem: args.getElements()) { + for (Expression elem: args.getElements0()) { seps = seps.append(elem.accept(this)); } return vf.constructor(RascalValueFactory.Symbol_IterSeps, arg, seps); @@ -192,7 +192,7 @@ public IConstructor visitExpressionCallOrTree(CallOrTree x) { StringConstant.Lexical sort = (org.rascalmpl.ast.StringConstant.Lexical) x.getArguments().get(0).getLiteral().getStringLiteral().getConstant(); IList rest = vf.list(); - for (Expression arg: ((Expression.List)args.get(1)).getElements()) { + for (Expression arg: ((Expression.List)args.get(1)).getElements0()) { rest = rest.append(arg.accept(this)); } return vf.constructor(RascalValueFactory.Symbol_ParameterizedSort, vf.string(sort.getString()), rest); @@ -209,7 +209,7 @@ public IConstructor visitExpressionCallOrTree(CallOrTree x) { if (name.equals("char-class")) { java.util.List args = x.getArguments(); IList ranges = vf.list(); - for (Expression arg: ((Expression.List)args.get(0)).getElements()) { + for (Expression arg: ((Expression.List)args.get(0)).getElements0()) { ranges = ranges.append(arg.accept(this)); } return vf.constructor(RascalValueFactory.Symbol_CharClass, ranges); From ab9b274b1c53cac091111350a589e1d015232db3 Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Tue, 24 Dec 2024 15:33:16 +0100 Subject: [PATCH 114/191] removed deprecated labels from elementAt and reducer functions --- src/org/rascalmpl/library/List.rsc | 21 +++++++++++++++++-- .../lang/json/internal/JsonValueReader.java | 20 ------------------ 2 files changed, 19 insertions(+), 22 deletions(-) diff --git a/src/org/rascalmpl/library/List.rsc b/src/org/rascalmpl/library/List.rsc index 2f05b116005..c1872d3b2c3 100644 --- a/src/org/rascalmpl/library/List.rsc +++ b/src/org/rascalmpl/library/List.rsc @@ -96,8 +96,17 @@ dup([3, 1, 5, 3, 1, 7, 1, 2]); list[&T] dup(list[&T] lst) = ([] | (ix in it) ? it : it + [ix] | &T ix <- lst); -@deprecated{Use a list index instead} @javaClass{org.rascalmpl.library.Prelude} +@synopsis{A function that implements `lst[index]`} +@description{ +The expression `lst[index]` has the same semantics as calling `elementAt(index)`. +} +@benefits{ +* ((elementAt)) can be passed a function argument. +} +@pitfalls{ +* `lst[index]` is significantly faster than `elementAt(index)` +} java &T elementAt(list[&T] lst, int index); @@ -480,9 +489,10 @@ list[&T] push(&T elem, list[&T] lst) = [elem] + lst; @synopsis{Apply a function to successive elements of list and combine the results.} -@deprecated{This function is deprecated. Use a reducer expression instead, like `(init | f(it, e) | e <- lst)`.} @description{ Apply the function `fn` to successive elements of list `lst` starting with `unit`. +The function application `reducer(lst, add, 0)` has the same semantics +as the expression `(0 | add(it, e) | e <- lst)`. } @examples{ ```rascal-shell @@ -491,6 +501,13 @@ int add(int x, int y) { return x + y; } reducer([10, 20, 30, 40], add, 0); ``` } +@benefits{ +* reducer can be passed as a function argument +} +@pitfalls{ +* a reducer expression can be a lot faster +* reducer expressions are more versatile (allowing multiple generators and filters) +} &T reducer(list[&T] lst, &T (&T, &T) fn, &T unit) = (unit | fn(it, elm) | elm <- lst); list[&T] remove(list[&T] lst, int indexToDelete) = diff --git a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java index 5de69d66ef1..a80c33ce9af 100644 --- a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java +++ b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java @@ -27,7 +27,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.Map.Entry; import java.util.Set; import org.rascalmpl.debug.IRascalMonitor; import org.rascalmpl.exceptions.RuntimeExceptionFactory; @@ -698,25 +697,6 @@ public IValue visitConstructor(Type type) throws IOException { return read(in, type.getAbstractDataType()); } - private boolean isJavaIdentifier(String s) { - if (s.isEmpty()) { - return false; - } - else { - if (s.charAt(0) != '_' && !Character.isJavaIdentifierStart(s.charAt(0))) { - return false; - } - - for (int i = 1; i < s.length(); i++) { - if (!Character.isJavaIdentifierPart(i)) { - return false; - } - } - } - - return true; - } - @Override public IValue visitNode(Type type) throws IOException { if (isNull()) { From 8c4e2a780a8fb6dbda24e4a2b45504bfa41006dd Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Tue, 24 Dec 2024 15:34:55 +0100 Subject: [PATCH 115/191] fixed some weird layout --- src/org/rascalmpl/library/List.rsc | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/org/rascalmpl/library/List.rsc b/src/org/rascalmpl/library/List.rsc index c1872d3b2c3..7d81d546a67 100644 --- a/src/org/rascalmpl/library/List.rsc +++ b/src/org/rascalmpl/library/List.rsc @@ -440,9 +440,10 @@ permutations([1,2,3]); set[list[&T]] permutations(list[&T] lst) = permutationsBag(distribution(lst)); -private set[list[&T]] permutationsBag(map[&T element, int occurs] b) = - isEmpty(b) ? {[]} : - { [e] + rest | e <- b, rest <- permutationsBag(removeFromBag(b,e))}; +private set[list[&T]] permutationsBag(map[&T element, int occurs] b) + = isEmpty(b) + ? {[]} + : { [e] + rest | e <- b, rest <- permutationsBag(removeFromBag(b,e))}; @synopsis{Pop top element from list, return a tuple.} @@ -508,16 +509,17 @@ reducer([10, 20, 30, 40], add, 0); * a reducer expression can be a lot faster * reducer expressions are more versatile (allowing multiple generators and filters) } -&T reducer(list[&T] lst, &T (&T, &T) fn, &T unit) = (unit | fn(it, elm) | elm <- lst); +&T reducer(list[&T] lst, &T (&T, &T) fn, &T unit) + = (unit | fn(it, elm) | elm <- lst); -list[&T] remove(list[&T] lst, int indexToDelete) = - [ lst[i] | i <- index(lst), i != indexToDelete ]; +list[&T] remove(list[&T] lst, int indexToDelete) + = [ lst[i] | i <- index(lst), i != indexToDelete ]; -private map[&T element, int occurs] removeFromBag(map[&T element, int occurs] b, &T el) = - removeFromBag(b,el,1); +private map[&T element, int occurs] removeFromBag(map[&T element, int occurs] b, &T el) + = removeFromBag(b,el,1); -private map[&T element, int occurs] removeFromBag(map[&T element, int occurs] b, &T el, int nr) = - !(b[el] ?) ? b : (b[el] <= nr ? b - (el : b[el]) : b + (el : b[el] - nr)); +private map[&T element, int occurs] removeFromBag(map[&T element, int occurs] b, &T el, int nr) + = !(b[el] ?) ? b : (b[el] <= nr ? b - (el : b[el]) : b + (el : b[el] - nr)); @synopsis{Reverse a list.} From 4bbed9fa53bc8b74c55053bfc9024a8e29c46352 Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Tue, 24 Dec 2024 16:16:21 +0100 Subject: [PATCH 116/191] Update pom.xml See if this fixes the crashing surefire fork --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index a4f803401d6..ac8b5bd79c4 100644 --- a/pom.xml +++ b/pom.xml @@ -31,7 +31,7 @@ 7.5.0 3.9.8 org.rascalmpl.shell.RascalShell - 2 + 3 11 0.28.9-BOOT1 From f0849327b5aa0f3be0748794e9699ab75e8bcf5e Mon Sep 17 00:00:00 2001 From: paulklint Date: Wed, 25 Dec 2024 13:56:12 +0100 Subject: [PATCH 117/191] Added types --- src/org/rascalmpl/library/Type.rsc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/org/rascalmpl/library/Type.rsc b/src/org/rascalmpl/library/Type.rsc index 840e18dd60a..3ccc265062c 100644 --- a/src/org/rascalmpl/library/Type.rsc +++ b/src/org/rascalmpl/library/Type.rsc @@ -133,9 +133,9 @@ public Production choice(Symbol s, set[Production] choices) { } else { // TODO: this does not work in interpreter and typechecker crashes on it (both related to the splicing) //return choice(s, { *(choice(Symbol t, set[Production] b) := ch ? b : {ch}) | ch <- choices }); - changed = false; - new_choices = {}; - for (ch <- choices) { + bool changed = false; + set[Production] new_choices = {}; + for (Production ch <- choices) { if (choice(Symbol _, set[Production] b) := ch) { changed = true; new_choices += b; From ae54d3e8a16cdb38a82be3f6e56e3b89b4f41f1b Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Thu, 26 Dec 2024 11:50:58 +0100 Subject: [PATCH 118/191] trying to cover more branches --- .../lang/rascal/tests/library/lang/json/JSONIOTests.rsc | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc b/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc index 0c319fdebef..d03a0bd3da5 100644 --- a/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc +++ b/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc @@ -13,7 +13,7 @@ import Node; loc targetFile = |memory://test-tmp/test-<"">.json|; -bool writeRead(type[&T] returnType, &T dt, value (value x) normalizer = value(value x) { return x; }) { +bool writeRead(type[&T] returnType, &T dt, value (value x) normalizer = value(value x) { return x; }, bool dateTimeAsInt=false) { dt = visit (dt) { // reals must fit in double case real r => fitDouble(r) @@ -21,7 +21,7 @@ bool writeRead(type[&T] returnType, &T dt, value (value x) normalizer = value(va case int i => i % floor(pow(2, 10)) when abs(i) > pow(2, 10) } - json = asJSON(dt); + json = asJSON(dt, dateTimeAsInt=dateTimeAsInt); readBack = normalizer(parseJSON(returnType, json)); if (readBack !:= normalizer(dt) /* ignores additional src fields */) { println("What is read back, a :"); @@ -50,6 +50,7 @@ test bool jsonWithNum1(num dt) = writeRead(#num, dt, normalizer=numNormalizer); test bool jsonWithLoc1(loc dt) = writeRead(#loc, dt); test bool jsonWithStr1(str dt) = writeRead(#str, dt); test bool jsonWithDatetime1(datetime dt) = writeRead(#datetime, dt); +test bool jsonWithDatetime2(datetime dt) = writeRead(#datetime, dt, dateTimeAsInt=true); test bool jsonWithList1(list[int] dt) = writeRead(#list[int], dt); test bool jsonWithSet1(set[int] dt) = writeRead(#set[int], dt); test bool jsonWithMap1(map[int, int] dt) = writeRead(#map[int,int], dt); From dea3dd5b5b5f7a882c31959cfd36df122f500482 Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Thu, 26 Dec 2024 12:09:59 +0100 Subject: [PATCH 119/191] increasing JSON IO tests branch and line coverage --- .../rascal/tests/library/lang/json/JSONIOTests.rsc | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc b/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc index d03a0bd3da5..99df77b12a6 100644 --- a/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc +++ b/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc @@ -13,7 +13,7 @@ import Node; loc targetFile = |memory://test-tmp/test-<"">.json|; -bool writeRead(type[&T] returnType, &T dt, value (value x) normalizer = value(value x) { return x; }, bool dateTimeAsInt=false) { +bool writeRead(type[&T] returnType, &T dt, value (value x) normalizer = value(value x) { return x; }, bool dateTimeAsInt=false, bool unpackedLocations=false, bool explicitConstructorNames=false, bool explicitDataTypes=false) { dt = visit (dt) { // reals must fit in double case real r => fitDouble(r) @@ -21,8 +21,8 @@ bool writeRead(type[&T] returnType, &T dt, value (value x) normalizer = value(va case int i => i % floor(pow(2, 10)) when abs(i) > pow(2, 10) } - json = asJSON(dt, dateTimeAsInt=dateTimeAsInt); - readBack = normalizer(parseJSON(returnType, json)); + json = asJSON(dt, dateTimeAsInt=dateTimeAsInt, unpackedLocations=unpackedLocations, explicitConstructorNames=explicitConstructorNames, explicitDataTypes=explicitDataTypes); + readBack = normalizer(parseJSON(returnType, json, explicitConstructorNames=explicitConstructorNames, explicitDataTypes=explicitDataTypes)); if (readBack !:= normalizer(dt) /* ignores additional src fields */) { println("What is read back, a :"); iprintln(readBack); @@ -48,6 +48,7 @@ test bool jsonWithRat1(rat dt) = writeRead(#rat, dt); test bool jsonWithNum1(num dt) = writeRead(#num, dt, normalizer=numNormalizer); test bool jsonWithLoc1(loc dt) = writeRead(#loc, dt); +test bool jsonWithLoc2(loc dt) = writeRead(#loc, dt, unpackedLocations=true); test bool jsonWithStr1(str dt) = writeRead(#str, dt); test bool jsonWithDatetime1(datetime dt) = writeRead(#datetime, dt); test bool jsonWithDatetime2(datetime dt) = writeRead(#datetime, dt, dateTimeAsInt=true); @@ -58,6 +59,10 @@ test bool jsonWithNode1(node dt) = writeRead(#node, dt, normalizer = toDefaultR test bool jsonWithDATA11(DATA1 dt) = writeRead(#DATA1, dt); test bool jsonWithDATA21(DATA2 dt) = writeRead(#DATA2, dt); +test bool jsonWithDATA12(DATA1 dt) = writeRead(#DATA1, dt, explicitDataTypes=true); +test bool jsonWithDATA22(DATA2 dt) = writeRead(#DATA2, dt, explicitDataTypes=true); +test bool jsonWithDATA13(DATA1 dt) = writeRead(#DATA1, dt, explicitConstructorNames=true); +test bool jsonWithDATA23(DATA2 dt) = writeRead(#DATA2, dt, explicitConstructorNames=true); @synopsis{all values can be written and read again} @description{ From 8dba9987ce717bff65281c76185af55f6bf57552 Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Thu, 26 Dec 2024 16:13:09 +0100 Subject: [PATCH 120/191] fixed corner cases with very large numbers --- src/org/rascalmpl/library/lang/json/IO.rsc | 2 +- .../lang/json/internal/JsonValueReader.java | 24 ++++++++-------- .../tests/library/lang/json/JSONIOTests.rsc | 28 +++++++++++++++++-- 3 files changed, 38 insertions(+), 16 deletions(-) diff --git a/src/org/rascalmpl/library/lang/json/IO.rsc b/src/org/rascalmpl/library/lang/json/IO.rsc index 0ce5ca9f2ad..1fe0bc22ec4 100644 --- a/src/org/rascalmpl/library/lang/json/IO.rsc +++ b/src/org/rascalmpl/library/lang/json/IO.rsc @@ -5,7 +5,7 @@ which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html } -@synopsis{(De)serialization of JSON values.} +@synopsis{Serialization of Rascal values to JSON format and deserialization back from JSON format to Rascal values.} @contributor{Jurgen J. Vinju - Jurgen.Vinju@cwi.nl - CWI} @contributor{Mark Hills - Mark.Hills@cwi.nl (CWI)} @contributor{Arnold Lankamp - Arnold.Lankamp@cwi.nl} diff --git a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java index a80c33ce9af..df8425b5868 100644 --- a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java +++ b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java @@ -758,21 +758,21 @@ public IValue visitNode(Type type) throws IOException { @Override public IValue visitNumber(Type type) throws IOException { - if (in.peek() == JsonToken.NUMBER) { - double d = in.nextDouble(); - - if (DoubleMath.isMathematicalInteger(d)) { - return vf.integer(DoubleMath.roundToLong(d, RoundingMode.FLOOR)); - } - else { - return vf.real(d); - } - } - else if (in.peek() == JsonToken.BEGIN_ARRAY) { + if (in.peek() == JsonToken.BEGIN_ARRAY) { return visitRational(type); } + + String numberString = in.nextString(); - throw parseErrorHere("unexpected kind of number"); + if (numberString.contains("r")) { + return vf.rational(numberString); + } + if (numberString.matches("[\\.eE]")) { + return vf.real(numberString); + } + else { + return vf.integer(numberString); + } } @Override diff --git a/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc b/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc index 99df77b12a6..2684fbf9be1 100644 --- a/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc +++ b/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc @@ -12,13 +12,14 @@ import List; import Node; loc targetFile = |memory://test-tmp/test-<"">.json|; +public int maxLong = floor(pow(2,63)); bool writeRead(type[&T] returnType, &T dt, value (value x) normalizer = value(value x) { return x; }, bool dateTimeAsInt=false, bool unpackedLocations=false, bool explicitConstructorNames=false, bool explicitDataTypes=false) { dt = visit (dt) { // reals must fit in double case real r => fitDouble(r) // integers must not overflow - case int i => i % floor(pow(2, 10)) when abs(i) > pow(2, 10) + case int i => i % maxLong when abs(i) > maxLong } json = asJSON(dt, dateTimeAsInt=dateTimeAsInt, unpackedLocations=unpackedLocations, explicitConstructorNames=explicitConstructorNames, explicitDataTypes=explicitDataTypes); @@ -41,6 +42,21 @@ data DATA3 = data3(int n, str kw = "abc"); data Enum = x() | y() | z(); data DATA4 = data4(Enum e = x()); +test bool writeReadIsTheSameAsAsJSONparseJSON(value example) { + jsonFile = |memory://jsontests/example.json|; + writeJSON(jsonFile, example); + written = readFile(jsonFile); + + // asJON == writeJSON + assert asJSON(example) == written; + + // parseJSON == readJSON + assert toDefaultRec(parseJSON(#value, written)) + == toDefaultRec(readJSON(#value, jsonFile)); + + return true; +} + test bool jsonWithBool1(bool dt) = writeRead(#bool, dt); test bool jsonWithInt1(int dt) = writeRead(#int, dt); test bool jsonWithReal1(real dt) = writeRead(#real, dt); @@ -91,7 +107,10 @@ test bool originTracking() { return true; } -value numNormalizer(real r) = round(r) when r - round(r) == 0; +value numNormalizer(int i) = i % maxLong when abs(i) > maxLong; +value numNormalizer(real r) = r - round(r) == 0 + ? round(r) + : fitDouble(r); default value numNormalizer(value x) = x; @@ -137,9 +156,12 @@ value toDefaultValue(loc l) { } } +value toDefaultValue(int i) = i % maxLong when abs(i) > maxLong; value toDefaultValue(rat r) = {numerator(r), denominator(r)}; value toDefaultValue(datetime t) = printDateTime(t, "yyyy-MM-dd\'T\'HH:mm:ssZ"); -value toDefaultValue(real r) = round(r) when r - round(r) == 0; +value toDefaultValue(real r) = r - round(r) == 0 + ? round(r) + : fitDouble(r); default value toDefaultValue(value x) = x; test bool accurateParseErrors() { From 6af770b29c072fd081ce74808dcfccce374babaa Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Thu, 26 Dec 2024 16:16:10 +0100 Subject: [PATCH 121/191] fixed reals --- .../rascalmpl/library/lang/json/internal/JsonValueReader.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java index df8425b5868..e09fb5d9b7b 100644 --- a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java +++ b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java @@ -767,7 +767,7 @@ public IValue visitNumber(Type type) throws IOException { if (numberString.contains("r")) { return vf.rational(numberString); } - if (numberString.matches("[\\.eE]")) { + if (numberString.matches(".*[\\.eE].*")) { return vf.real(numberString); } else { From 669cc72a69e20fa1fedaefad7a994322e2cda705 Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Thu, 26 Dec 2024 16:18:19 +0100 Subject: [PATCH 122/191] guarded test for too long longs --- .../lang/rascal/tests/library/lang/json/JSONIOTests.rsc | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc b/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc index 2684fbf9be1..6c643c6f318 100644 --- a/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc +++ b/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc @@ -43,6 +43,13 @@ data Enum = x() | y() | z(); data DATA4 = data4(Enum e = x()); test bool writeReadIsTheSameAsAsJSONparseJSON(value example) { + example = visit (example) { + // reals must fit in double + case real r => fitDouble(r) + // integers must not overflow + case int i => i % maxLong when abs(i) > maxLong + } + jsonFile = |memory://jsontests/example.json|; writeJSON(jsonFile, example); written = readFile(jsonFile); From dc1ce03e664e427615bd455aeaf7d57d94a2f232 Mon Sep 17 00:00:00 2001 From: Davy Landman Date: Fri, 27 Dec 2024 17:03:21 +0100 Subject: [PATCH 123/191] Supported ctrl+\ escape in the REPL --- src/org/rascalmpl/library/util/TermREPL.java | 8 -- src/org/rascalmpl/repl/BaseREPL.java | 5 +- src/org/rascalmpl/repl/IREPLService.java | 8 +- .../completers/RascalCommandCompletion.java | 8 -- .../repl/parametric/ILanguageProtocol.java | 7 -- .../parametric/ParametricReplService.java | 10 +- .../repl/rascal/RascalReplServices.java | 46 ++++++- .../rascal/RascalSpecificSignalsReader.java | 116 ++++++++++++++++++ 8 files changed, 178 insertions(+), 30 deletions(-) create mode 100644 src/org/rascalmpl/repl/rascal/RascalSpecificSignalsReader.java diff --git a/src/org/rascalmpl/library/util/TermREPL.java b/src/org/rascalmpl/library/util/TermREPL.java index 4a94be3c783..6dec31a27c2 100644 --- a/src/org/rascalmpl/library/util/TermREPL.java +++ b/src/org/rascalmpl/library/util/TermREPL.java @@ -153,14 +153,6 @@ public void cancelRunningCommandRequested() { handler.getEval().interrupt(); } - @Override - public void stackTraceRequested() { - var stack = stacktrace.call(new Type[0], new IValue[0], null); - if (stack != null && stack.getDynamicType() == tf.stringType()) { - stderr.println(((IString)stack.getValue()).getValue()); - } - } - @Override public String getPrompt() { return currentPrompt; diff --git a/src/org/rascalmpl/repl/BaseREPL.java b/src/org/rascalmpl/repl/BaseREPL.java index d30f8c8b5c2..0777bea1c83 100644 --- a/src/org/rascalmpl/repl/BaseREPL.java +++ b/src/org/rascalmpl/repl/BaseREPL.java @@ -77,7 +77,7 @@ public BaseREPL(IREPLService replService, Terminal term) { public void run() throws IOException { try { - replService.connect(term); + replService.connect(term, ansiColorsSupported, unicodeSupported); var running = setupInterruptHandler(); while (keepRunning) { @@ -129,6 +129,9 @@ public void run() throws IOException { try { replService.flush(); } catch (Throwable _t) { /* ignore */ } + try { + replService.disconnect(); + } catch (Throwable _t) { /* ignore */ } term.flush(); if (this.history != null) { ShutdownHooks.remove(this.history::save); diff --git a/src/org/rascalmpl/repl/IREPLService.java b/src/org/rascalmpl/repl/IREPLService.java index b9f9b0c8f8e..4459fd937a4 100644 --- a/src/org/rascalmpl/repl/IREPLService.java +++ b/src/org/rascalmpl/repl/IREPLService.java @@ -80,7 +80,12 @@ default Path historyFile() { * Connect the REPL to the Terminal, most likely want to take a copy of at least the {@link Terminal#writer()}. * @param term */ - void connect(Terminal term); + void connect(Terminal term, boolean ansiColorSupported, boolean unicodeSupported ); + + /** + * The REPL is getting terminated/disconnected + */ + void disconnect(); /** * if a REPL service has wrapped the writer for error output, return that instance @@ -99,5 +104,4 @@ default Path historyFile() { void flush(); String interruptedPrompt(boolean ansiColorsSupported, boolean unicodeSupported); - } diff --git a/src/org/rascalmpl/repl/completers/RascalCommandCompletion.java b/src/org/rascalmpl/repl/completers/RascalCommandCompletion.java index 48a995f9f64..da7738d45d0 100644 --- a/src/org/rascalmpl/repl/completers/RascalCommandCompletion.java +++ b/src/org/rascalmpl/repl/completers/RascalCommandCompletion.java @@ -1,23 +1,15 @@ package org.rascalmpl.repl.completers; -import java.util.ArrayList; -import java.util.Collection; import java.util.List; import java.util.NavigableMap; -import java.util.SortedSet; import java.util.TreeMap; import java.util.function.BiConsumer; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import java.util.stream.Collectors; import org.jline.reader.Candidate; import org.jline.reader.Completer; import org.jline.reader.LineReader; import org.jline.reader.ParsedLine; -import org.rascalmpl.interpreter.utils.StringUtils; -import org.rascalmpl.interpreter.utils.StringUtils.OffsetLengthTerm; public class RascalCommandCompletion implements Completer { private static final NavigableMap COMMAND_KEYWORDS; static { diff --git a/src/org/rascalmpl/repl/parametric/ILanguageProtocol.java b/src/org/rascalmpl/repl/parametric/ILanguageProtocol.java index 764446e2496..73ae712e7e0 100644 --- a/src/org/rascalmpl/repl/parametric/ILanguageProtocol.java +++ b/src/org/rascalmpl/repl/parametric/ILanguageProtocol.java @@ -75,12 +75,5 @@ public interface ILanguageProtocol { * Interrupt the handleInput code as soon as possible, but leave stuff in a valid state. */ void cancelRunningCommandRequested(); - - /** - * This method gets called from another thread, indicates a user pressed CTRL+\ during a call to handleInput. - * - * If possible, print the current stack trace. - */ - void stackTraceRequested(); } diff --git a/src/org/rascalmpl/repl/parametric/ParametricReplService.java b/src/org/rascalmpl/repl/parametric/ParametricReplService.java index 1c37b4f34e8..759b715259a 100644 --- a/src/org/rascalmpl/repl/parametric/ParametricReplService.java +++ b/src/org/rascalmpl/repl/parametric/ParametricReplService.java @@ -30,13 +30,21 @@ public ParametricReplService(ILanguageProtocol lang, IDEServices ide, @Nullable this.historyFile = historyFile; } + @Override - public void connect(Terminal term) { + public void connect(Terminal term, boolean ansiColorSupported, boolean unicodeSupported) { out = term.writer(); err = StreamUtil.generateErrorStream(term, term.writer()); lang.initialize(term.reader(), out, err, ide); } + @Override + public void disconnect() { + if (err != null) { + err.close(); + } + } + @Override public String prompt(boolean ansiColorsSupported, boolean unicodeSupported) { return lang.getPrompt(); diff --git a/src/org/rascalmpl/repl/rascal/RascalReplServices.java b/src/org/rascalmpl/repl/rascal/RascalReplServices.java index 888a1d36870..0d910f5d0ed 100644 --- a/src/org/rascalmpl/repl/rascal/RascalReplServices.java +++ b/src/org/rascalmpl/repl/rascal/RascalReplServices.java @@ -1,5 +1,6 @@ package org.rascalmpl.repl.rascal; +import java.io.IOException; import java.io.PrintWriter; import java.nio.file.Path; import java.util.ArrayList; @@ -18,6 +19,7 @@ import org.rascalmpl.repl.completers.RascalKeywordCompletion; import org.rascalmpl.repl.completers.RascalLocationCompletion; import org.rascalmpl.repl.completers.RascalModuleCompletion; +import org.rascalmpl.repl.output.IAnsiCommandOutput; import org.rascalmpl.repl.output.ICommandOutput; import org.rascalmpl.repl.streams.StreamUtil; @@ -25,6 +27,9 @@ public class RascalReplServices implements IREPLService { private final IRascalLanguageProtocol lang; private final @Nullable Path historyFile; + private boolean unicodeSupported = false; + private boolean ansiSupported = false; + private RascalSpecificSignalsReader in; private PrintWriter out; private PrintWriter err; @@ -34,15 +39,42 @@ public RascalReplServices(IRascalLanguageProtocol lang, @Nullable Path historyFi this.historyFile = historyFile; } + @Override - public void connect(Terminal term) { + public void connect(Terminal term, boolean ansiColorsSupported, boolean unicodeSupported) { if (out != null) { throw new IllegalStateException("Repl Service is already initialized"); } + this.unicodeSupported = unicodeSupported; + this.ansiSupported = ansiColorsSupported; var monitor = new TerminalProgressBarMonitor(term); out = monitor; err = StreamUtil.generateErrorStream(term, monitor); - lang.initialize(term.reader(), out, err, monitor, term); + in = new RascalSpecificSignalsReader(term, lang, this::printOutput); + lang.initialize(in, out, err, monitor, term); + } + + private void printOutput(ICommandOutput cmd) { + if (cmd instanceof IAnsiCommandOutput && ansiSupported) { + ((IAnsiCommandOutput)cmd).asAnsi().write(err, unicodeSupported); + } + cmd.asPlain().write(err, unicodeSupported); + } + + public void disconnect() { + if (in != null) { + try { + in.close(); + } + catch (IOException e) { + } + } + if (err != null) { + err.close(); + } + if (out != null) { + out.close(); + } } @Override @@ -52,10 +84,18 @@ public Parser inputParser() { @Override public ICommandOutput handleInput(String input) throws InterruptedException { - return lang.handleInput(input); + try { + in.startStreamMonitoring(); + return lang.handleInput(input); + } + finally { + in.pauseStreamMonitoring(); + } } + + @Override public void handleInterrupt() throws InterruptedException { lang.cancelRunningCommandRequested(); diff --git a/src/org/rascalmpl/repl/rascal/RascalSpecificSignalsReader.java b/src/org/rascalmpl/repl/rascal/RascalSpecificSignalsReader.java new file mode 100644 index 00000000000..6ea109a0eda --- /dev/null +++ b/src/org/rascalmpl/repl/rascal/RascalSpecificSignalsReader.java @@ -0,0 +1,116 @@ +package org.rascalmpl.repl.rascal; + +import java.io.IOException; +import java.io.Reader; +import java.util.function.Consumer; + +import org.jline.terminal.Terminal; +import org.jline.utils.NonBlockingReader; +import org.rascalmpl.repl.output.ICommandOutput; + +/** + *

+ * Monitor the reader stream of the terminal while a rascal command is running. + * To detect custom signals such as ctrl+\ + *

+ * + *

+ * The runner should use this reader to read from stdin, just to make sure it gets a lock first + * and the contents aren't lost while it's reading + *

+ */ +public class RascalSpecificSignalsReader extends Reader { + private final NonBlockingReader target; + private volatile boolean keepRunning = true; + private volatile boolean checkStream = false; + private final Thread streamMonitor; + private final IRascalLanguageProtocol lang; + private final Consumer printStackTrace; + + public RascalSpecificSignalsReader(Terminal term, IRascalLanguageProtocol lang, Consumer printStackTrace) { + target = term.reader(); + streamMonitor = new Thread(this::monitor, "Rascal's Input stream monitor"); + streamMonitor.setDaemon(true); + streamMonitor.start(); + this.lang = lang; + this.printStackTrace = printStackTrace; + } + + public void startStreamMonitoring() { + checkStream = true; + } + + public void pauseStreamMonitoring() { + checkStream = false; + // stop an active read/poll + target.shutdown(); + } + + private static final int EOF = -1; + private static final int TIMEOUT = -2; + private static final int CTRL_SLASH = '\\' & 0x1F; + + private void monitor() { + while (keepRunning) { + while (checkStream) { + int input; + try { + synchronized (this.lock) { + input = target.peek(1000); + } + } + catch (IOException e) { + input = TIMEOUT; + } + switch (input) { + case EOF: return; + case TIMEOUT: continue; + case CTRL_SLASH: + try { + printStackTrace.accept(lang.stackTraceRequested()); + } + catch (Throwable _ignored) {} + break; + + default: break; + } + // we got here, so let's swallow the character + if (keepRunning) { // but make sure we're not interrupted by now + synchronized (this.lock) { + try { + target.read(); + } + catch (IOException e) { + } + } + } + } + try { + Thread.sleep(1000); + } + catch (InterruptedException e) { + return; + } + } + } + + + + @Override + public int read(char[] cbuf, int off, int len) throws IOException { + synchronized (this.lock) { + return target.read(cbuf, off, len); + } + } + + @Override + public void close() throws IOException { + keepRunning = false; + pauseStreamMonitoring(); + streamMonitor.interrupt(); + synchronized (this.lock) { + target.close(); + } + } + +} From e95c18d5eb5b4671aff0b81084a36154a6130dad Mon Sep 17 00:00:00 2001 From: Davy Landman Date: Fri, 27 Dec 2024 20:34:52 +0100 Subject: [PATCH 124/191] Updated todo list --- src/org/rascalmpl/repl/BaseREPL.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/org/rascalmpl/repl/BaseREPL.java b/src/org/rascalmpl/repl/BaseREPL.java index 0777bea1c83..28b4e2e9500 100644 --- a/src/org/rascalmpl/repl/BaseREPL.java +++ b/src/org/rascalmpl/repl/BaseREPL.java @@ -67,7 +67,6 @@ public BaseREPL(IREPLService replService, Terminal term) { // todo: - // - ctrl + / support (might not be possible) // - highlighting in the prompt? (future work, as it also hurts other parts) // - measure time // - possible to tee output (future work) From f74a9cb25b8552a9c04c5ed924f03f7c0067395e Mon Sep 17 00:00:00 2001 From: Davy Landman Date: Sun, 29 Dec 2024 11:22:02 +0100 Subject: [PATCH 125/191] Refactored some names --- .../repl/TerminalProgressBarMonitor.java | 63 ++++++++++--------- 1 file changed, 33 insertions(+), 30 deletions(-) diff --git a/src/org/rascalmpl/repl/TerminalProgressBarMonitor.java b/src/org/rascalmpl/repl/TerminalProgressBarMonitor.java index 0174bdf67a8..9d15b503079 100644 --- a/src/org/rascalmpl/repl/TerminalProgressBarMonitor.java +++ b/src/org/rascalmpl/repl/TerminalProgressBarMonitor.java @@ -24,7 +24,7 @@ * This gives the console the ability to show progress almost as clearly as an IDE can with a * UI experience. * - * This class only works correctly if the actual _raw_ output stream of the terminal is wrapped + * This class only works correctly if the actual writer of the terminal is wrapped * with an object of this class. */ public class TerminalProgressBarMonitor extends PrintWriter implements IRascalMonitor { @@ -55,7 +55,7 @@ public class TerminalProgressBarMonitor extends PrintWriter implements IRascalMo /**x * Will make everything slow, but easier to spot mistakes */ - private static final boolean debug = false; + private static final boolean DEBUG = false; /** * Used to get updates to the width of the terminal @@ -72,7 +72,7 @@ public static boolean shouldWorkIn(Terminal tm) { @SuppressWarnings("resource") public TerminalProgressBarMonitor(Terminal tm) { - super(debug ? new AlwaysFlushAlwaysShowCursor(tm.writer()) : tm.writer()); + super(DEBUG ? new AlwaysFlushAlwaysShowCursor(tm.writer()) : tm.writer()); this.tm = tm; @@ -157,9 +157,12 @@ public void write(char[] n, int offset, int len) { store(n, offset, len); } else { + eraseBars(); // since we have some output to write, we now hide the bars flush(); - rawWrite(n, offset, lastNL + 1); - rawFlush(); + directWrite(n, offset, lastNL + 1); + directFlush(); + printBars(); // and print the bars back again + store(n, lastNL + 1, len - (lastNL + 1)); } } @@ -174,7 +177,7 @@ public void write(String s, int offset, int len) { */ private void flush() { if (curEnd != 0) { - rawWrite(buffer, 0, curEnd); + directWrite(buffer, 0, curEnd); curEnd = 0; } } @@ -186,7 +189,7 @@ private void flush() { public void flushLastLine() { if (curEnd != 0) { flush(); - rawWrite('\n'); + directWrite('\n'); } } @@ -201,26 +204,26 @@ private int startOfLastLine(char[] buffer, int offset, int len) { } } - private void rawPrintln(String s) { - rawWrite(s + System.lineSeparator()); + private void directPrintln(String s) { + directWrite(s + System.lineSeparator()); } - private void rawWrite(String s) { - rawWrite(s, 0, s.length()); + private void directWrite(String s) { + directWrite(s, 0, s.length()); } - private void rawWrite(int c) { + private void directWrite(int c) { super.write(c); } - private void rawWrite(char[] buf, int offset, int length) { + private void directWrite(char[] buf, int offset, int length) { super.write(buf, offset, length); } - private void rawWrite(String buf, int offset, int length) { + private void directWrite(String buf, int offset, int length) { super.write(buf, offset, length); } - private void rawFlush() { + private void directFlush() { super.flush(); } @@ -338,7 +341,7 @@ void write() { return; // robustness against very small screens. At least don't throw bounds exceptions } else if (barWidth <= 3) { // we can print the clock for good measure - rawPrintln(clock); + directPrintln(clock); return; } @@ -355,7 +358,7 @@ else if (barWidth <= 3) { // we can print the clock for good measure + " " ; - rawPrintln(line); // note this puts us one line down + directPrintln(line); // note this puts us one line down } @Override @@ -385,10 +388,10 @@ public void done() { */ private void eraseBars() { if (!bars.isEmpty()) { - rawWrite(ANSI.moveUp(bars.size())); - rawWrite(ANSI.clearToEndOfScreen()); + directWrite(ANSI.moveUp(bars.size())); + directWrite(ANSI.clearToEndOfScreen()); } - rawFlush(); + directFlush(); } /** @@ -449,7 +452,7 @@ private void printBars() { pb.write(); } - rawFlush(); + directFlush(); } @@ -477,7 +480,7 @@ private UnfinishedLine findUnfinishedLine() { @Override public synchronized void jobStart(String name, int workShare, int totalWork) { - if (bars.size() == 0) { + if (bars.isEmpty()) { // first new job, we take time to react to window resizing lineWidth = tm.getWidth(); } @@ -490,7 +493,7 @@ public synchronized void jobStart(String name, int workShare, int totalWork) { var pb = findBarByName(name); - rawWrite(ANSI.hideCursor()); + directWrite(ANSI.hideCursor()); if (pb == null) { eraseBars(); // to make room for the new bars @@ -504,8 +507,8 @@ public synchronized void jobStart(String name, int workShare, int totalWork) { pb.update(); } - rawWrite(ANSI.showCursor()); - rawFlush(); + directWrite(ANSI.showCursor()); + directFlush(); } @Override @@ -525,7 +528,7 @@ public synchronized void jobStep(String name, String message, int workShare) { public synchronized int jobEnd(String name, boolean succeeded) { var pb = findBarByName(name); - rawWrite(ANSI.hideCursor()); + directWrite(ANSI.hideCursor()); if (pb != null && --pb.nesting == -1) { eraseBars(); @@ -542,7 +545,7 @@ else if (pb != null) { pb.update(); } - rawWrite(ANSI.showCursor()); + directWrite(ANSI.showCursor()); return -1; } @@ -569,7 +572,7 @@ public synchronized void warning(String message, ISourceLocation src) { eraseBars(); } - rawPrintln(("[WARNING] " + (src != null ? (src + ": ") : "") + message)); + directPrintln(("[WARNING] " + (src != null ? (src + ": ") : "") + message)); if (!bars.isEmpty()) { printBars(); @@ -649,8 +652,8 @@ public synchronized void endAllJobs() { } try { - rawWrite(ANSI.showCursor()); - rawFlush(); + directWrite(ANSI.showCursor()); + directFlush(); out.flush(); } catch (IOException e) { From b516619a033ecea1fa7bd0f4df74cd52fc8324f3 Mon Sep 17 00:00:00 2001 From: Davy Landman Date: Sun, 29 Dec 2024 11:22:33 +0100 Subject: [PATCH 126/191] Fixed performance issues with the progress bar Mostly: only do stuff with the terminal when really needed, don't flash the cursor everytime. Don't remove the progressbar for every incoming write --- .../repl/TerminalProgressBarMonitor.java | 25 ++++++------------- 1 file changed, 8 insertions(+), 17 deletions(-) diff --git a/src/org/rascalmpl/repl/TerminalProgressBarMonitor.java b/src/org/rascalmpl/repl/TerminalProgressBarMonitor.java index 9d15b503079..63874c5d769 100644 --- a/src/org/rascalmpl/repl/TerminalProgressBarMonitor.java +++ b/src/org/rascalmpl/repl/TerminalProgressBarMonitor.java @@ -281,15 +281,17 @@ void worked(int amount, String message) { void update() { // to avoid flicker we only print if there is a new bar character to draw if (newWidth() != previousWidth) { + directWrite(ANSI.hideCursor()); stepper++; - rawWrite(ANSI.moveUp(bars.size() - bars.indexOf(this))); + directWrite(ANSI.moveUp(bars.size() - bars.indexOf(this))); write(); // this moves the cursor already one line down due to `println` int distance = bars.size() - bars.indexOf(this) - 1; if (distance > 0) { // ANSI will move 1 line even if the parameter is 0 - rawWrite(ANSI.moveDown(distance)); + directWrite(ANSI.moveDown(distance)); } - rawFlush(); + directWrite(ANSI.showCursor()); + directFlush(); } } @@ -516,11 +518,8 @@ public synchronized void jobStep(String name, String message, int workShare) { ProgressBar pb = findBarByName(name); if (pb != null) { - rawWrite(ANSI.hideCursor()); pb.worked(workShare, message); pb.update(); - rawWrite(ANSI.showCursor()); - rawFlush(); } } @@ -591,14 +590,10 @@ public synchronized void warning(String message, ISourceLocation src) { @Override public void write(String s, int off, int len) { if (!bars.isEmpty()) { - eraseBars(); - findUnfinishedLine().write(s, off, len); - - printBars(); } else { - rawWrite(s, off, len); + directWrite(s, off, len); } } /** @@ -609,14 +604,12 @@ public void write(String s, int off, int len) { @Override public synchronized void write(char[] buf, int off, int len) { if (!bars.isEmpty()) { - eraseBars(); findUnfinishedLine().write(buf, off, len); - printBars(); } else { // this must be the raw output stream // otherwise rascal prompts (which do not end in newlines) will be buffered - rawWrite(buf, off, len); + directWrite(buf, off, len); } } @@ -628,12 +621,10 @@ public synchronized void write(char[] buf, int off, int len) { @Override public synchronized void write(int c) { if (!bars.isEmpty()) { - eraseBars(); findUnfinishedLine().write(new char[] { (char) c }, 0, 1); - printBars(); } else { - rawWrite(c); + directWrite(c); } } From 78aaa712613ef0178221f7bb5feb6453f4f03691 Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Tue, 31 Dec 2024 11:35:10 +0100 Subject: [PATCH 127/191] fixed json support for numbers much larger than MAX_LONG and more precise than doubles --- src/org/rascalmpl/library/lang/json/IO.rsc | 26 ++++++++++ .../lang/json/internal/JsonValueReader.java | 10 ++-- .../lang/json/internal/JsonValueWriter.java | 47 ++++++++++++++++--- .../tests/library/lang/json/JSONIOTests.rsc | 14 ------ 4 files changed, 70 insertions(+), 27 deletions(-) diff --git a/src/org/rascalmpl/library/lang/json/IO.rsc b/src/org/rascalmpl/library/lang/json/IO.rsc index 1fe0bc22ec4..f66f2457deb 100644 --- a/src/org/rascalmpl/library/lang/json/IO.rsc +++ b/src/org/rascalmpl/library/lang/json/IO.rsc @@ -27,6 +27,10 @@ on the naturalness of the Rascal representation. * ((asJSON)) and ((writeJSON)) are not isomorphisms. They are homomorphisms that choose JSON arrays or JSON objects for multiple different kinds of Rascal values. For example maps and nodes and ADT's are all mapped to JSON object notation (homonyms). +* JSON is a serialization format that does not deal with programming language numerical +encodings such as `double`, `float`` or `long`. ((writeJSON)) and ((asJSON)) might write numbers +beyond the limits and beyond the accuracy of what the other programming language can deal with. +You can expect errors at the time when the other language (Javascript, Python, TypeScript) reads these numbers from JSON. } @benefits{ * Using the `expected`` type arguments of ((parseJSON)) and ((readJSON)) the homonyms created by ((asJSON)) and ((writeJSON)) can be converted back to their @@ -37,6 +41,28 @@ then pairs ((asJSON))/((parseJSON)) and ((writeJSON))/((readJSON)) are isomorphi * Run-time values always have concrete types, while variables in code often have abstract types. * If you provide `value` or `node` as an expected type, you will always get a useful representation on the Rascal side. It is not guaranteed to be the same representation as before. +* ((readJSON)) and ((parseJSON)) can read numbers beyond the bounds of normal `int`, `long` and `doubles`. As +long as the number is syntactically correct, they will bind to the right Rascal number representation. +} +@examples{ +This example demonstrates serializing: +* constructors without parameters as "enums" +* constructors with both positional fields and keyword fields +* datetime serialization +* integer serialization +```rascal-shell +import lang::json::IO; +data Size = xxs() | xs() | s() | m() | l() | xl() | xxl(); +data Person + = person(str firstName, str lastName, datetime birth, int height=0, Size size = m()); +example = person("Santa", "Class", height=175, size=xxl()); +asJSON(example, dateTimeFormat="YYYY-MM-DD"); +``` + +On the way back we can also track origins for constructors: +```rascal-shell,continue +parseJSON(#Person, example, trackOrigins=true) +``` } module lang::json::IO diff --git a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java index e09fb5d9b7b..80c3a5837d6 100644 --- a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java +++ b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java @@ -98,7 +98,7 @@ public IValue visitInteger(Type type) throws IOException { try { switch (in.peek()) { case NUMBER: - return vf.integer(in.nextLong()); + // fallthrough case STRING: return vf.integer(nextString()); case NULL: @@ -118,7 +118,7 @@ public IValue visitReal(Type type) throws IOException { try { switch (in.peek()) { case NUMBER: - return vf.real(in.nextDouble()); + // fallthrough case STRING: return vf.real(nextString()); case NULL: @@ -294,11 +294,7 @@ else if (path != null) { public IValue visitValue(Type type) throws IOException { switch (in.peek()) { case NUMBER: - try { - return vf.integer(in.nextLong()); - } catch (NumberFormatException e) { - return vf.real(in.nextDouble()); - } + return visitNumber(TF.numberType()); case STRING: return visitString(TF.stringType()); case BEGIN_ARRAY: diff --git a/src/org/rascalmpl/library/lang/json/internal/JsonValueWriter.java b/src/org/rascalmpl/library/lang/json/internal/JsonValueWriter.java index 68830ddf99f..26c7d28ad09 100644 --- a/src/org/rascalmpl/library/lang/json/internal/JsonValueWriter.java +++ b/src/org/rascalmpl/library/lang/json/internal/JsonValueWriter.java @@ -33,6 +33,7 @@ import io.usethesource.vallang.IList; import io.usethesource.vallang.IMap; import io.usethesource.vallang.INode; +import io.usethesource.vallang.INumber; import io.usethesource.vallang.IRational; import io.usethesource.vallang.IReal; import io.usethesource.vallang.ISet; @@ -53,6 +54,40 @@ public class JsonValueWriter { private IFunction formatters; private boolean explicitConstructorNames = false; private boolean explicitDataTypes; + + /** helper class for number serialization without quotes */ + private static class RascalNumber extends Number { + private static final long serialVersionUID = -2204435793489295963L; + public INumber wrapped; + + @Override + public int intValue() { + return wrapped.toInteger().intValue(); + } + + @Override + public long longValue() { + return wrapped.toInteger().longValue(); + } + + @Override + public float floatValue() { + // TODO parameterize precision + return wrapped.toReal(20).floatValue(); + } + + @Override + public double doubleValue() { + return wrapped.toReal(20).doubleValue(); + } + + @Override + public String toString() { + return wrapped.toString(); + } + } + + private RascalNumber wrapper = new RascalNumber(); public JsonValueWriter() { setCalendarFormat("yyyy-MM-dd'T'HH:mm:ss'Z'"); @@ -118,16 +153,16 @@ public Void visitString(IString o) throws IOException { @Override public Void visitReal(IReal o) throws IOException { - // TODO: warning might loose precision here?! - out.value(o.doubleValue()); + wrapper.wrapped = o; + out.value(wrapper); return null; } @Override public Void visitRational(IRational o) throws IOException { out.beginArray(); - out.value(o.numerator().longValue()); - out.value(o.denominator().longValue()); + o.numerator().accept(this); + o.denominator().accept(this); out.endArray(); return null; @@ -314,8 +349,8 @@ public Void visitConstructor(IConstructor o) throws IOException { @Override public Void visitInteger(IInteger o) throws IOException { - // TODO: may loose precision - out.value(o.longValue()); + wrapper.wrapped = o; + out.value(wrapper); return null; } diff --git a/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc b/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc index 6c643c6f318..614212d7ac8 100644 --- a/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc +++ b/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc @@ -15,13 +15,6 @@ loc targetFile = |memory://test-tmp/test-<"">.json|; public int maxLong = floor(pow(2,63)); bool writeRead(type[&T] returnType, &T dt, value (value x) normalizer = value(value x) { return x; }, bool dateTimeAsInt=false, bool unpackedLocations=false, bool explicitConstructorNames=false, bool explicitDataTypes=false) { - dt = visit (dt) { - // reals must fit in double - case real r => fitDouble(r) - // integers must not overflow - case int i => i % maxLong when abs(i) > maxLong - } - json = asJSON(dt, dateTimeAsInt=dateTimeAsInt, unpackedLocations=unpackedLocations, explicitConstructorNames=explicitConstructorNames, explicitDataTypes=explicitDataTypes); readBack = normalizer(parseJSON(returnType, json, explicitConstructorNames=explicitConstructorNames, explicitDataTypes=explicitDataTypes)); if (readBack !:= normalizer(dt) /* ignores additional src fields */) { @@ -43,13 +36,6 @@ data Enum = x() | y() | z(); data DATA4 = data4(Enum e = x()); test bool writeReadIsTheSameAsAsJSONparseJSON(value example) { - example = visit (example) { - // reals must fit in double - case real r => fitDouble(r) - // integers must not overflow - case int i => i % maxLong when abs(i) > maxLong - } - jsonFile = |memory://jsontests/example.json|; writeJSON(jsonFile, example); written = readFile(jsonFile); From 66d7e9ad0451084e96ca819fe2abdcd8bd7b1c59 Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Tue, 31 Dec 2024 11:58:01 +0100 Subject: [PATCH 128/191] fixed test normalization for the case of duplicates in key list values --- .../lang/json/internal/JsonValueReader.java | 2 +- .../tests/library/lang/json/JSONIOTests.rsc | 33 ++++++++++++++----- 2 files changed, 25 insertions(+), 10 deletions(-) diff --git a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java index 80c3a5837d6..fb6b9ff237c 100644 --- a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java +++ b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java @@ -294,7 +294,7 @@ else if (path != null) { public IValue visitValue(Type type) throws IOException { switch (in.peek()) { case NUMBER: - return visitNumber(TF.numberType()); + return visitNumber(TF.numberType()) case STRING: return visitString(TF.stringType()); case BEGIN_ARRAY: diff --git a/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc b/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc index 614212d7ac8..452995b54e4 100644 --- a/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc +++ b/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc @@ -119,21 +119,36 @@ value toDefaultRec(value readBack) = visit(readBack) { // regardless of order and hashcode collisions value toDefaultValue(set[value] x) = x; -value toDefaultValue(list[value] x) = {*x}; // re-order to default set order for comparison purposes +value toDefaultValue(list[value] x) { + // duplicates have to be made unique in order to allow for + // isomorphic behavior. For example when a list `[1,1]`` is a key, + // then we should not map it simply to `{1}` because `[1]` + // will also be mapped to `{1}`. This would have the effect of + // loosing the other value in a map[list[int]:str] where both keys are + // present + map[value,int] count = (); + result = {}; + for (value e <- x) { + count[e]?0 += 1; + result += (count[e] == 1) ? e : ""; + } + + return result; +} value toDefaultValue(map[void,void] _) = {}; value toDefaultValue(node x) = { {k, m[k]} | m := getKeywordParameters(x), k <- m} + {*[{"arg", c[i]} | c := getChildren(x), i <- index(c)]}; value toDefaultValue(map[value,value] m) = {{k,m[k]} | k <- m}; value toDefaultValue(<>) = {}; value toDefaultValue() = {x}; -value toDefaultValue() = {x,y}; -value toDefaultValue() = {x,y,z}; -value toDefaultValue() = {x,y,z,a}; -value toDefaultValue() = {x,y,z,a,b}; -value toDefaultValue() = {x,y,z,a,b,c}; -value toDefaultValue() = {x,y,z,a,b,c,d}; -value toDefaultValue() = {x,y,z,a,b,c,d,e}; -value toDefaultValue() = {x,y,z,a,b,c,d,e,f}; +value toDefaultValue() = toDefaultValue([x,y]); +value toDefaultValue() = toDefaultValue([x,y,z]); +value toDefaultValue() = toDefaultValue([x,y,z,a]); +value toDefaultValue() = toDefaultValue([x,y,z,a,b]); +value toDefaultValue() = toDefaultValue([x,y,z,a,b,c]); +value toDefaultValue() = toDefaultValue([x,y,z,a,b,c,d]); +value toDefaultValue() = toDefaultValue([x,y,z,a,b,c,d,e]); +value toDefaultValue() = toDefaultValue([x,y,z,a,b,c,d,e,f]); value toDefaultValue(loc l) { // this simulates the simplications the writer applies if (!(l.offset?)) { From c13a2ed64e9e68e624e35c69212a91fcfab7e2a5 Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Tue, 31 Dec 2024 13:15:17 +0100 Subject: [PATCH 129/191] using a simpler way to deal with map key collisions caused by normalization --- .../tests/library/lang/json/JSONIOTests.rsc | 36 +++++++++---------- 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc b/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc index 452995b54e4..2a2b23f28e4 100644 --- a/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc +++ b/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc @@ -108,9 +108,20 @@ default value numNormalizer(value x) = x; @synopsis{Normalizer used to replace unrecoverable types with their default representatives} -value toDefaultRec(value readBack) = visit(readBack) { - case value x => toDefaultValue(x) -}; +value toDefaultRec(value readBack) { + value mapToSet(value _:map[value, value] m) = {{k,m[k]} | value k <- m}; + default value mapToSet(value x) = x; + + // first we remove maps cleanly to avoid key collisions caused by normalization + noMaps = visit(readBack) { + case value v => mapToSet(v) + }; + + // then we normalize the rest, which could cause key collisions if maps were still there + return visit(noMaps) { + case value x => toDefaultValue(x) + }; +} // The list order depends on the hashcodes of the children // as the writer is top-down and this rewrite is bottom-up @@ -119,22 +130,7 @@ value toDefaultRec(value readBack) = visit(readBack) { // regardless of order and hashcode collisions value toDefaultValue(set[value] x) = x; -value toDefaultValue(list[value] x) { - // duplicates have to be made unique in order to allow for - // isomorphic behavior. For example when a list `[1,1]`` is a key, - // then we should not map it simply to `{1}` because `[1]` - // will also be mapped to `{1}`. This would have the effect of - // loosing the other value in a map[list[int]:str] where both keys are - // present - map[value,int] count = (); - result = {}; - for (value e <- x) { - count[e]?0 += 1; - result += (count[e] == 1) ? e : ""; - } - - return result; -} +value toDefaultValue(list[value] x) = {*x}; value toDefaultValue(map[void,void] _) = {}; value toDefaultValue(node x) = { {k, m[k]} | m := getKeywordParameters(x), k <- m} + {*[{"arg", c[i]} | c := getChildren(x), i <- index(c)]}; @@ -192,6 +188,8 @@ test bool accurateParseErrors() { return true; } +test bool regression1() = jsonRandom1(("a":12,[]:{})); + data Cons = cons(str bla = "null"); test bool dealWithNull() { From b188a8f62ec31c8e69368d8c3fab54859e2612e1 Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Tue, 31 Dec 2024 13:22:24 +0100 Subject: [PATCH 130/191] fixed copy paste error and typo in java code --- .../library/lang/json/internal/JsonValueReader.java | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java index fb6b9ff237c..f10aa19aebc 100644 --- a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java +++ b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java @@ -17,7 +17,6 @@ import java.io.StringReader; import java.lang.invoke.MethodHandles; import java.lang.invoke.VarHandle; -import java.math.RoundingMode; import java.net.URISyntaxException; import java.text.ParseException; import java.text.SimpleDateFormat; @@ -52,7 +51,6 @@ import io.usethesource.vallang.type.TypeFactory; import io.usethesource.vallang.type.TypeStore; -import com.google.common.math.DoubleMath; import com.google.gson.JsonParseException; import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonToken; @@ -125,11 +123,11 @@ public IValue visitReal(Type type) throws IOException { in.nextNull(); return inferNullValue(nulls, type); default: - throw parseErrorHere("Expected integer but got " + in.peek()); + throw parseErrorHere("Expected real but got " + in.peek()); } } catch (NumberFormatException e) { - throw parseErrorHere("Expected integer but got " + e.getMessage()); + throw parseErrorHere("Expected real but got " + e.getMessage()); } } @@ -294,7 +292,7 @@ else if (path != null) { public IValue visitValue(Type type) throws IOException { switch (in.peek()) { case NUMBER: - return visitNumber(TF.numberType()) + return visitNumber(TF.numberType()); case STRING: return visitString(TF.stringType()); case BEGIN_ARRAY: From 993af6da95b81b2b361c5649e58a240bc91fb205 Mon Sep 17 00:00:00 2001 From: Davy Landman Date: Thu, 2 Jan 2025 21:17:13 +0100 Subject: [PATCH 131/191] Cherry-picking the fix in 4c14ae6 --- src/org/rascalmpl/repl/TerminalProgressBarMonitor.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/org/rascalmpl/repl/TerminalProgressBarMonitor.java b/src/org/rascalmpl/repl/TerminalProgressBarMonitor.java index 63874c5d769..5f0912e69d9 100644 --- a/src/org/rascalmpl/repl/TerminalProgressBarMonitor.java +++ b/src/org/rascalmpl/repl/TerminalProgressBarMonitor.java @@ -531,9 +531,7 @@ public synchronized int jobEnd(String name, boolean succeeded) { if (pb != null && --pb.nesting == -1) { eraseBars(); - // write it one last time into the scrollback buffer (on top) pb.done(); - pb.write(); bars.remove(pb); // print the left over bars under this one. printBars(); From 59958f542f287218ffb3eb4a07dbabfe57e09937 Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Fri, 3 Jan 2025 15:37:53 +0100 Subject: [PATCH 132/191] added tests, of which two fail --- .../lang/rascal/tests/library/lang/json/JSONIOTests.rsc | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc b/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc index 2a2b23f28e4..c37b780450b 100644 --- a/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc +++ b/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc @@ -208,6 +208,12 @@ test bool dealWithNull() { // the builtin Maybe interpreter with non-null assert parseJSON(#map[str,Maybe[str]], "{\"bla\": \"foo\"}") == ("bla":just("foo")); + // test different specific nulls for different expected types: + for (t <- [#Maybe[value], #node, #int, #real, #rat, #value, #str, + #list[value], #set[value], #map[value,value], #loc, #bool]) { + assert parseJSON(t, "null") == defaultJSONNULLValues[t]; + } + // keyword parameters and null assert cons(bla="foo") := parseJSON(#Cons, "{\"bla\": \"foo\"}"); assert cons() := parseJSON(#Cons, "{\"bla\": null}"); From 316c47ac3a5b97d8d7360f44ec1e6a3dcff72a11 Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Fri, 3 Jan 2025 15:43:07 +0100 Subject: [PATCH 133/191] fixed null for source locations --- .../rascalmpl/library/lang/json/internal/JsonValueReader.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java index f10aa19aebc..372f91d2c66 100644 --- a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java +++ b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java @@ -193,6 +193,10 @@ public IValue visitFunction(Type type) throws IOException { @Override public IValue visitSourceLocation(Type type) throws IOException { + if (isNull()) { + return inferNullValue(nulls, type); + } + switch (in.peek()) { case STRING: return sourceLocationString(); From d16588073ba102a510b8a1fa37cdfc57cccc7959 Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Fri, 3 Jan 2025 15:52:29 +0100 Subject: [PATCH 134/191] fixed bug in bool recognition and added fail-safe for when the top-level value is a null without a definition in the nulls map --- .../library/lang/json/internal/JsonValueReader.java | 8 ++++++-- .../lang/rascal/tests/library/lang/json/JSONIOTests.rsc | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java index 372f91d2c66..31f6127e73f 100644 --- a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java +++ b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java @@ -304,7 +304,7 @@ public IValue visitValue(Type type) throws IOException { case BEGIN_OBJECT: return visitNode(TF.nodeType()); case BOOLEAN: - return visitBool(TF.nodeType()); + return visitBool(TF.boolType()); case NAME: // this would be weird though return vf.string(nextName()); @@ -976,7 +976,11 @@ public IValue read(JsonReader in, Type expected) throws IOException { var dispatch = new ExpectedTypeDispatcher(in); try { - return expected.accept(dispatch); + var result = expected.accept(dispatch); + if (result == null) { + throw new JsonParseException("The top-level value is a 'null' without a known value representation."); + } + return result; } catch (EOFException | JsonParseException | NumberFormatException | MalformedJsonException | IllegalStateException | NullPointerException e) { throw dispatch.parseErrorHere(e.getMessage()); diff --git a/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc b/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc index c37b780450b..d3668c1872a 100644 --- a/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc +++ b/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc @@ -211,7 +211,7 @@ test bool dealWithNull() { // test different specific nulls for different expected types: for (t <- [#Maybe[value], #node, #int, #real, #rat, #value, #str, #list[value], #set[value], #map[value,value], #loc, #bool]) { - assert parseJSON(t, "null") == defaultJSONNULLValues[t]; + assert parseJSON(t, "null") == (defaultJSONNULLValues[t]?"default-not-found"); } // keyword parameters and null From bd252a3474f4216c1ed79c22fcbd01f691fa1154 Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Fri, 3 Jan 2025 15:57:38 +0100 Subject: [PATCH 135/191] added test for undefined null and added bool:false to the default map --- src/org/rascalmpl/library/lang/json/IO.rsc | 3 ++- .../lang/rascal/tests/library/lang/json/JSONIOTests.rsc | 7 +++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/org/rascalmpl/library/lang/json/IO.rsc b/src/org/rascalmpl/library/lang/json/IO.rsc index f66f2457deb..b09156820d5 100644 --- a/src/org/rascalmpl/library/lang/json/IO.rsc +++ b/src/org/rascalmpl/library/lang/json/IO.rsc @@ -119,7 +119,8 @@ public map[type[value] forType, value nullValue] defaultJSONNULLValues = ( #list[value] : [], #set[value] : {}, #map[value,value] : (), - #loc : |unknown:///| + #loc : |unknown:///|, + #bool : false ); @javaClass{org.rascalmpl.library.lang.json.IO} diff --git a/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc b/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc index d3668c1872a..bbefdf47c6c 100644 --- a/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc +++ b/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc @@ -214,6 +214,13 @@ test bool dealWithNull() { assert parseJSON(t, "null") == (defaultJSONNULLValues[t]?"default-not-found"); } + // test undefined top-level null + try { + parseJSON(#int, "null", nulls=()); + assert false; + } + catch ParseError(_): assert true; + // keyword parameters and null assert cons(bla="foo") := parseJSON(#Cons, "{\"bla\": \"foo\"}"); assert cons() := parseJSON(#Cons, "{\"bla\": null}"); From 1286bd7f3c9de66c51946b8c6e53eeb80a6eadaf Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Fri, 3 Jan 2025 16:19:15 +0100 Subject: [PATCH 136/191] if nulls appear in ignorable places, such as list or set elements, or values in maps, etc, then they are ignored by the JSON reader from now on. Where values are expected but a null appears, such as in the positional fields of ADTs a proper ParseError is thrown --- src/org/rascalmpl/library/lang/json/IO.rsc | 1 + .../lang/json/internal/JsonValueReader.java | 24 +++++++++++++++---- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/src/org/rascalmpl/library/lang/json/IO.rsc b/src/org/rascalmpl/library/lang/json/IO.rsc index b09156820d5..96010d7de09 100644 --- a/src/org/rascalmpl/library/lang/json/IO.rsc +++ b/src/org/rascalmpl/library/lang/json/IO.rsc @@ -112,6 +112,7 @@ public map[type[value] forType, value nullValue] defaultJSONNULLValues = ( #Maybe[value] : nothing(), #node : "null"(), #int : -1, + #num : -1.0, #real : -1.0, #rat : -1r1, #value : "null"(), diff --git a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java index 31f6127e73f..152ae7f240d 100644 --- a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java +++ b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java @@ -178,6 +178,10 @@ public IValue visitTuple(Type type) throws IOException { } in.endArray(); + + // filter all the null values + l.removeIf(p -> p == null); + return vf.tuple(l.toArray(new IValue[l.size()])); } @@ -371,7 +375,10 @@ public IValue visitMap(Type type) throws IOException { } while (in.hasNext()) { - w.put(vf.string(nextName()), read(in, type.getValueType())); + IValue value = read(in, type.getValueType()); + if (value != null) { + w.put(vf.string(nextName()), value); + } } in.endObject(); return w.done(); @@ -381,7 +388,9 @@ public IValue visitMap(Type type) throws IOException { in.beginArray(); IValue key = read(in, type.getKeyType()); IValue value = read(in, type.getValueType()); - w.put(key,value); + if (key != null && value != null) { + w.put(key,value); + } in.endArray(); } in.endArray(); @@ -748,6 +757,7 @@ public IValue visitNode(Type type) throws IOException { IValue[] argArray = args.entrySet().stream() .sorted((e, f) -> e.getKey().compareTo(f.getKey())) + .filter(e -> e.getValue() != null) .map(e -> e.getValue()) .toArray(IValue[]::new); @@ -806,7 +816,10 @@ public IValue visitList(Type type) throws IOException { in.beginArray(); while (in.hasNext()) { // here we pass label from the higher context - w.append(read(in, type.getElementType())); + IValue elem = read(in, type.getElementType()); + if (elem != null) { + w.append(elem); + } } in.endArray(); @@ -822,7 +835,10 @@ public IValue visitSet(Type type) throws IOException { in.beginArray(); while (in.hasNext()) { // here we pass label from the higher context - w.insert(read(in, type.getElementType())); + IValue elem = read(in, type.getElementType()); + if (elem != null) { + w.insert(elem); + } } in.endArray(); From 133e7a5eef03c24364ba124ba8c0cf3e2c06d4fc Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Sun, 5 Jan 2025 15:48:45 +0100 Subject: [PATCH 137/191] bumped vallang for bugfix in compareTo --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 5f41ba08377..1ea39c9010c 100644 --- a/pom.xml +++ b/pom.xml @@ -434,7 +434,7 @@ io.usethesource vallang - 1.0.0-RC12 + 1.0.0-RC14 org.ow2.asm From c8db982359981aca346026c9e1d809b7dcf5aabb Mon Sep 17 00:00:00 2001 From: Davy Landman Date: Mon, 6 Jan 2025 14:21:11 +0100 Subject: [PATCH 138/191] Fixed unshaded release configuration --- .github/workflows/build.yaml | 49 ++++++++++++++++++++++-------------- pom.xml | 2 -- 2 files changed, 30 insertions(+), 21 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 7234586e7a1..7bf34e0c796 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -93,17 +93,32 @@ jobs: tests (buildjet-4vcpu-ubuntu-2204-arm) ttl: 15 - - name: Deploy shaded jar - if: startsWith(github.ref, 'refs/tags/v') - uses: usethesource/releases-maven-action@v1 + - name: Prepare Draft Release + uses: softprops/action-gh-release@v2 + if: startsWith(github.ref, 'refs/tags/') with: - maven-username: ${{ secrets.RELEASE_MAVEN_USERNAME }} - maven-password: ${{ secrets.RELEASE_MAVEN_PASSWORD }} - maven-local-port: ${{ secrets.RELEASE_MAVEN_LOCAL_PORT }} - ssh-hostname: ${{ secrets.RELEASE_SSH_SERVER }} - ssh-known-host: ${{ secrets.RELEASE_SSH_KNOWN_HOSTS }} - ssh-username: ${{ secrets.RELEASE_SSH_USERNAME }} - ssh-private-key: ${{ secrets.RELEASE_SSH_PRIVATE_KEY }} + draft: true + files: ${{ steps.build-artifact.outputs.artifact-root-dir}}/**/* + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + build-unshaded: + if: ${{ startsWith(github.ref, 'refs/tags/') && !(github.ref == 'refs/heads/main' && contains(github.event.head_commit.message, '[maven-release-plugin]')) }} + needs: [builds] + runs-on: buildjet-4vcpu-ubuntu-2204 + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-java@v4 + with: + java-version: 11 + distribution: 'temurin' + cache: 'maven' + + - name: prepare-unshaded + run: sed -i '' 's/rascal/rascal-unshaded/' pom.xml + + - name: build + run: mvn clean package -B -Drascal.compile.skip -Drascal.tutor.skip -DskipTests -Punshaded - name: Deploy unshaded jar if: startsWith(github.ref, 'refs/tags/v') @@ -116,16 +131,12 @@ jobs: ssh-known-host: ${{ secrets.RELEASE_SSH_KNOWN_HOSTS }} ssh-username: ${{ secrets.RELEASE_SSH_USERNAME }} ssh-private-key: ${{ secrets.RELEASE_SSH_PRIVATE_KEY }} - maven-options: -Punshaded + maven-options: | + -Punshaded + -Drascal.compile.skip + -Drascal.tutor.skip + -DskipTests - - name: Prepare Draft Release - uses: softprops/action-gh-release@v2 - if: startsWith(github.ref, 'refs/tags/') - with: - draft: true - files: ${{ steps.build-artifact.outputs.artifact-root-dir}}/**/* - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} tests: diff --git a/pom.xml b/pom.xml index 5f41ba08377..e138bcc0e42 100644 --- a/pom.xml +++ b/pom.xml @@ -601,8 +601,6 @@ jline:* - unshaded - true
From 0fce924903c8f1001ca828b64f014d67f67caaa8 Mon Sep 17 00:00:00 2001 From: Davy Landman Date: Mon, 6 Jan 2025 14:23:33 +0100 Subject: [PATCH 139/191] [maven-release-plugin] prepare release v0.41.0-RC3 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index e138bcc0e42..07ba6735fca 100644 --- a/pom.xml +++ b/pom.xml @@ -3,12 +3,12 @@ org.rascalmpl rascal - 0.41.0-RC3-SNAPSHOT + 0.41.0-RC3 jar scm:git:ssh://git@github.com/usethesource/rascal.git - v0.41.0-RC1 + v0.41.0-RC3 From 612eb11f2dae0361adc847dae48e3cc9d05bb893 Mon Sep 17 00:00:00 2001 From: Davy Landman Date: Mon, 6 Jan 2025 14:23:38 +0100 Subject: [PATCH 140/191] [maven-release-plugin] prepare for next development iteration --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 07ba6735fca..8c559adb75f 100644 --- a/pom.xml +++ b/pom.xml @@ -3,12 +3,12 @@ org.rascalmpl rascal - 0.41.0-RC3 + 0.41.0-RC4-SNAPSHOT jar scm:git:ssh://git@github.com/usethesource/rascal.git - v0.41.0-RC3 + v0.41.0-RC1 From 80b732ea917748194ef2fd5e80934e8acce63051 Mon Sep 17 00:00:00 2001 From: Davy Landman Date: Mon, 6 Jan 2025 14:26:40 +0100 Subject: [PATCH 141/191] Fixed build step error [skip ci] --- .github/workflows/build.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 7bf34e0c796..6d68fb106b4 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -102,7 +102,7 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - build-unshaded: + deploy-unshaded: if: ${{ startsWith(github.ref, 'refs/tags/') && !(github.ref == 'refs/heads/main' && contains(github.event.head_commit.message, '[maven-release-plugin]')) }} needs: [builds] runs-on: buildjet-4vcpu-ubuntu-2204 @@ -115,7 +115,7 @@ jobs: cache: 'maven' - name: prepare-unshaded - run: sed -i '' 's/rascal/rascal-unshaded/' pom.xml + run: sed -i 's/rascal/rascal-unshaded/' pom.xml - name: build run: mvn clean package -B -Drascal.compile.skip -Drascal.tutor.skip -DskipTests -Punshaded From dc809afe5c661e8067b7a52333be84b816738b6a Mon Sep 17 00:00:00 2001 From: Davy Landman Date: Mon, 6 Jan 2025 14:28:42 +0100 Subject: [PATCH 142/191] [maven-release-plugin] prepare release v0.41.0-RC4 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 8c559adb75f..8250bfe5d2f 100644 --- a/pom.xml +++ b/pom.xml @@ -3,12 +3,12 @@ org.rascalmpl rascal - 0.41.0-RC4-SNAPSHOT + 0.41.0-RC4 jar scm:git:ssh://git@github.com/usethesource/rascal.git - v0.41.0-RC1 + v0.41.0-RC4 From d95320f13e1692b7ac54ebc09d91040537fd8443 Mon Sep 17 00:00:00 2001 From: Davy Landman Date: Mon, 6 Jan 2025 14:28:46 +0100 Subject: [PATCH 143/191] [maven-release-plugin] prepare for next development iteration --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 8250bfe5d2f..54cf2eb09bc 100644 --- a/pom.xml +++ b/pom.xml @@ -3,12 +3,12 @@ org.rascalmpl rascal - 0.41.0-RC4 + 0.41.0-RC5-SNAPSHOT jar scm:git:ssh://git@github.com/usethesource/rascal.git - v0.41.0-RC4 + v0.41.0-RC1 From 1e5f93bee3675061d97c3fe801edd0fb3b247812 Mon Sep 17 00:00:00 2001 From: Davy Landman Date: Mon, 6 Jan 2025 14:31:20 +0100 Subject: [PATCH 144/191] Fixed sed escape syntax [skip ci] --- .github/workflows/build.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 6d68fb106b4..edf76f7b407 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -115,7 +115,7 @@ jobs: cache: 'maven' - name: prepare-unshaded - run: sed -i 's/rascal/rascal-unshaded/' pom.xml + run: sed -i 's#rascal#rascal-unshaded#' pom.xml - name: build run: mvn clean package -B -Drascal.compile.skip -Drascal.tutor.skip -DskipTests -Punshaded From 3e38c61593940c1c122e50cab9ffa15809fef083 Mon Sep 17 00:00:00 2001 From: Davy Landman Date: Mon, 6 Jan 2025 14:32:27 +0100 Subject: [PATCH 145/191] [maven-release-plugin] prepare release v0.41.0-RC5 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 54cf2eb09bc..5fb779fb3eb 100644 --- a/pom.xml +++ b/pom.xml @@ -3,12 +3,12 @@ org.rascalmpl rascal - 0.41.0-RC5-SNAPSHOT + 0.41.0-RC5 jar scm:git:ssh://git@github.com/usethesource/rascal.git - v0.41.0-RC1 + v0.41.0-RC5 From 9bd4b4a4171a7b3dfff7e9acfb9b1496a9a04bd6 Mon Sep 17 00:00:00 2001 From: Davy Landman Date: Mon, 6 Jan 2025 14:32:31 +0100 Subject: [PATCH 146/191] [maven-release-plugin] prepare for next development iteration --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 5fb779fb3eb..0e50e483d7b 100644 --- a/pom.xml +++ b/pom.xml @@ -3,12 +3,12 @@ org.rascalmpl rascal - 0.41.0-RC5 + 0.41.0-RC6-SNAPSHOT jar scm:git:ssh://git@github.com/usethesource/rascal.git - v0.41.0-RC5 + v0.41.0-RC1 From 0abfd907665647ee4249a1534ffba9430ed3ca8e Mon Sep 17 00:00:00 2001 From: Davy Landman Date: Mon, 6 Jan 2025 15:15:42 +0100 Subject: [PATCH 147/191] Tried to avoid publishing tpls and tutor files just for the unshaded jar [skip ci] --- .github/workflows/build.yaml | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index edf76f7b407..6b8e3de0ce1 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -131,11 +131,7 @@ jobs: ssh-known-host: ${{ secrets.RELEASE_SSH_KNOWN_HOSTS }} ssh-username: ${{ secrets.RELEASE_SSH_USERNAME }} ssh-private-key: ${{ secrets.RELEASE_SSH_PRIVATE_KEY }} - maven-options: | - -Punshaded - -Drascal.compile.skip - -Drascal.tutor.skip - -DskipTests + maven-options: -Punshaded -Drascal.compile.skip -Drascal.tutor.skip -DskipTests From b4cd2c083a8267d56f11b31403f3d4215bb00a35 Mon Sep 17 00:00:00 2001 From: Davy Landman Date: Mon, 6 Jan 2025 15:18:49 +0100 Subject: [PATCH 148/191] [maven-release-plugin] prepare release v0.41.0-RC6 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 0e50e483d7b..096af33d13e 100644 --- a/pom.xml +++ b/pom.xml @@ -3,12 +3,12 @@ org.rascalmpl rascal - 0.41.0-RC6-SNAPSHOT + 0.41.0-RC6 jar scm:git:ssh://git@github.com/usethesource/rascal.git - v0.41.0-RC1 + v0.41.0-RC6 From e2fb2bd080e6c741c93e3a7307fc46d0159a15df Mon Sep 17 00:00:00 2001 From: Davy Landman Date: Mon, 6 Jan 2025 15:18:53 +0100 Subject: [PATCH 149/191] [maven-release-plugin] prepare for next development iteration --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 096af33d13e..8d0ac1d6a15 100644 --- a/pom.xml +++ b/pom.xml @@ -3,12 +3,12 @@ org.rascalmpl rascal - 0.41.0-RC6 + 0.41.0-RC7-SNAPSHOT jar scm:git:ssh://git@github.com/usethesource/rascal.git - v0.41.0-RC6 + v0.41.0-RC1 From 83652d38d8b2861a4de90104b748a94f2f1d5aaa Mon Sep 17 00:00:00 2001 From: Davy Landman Date: Mon, 6 Jan 2025 16:03:34 +0100 Subject: [PATCH 150/191] Merged unshaded build into regular build so we get tpl files in there [skip ci] --- .github/workflows/build.yaml | 30 +++++++++++++----------------- 1 file changed, 13 insertions(+), 17 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 6b8e3de0ce1..9bfb3c6889c 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -93,6 +93,18 @@ jobs: tests (buildjet-4vcpu-ubuntu-2204-arm) ttl: 15 + - name: Deploy + if: startsWith(github.ref, 'refs/tags/v') + uses: usethesource/releases-maven-action@v1 + with: + maven-username: ${{ secrets.RELEASE_MAVEN_USERNAME }} + maven-password: ${{ secrets.RELEASE_MAVEN_PASSWORD }} + maven-local-port: ${{ secrets.RELEASE_MAVEN_LOCAL_PORT }} + ssh-hostname: ${{ secrets.RELEASE_SSH_SERVER }} + ssh-known-host: ${{ secrets.RELEASE_SSH_KNOWN_HOSTS }} + ssh-username: ${{ secrets.RELEASE_SSH_USERNAME }} + ssh-private-key: ${{ secrets.RELEASE_SSH_PRIVATE_KEY }} + - name: Prepare Draft Release uses: softprops/action-gh-release@v2 if: startsWith(github.ref, 'refs/tags/') @@ -102,24 +114,10 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - deploy-unshaded: - if: ${{ startsWith(github.ref, 'refs/tags/') && !(github.ref == 'refs/heads/main' && contains(github.event.head_commit.message, '[maven-release-plugin]')) }} - needs: [builds] - runs-on: buildjet-4vcpu-ubuntu-2204 - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-java@v4 - with: - java-version: 11 - distribution: 'temurin' - cache: 'maven' - - name: prepare-unshaded + if: startsWith(github.ref, 'refs/tags/') run: sed -i 's#rascal#rascal-unshaded#' pom.xml - - name: build - run: mvn clean package -B -Drascal.compile.skip -Drascal.tutor.skip -DskipTests -Punshaded - - name: Deploy unshaded jar if: startsWith(github.ref, 'refs/tags/v') uses: usethesource/releases-maven-action@v1 @@ -133,8 +131,6 @@ jobs: ssh-private-key: ${{ secrets.RELEASE_SSH_PRIVATE_KEY }} maven-options: -Punshaded -Drascal.compile.skip -Drascal.tutor.skip -DskipTests - - tests: if: ${{ !(github.ref == 'refs/heads/main' && contains(github.event.head_commit.message, '[maven-release-plugin]')) }} needs: [test-linux] From 0ab08b1c63284e925881466bb3114800bad0dbd1 Mon Sep 17 00:00:00 2001 From: Davy Landman Date: Mon, 6 Jan 2025 16:05:20 +0100 Subject: [PATCH 151/191] [maven-release-plugin] prepare release v0.41.0-RC7 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 8d0ac1d6a15..dcca99be315 100644 --- a/pom.xml +++ b/pom.xml @@ -3,12 +3,12 @@ org.rascalmpl rascal - 0.41.0-RC7-SNAPSHOT + 0.41.0-RC7 jar scm:git:ssh://git@github.com/usethesource/rascal.git - v0.41.0-RC1 + v0.41.0-RC7 From fc8b581ffbd64bcdaa49019fab845b39f9570dba Mon Sep 17 00:00:00 2001 From: Davy Landman Date: Mon, 6 Jan 2025 16:05:24 +0100 Subject: [PATCH 152/191] [maven-release-plugin] prepare for next development iteration --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index dcca99be315..29907215b58 100644 --- a/pom.xml +++ b/pom.xml @@ -3,12 +3,12 @@ org.rascalmpl rascal - 0.41.0-RC7 + 0.41.0-RC8-SNAPSHOT jar scm:git:ssh://git@github.com/usethesource/rascal.git - v0.41.0-RC7 + v0.41.0-RC1 From 61d4ff8392f6df7061e050144ec5ade42324cdc1 Mon Sep 17 00:00:00 2001 From: Davy Landman Date: Tue, 7 Jan 2025 09:34:44 +0100 Subject: [PATCH 153/191] We have to overwrite println as it doesn't use the regular write functions --- src/org/rascalmpl/repl/TerminalProgressBarMonitor.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/org/rascalmpl/repl/TerminalProgressBarMonitor.java b/src/org/rascalmpl/repl/TerminalProgressBarMonitor.java index 5f0912e69d9..9993dbcca13 100644 --- a/src/org/rascalmpl/repl/TerminalProgressBarMonitor.java +++ b/src/org/rascalmpl/repl/TerminalProgressBarMonitor.java @@ -626,6 +626,16 @@ public synchronized void write(int c) { } } + @Override + public synchronized void println() { + if (!bars.isEmpty()) { + write(System.lineSeparator()); + } + else { + super.println(); + } + } + @Override From 7e2d844aba8d2800bb49d4e89b7de4191ca8ca94 Mon Sep 17 00:00:00 2001 From: Davy Landman Date: Tue, 7 Jan 2025 09:42:06 +0100 Subject: [PATCH 154/191] Avoid deadlock by sharing the lock of the writer --- .../repl/TerminalProgressBarMonitor.java | 58 +++++++++++-------- 1 file changed, 33 insertions(+), 25 deletions(-) diff --git a/src/org/rascalmpl/repl/TerminalProgressBarMonitor.java b/src/org/rascalmpl/repl/TerminalProgressBarMonitor.java index 9993dbcca13..4bcfa86e333 100644 --- a/src/org/rascalmpl/repl/TerminalProgressBarMonitor.java +++ b/src/org/rascalmpl/repl/TerminalProgressBarMonitor.java @@ -587,11 +587,13 @@ public synchronized void warning(String message, ISourceLocation src) { */ @Override public void write(String s, int off, int len) { - if (!bars.isEmpty()) { - findUnfinishedLine().write(s, off, len); - } - else { - directWrite(s, off, len); + synchronized(lock) { + if (!bars.isEmpty()) { + findUnfinishedLine().write(s, off, len); + } + else { + directWrite(s, off, len); + } } } /** @@ -600,14 +602,16 @@ public void write(String s, int off, int len) { * is ready, we simply add our own progress bars again. */ @Override - public synchronized void write(char[] buf, int off, int len) { - if (!bars.isEmpty()) { - findUnfinishedLine().write(buf, off, len); - } - else { - // this must be the raw output stream - // otherwise rascal prompts (which do not end in newlines) will be buffered - directWrite(buf, off, len); + public void write(char[] buf, int off, int len) { + synchronized(lock) { + if (!bars.isEmpty()) { + findUnfinishedLine().write(buf, off, len); + } + else { + // this must be the raw output stream + // otherwise rascal prompts (which do not end in newlines) will be buffered + directWrite(buf, off, len); + } } } @@ -617,22 +621,26 @@ public synchronized void write(char[] buf, int off, int len) { * is ready, we simply add our own progress bars again. */ @Override - public synchronized void write(int c) { - if (!bars.isEmpty()) { - findUnfinishedLine().write(new char[] { (char) c }, 0, 1); - } - else { - directWrite(c); + public void write(int c) { + synchronized(lock) { + if (!bars.isEmpty()) { + findUnfinishedLine().write(new char[] { (char) c }, 0, 1); + } + else { + directWrite(c); + } } } @Override - public synchronized void println() { - if (!bars.isEmpty()) { - write(System.lineSeparator()); - } - else { - super.println(); + public void println() { + synchronized(lock) { + if (!bars.isEmpty()) { + write(System.lineSeparator()); + } + else { + super.println(); + } } } From feabd72c285ad428696580bbeba523d79da1ab48 Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Tue, 7 Jan 2025 11:43:30 +0100 Subject: [PATCH 155/191] fixed issues with ordering of null candidates --- pom.xml | 2 +- .../lang/json/internal/JsonValueReader.java | 45 +++++++++++-------- .../tests/library/lang/json/JSONIOTests.rsc | 14 +++++- 3 files changed, 40 insertions(+), 21 deletions(-) diff --git a/pom.xml b/pom.xml index 1ea39c9010c..01f7d02326b 100644 --- a/pom.xml +++ b/pom.xml @@ -434,7 +434,7 @@ io.usethesource vallang - 1.0.0-RC14 + 1.0.0-RC15 org.ow2.asm diff --git a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java index 152ae7f240d..d2b8c877611 100644 --- a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java +++ b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java @@ -26,6 +26,8 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Map.Entry; +import java.util.stream.Collectors; import java.util.Set; import org.rascalmpl.debug.IRascalMonitor; import org.rascalmpl.exceptions.RuntimeExceptionFactory; @@ -132,9 +134,10 @@ public IValue visitReal(Type type) throws IOException { } private IValue inferNullValue(Map nulls, Type expected) { - return nulls.keySet().stream() - .sorted((x,y) -> x.compareTo(y)) // smaller types are matched first - .filter(superType -> expected.isSubtypeOf(superType)) // remove any type that does not fit + return nulls.entrySet().stream() + .map(Entry::getKey) + .sorted(Type::compareTo) + .filter(superType -> expected.isSubtypeOf(superType)) .findFirst() // give the most specific match .map(t -> nulls.get(t)) // lookup the corresponding null value .filter(r -> r.getType().isSubtypeOf(expected)) // the value in the table still has to fit the currently expected type @@ -168,12 +171,12 @@ public IValue visitTuple(Type type) throws IOException { if (type.hasFieldNames()) { for (int i = 0; i < type.getArity(); i++) { - l.add(read(in, type.getFieldType(i))); + l.add(type.getFieldType(i).accept(this)); } } else { for (int i = 0; i < type.getArity(); i++) { - l.add(read(in, type.getFieldType(i))); + l.add(type.getFieldType(i).accept(this)); } } @@ -349,8 +352,8 @@ public IValue visitRational(Type type) throws IOException { switch (in.peek()) { case BEGIN_ARRAY: in.beginArray(); - IInteger numA = (IInteger) read(in, TF.integerType()); - IInteger denomA = (IInteger) read(in, TF.integerType()); + IInteger numA = (IInteger) TF.integerType().accept(this); + IInteger denomA = (IInteger) TF.integerType().accept(this); in.endArray(); return vf.rational(numA, denomA); case STRING: @@ -375,7 +378,7 @@ public IValue visitMap(Type type) throws IOException { } while (in.hasNext()) { - IValue value = read(in, type.getValueType()); + IValue value = type.getValueType().accept(this); if (value != null) { w.put(vf.string(nextName()), value); } @@ -386,8 +389,8 @@ public IValue visitMap(Type type) throws IOException { in.beginArray(); while (in.hasNext()) { in.beginArray(); - IValue key = read(in, type.getKeyType()); - IValue value = read(in, type.getValueType()); + IValue key = type.getKeyType().accept(this); + IValue value = type.getValueType().accept(this); if (key != null && value != null) { w.put(key,value); } @@ -614,7 +617,7 @@ else if (alternatives.size() == 0) { while (in.hasNext()) { String label = in.nextName(); if (cons.hasField(label)) { - IValue val = read(in, cons.getFieldType(label)); + IValue val = cons.getFieldType(label).accept(this); if (val != null) { args[cons.getFieldIndex(label)] = val; } @@ -624,7 +627,7 @@ else if (alternatives.size() == 0) { } else if (cons.hasKeywordField(label, store)) { if (!isNull()) { // lookahead for null to give default parameters the preference. - IValue val = read(in, store.getKeywordParameterType(cons, label)); + IValue val = store.getKeywordParameterType(cons, label).accept(this); // null can still happen if the nulls map doesn't have a default if (val != null) { // if the value is null we'd use the default value of the defined field in the constructor @@ -701,7 +704,7 @@ public IValue visitAbstractData(Type type) throws IOException { @Override public IValue visitConstructor(Type type) throws IOException { - return read(in, type.getAbstractDataType()); + return type.getAbstractDataType().accept(this); } @Override @@ -724,14 +727,14 @@ public IValue visitNode(Type type) throws IOException { String kwName = nextName(); if (kwName.equals("_name")) { - name = ((IString) read(in, TF.stringType())).getValue(); + name = ((IString) TF.stringType().accept(this)).getValue(); continue; } boolean positioned = kwName.startsWith("arg"); if (!isNull()) { // lookahead for null to give default parameters the preference. - IValue val = read(in, TF.valueType()); + IValue val = TF.valueType().accept(this); if (val != null) { // if the value is null we'd use the default value of the defined field in the constructor @@ -816,7 +819,10 @@ public IValue visitList(Type type) throws IOException { in.beginArray(); while (in.hasNext()) { // here we pass label from the higher context - IValue elem = read(in, type.getElementType()); + IValue elem = isNull() + ? inferNullValue(nulls, type.getElementType()) + : type.getElementType().accept(this); + if (elem != null) { w.append(elem); } @@ -835,7 +841,10 @@ public IValue visitSet(Type type) throws IOException { in.beginArray(); while (in.hasNext()) { // here we pass label from the higher context - IValue elem = read(in, type.getElementType()); + IValue elem = isNull() + ? inferNullValue(nulls, type.getElementType()) + : type.getElementType().accept(this); + if (elem != null) { w.insert(elem); } @@ -994,7 +1003,7 @@ public IValue read(JsonReader in, Type expected) throws IOException { try { var result = expected.accept(dispatch); if (result == null) { - throw new JsonParseException("The top-level value is a 'null' without a known value representation."); + throw new JsonParseException("null occurred outside an optionality context and without a registered representation."); } return result; } diff --git a/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc b/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc index bbefdf47c6c..474c9c90447 100644 --- a/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc +++ b/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc @@ -209,11 +209,21 @@ test bool dealWithNull() { assert parseJSON(#map[str,Maybe[str]], "{\"bla\": \"foo\"}") == ("bla":just("foo")); // test different specific nulls for different expected types: - for (t <- [#Maybe[value], #node, #int, #real, #rat, #value, #str, - #list[value], #set[value], #map[value,value], #loc, #bool]) { + for (t <- defaultJSONNULLValues<0>) { assert parseJSON(t, "null") == (defaultJSONNULLValues[t]?"default-not-found"); } + assert parseJSON(#list[int], "[1,null,2]", nulls=()) == [1, 2]; + assert parseJSON(#list[int], "[1,null,2]") == [1, defaultJSONNULLValues[#int], 2]; + assert parseJSON(#set[int], "[1,null,2]", nulls=()) == {1, 2}; + assert parseJSON(#set[int], "[1,null,2]") == {1, defaultJSONNULLValues[#int], 2}; + + try { + assert parseJSON(#tuple[int,int], "[null,null]") == []; + } + catch ParseError(_): + assert true; + // test undefined top-level null try { parseJSON(#int, "null", nulls=()); From 92e449e66376eacdb3ba584d1815560b17d30a49 Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Tue, 7 Jan 2025 11:54:07 +0100 Subject: [PATCH 156/191] added missing code for null nums --- .../lang/json/internal/JsonValueReader.java | 15 ++++++++++----- .../tests/library/lang/json/JSONIOTests.rsc | 3 ++- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java index d2b8c877611..84449c68a0a 100644 --- a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java +++ b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java @@ -378,9 +378,10 @@ public IValue visitMap(Type type) throws IOException { } while (in.hasNext()) { + IString label = vf.string(nextName()); IValue value = type.getValueType().accept(this); if (value != null) { - w.put(vf.string(nextName()), value); + w.put(label, value); } } in.endObject(); @@ -550,7 +551,7 @@ private IValue visitObjectAsAbstractData(Type type) throws IOException { if (explicitConstructorNames || explicitDataTypes) { String consName = null; String typeName = null; // this one is optional, and the order with cons is not defined. - String consLabel = in.nextName(); + String consLabel = nextName(); // first we read either a cons name or a type name if (explicitConstructorNames && "_constructor".equals(consLabel)) { @@ -563,14 +564,14 @@ else if (explicitDataTypes && "_type".equals(consLabel)) { // optionally read the second field if (explicitDataTypes && typeName == null) { // we've read a constructor name, but we still need a type name - consLabel = in.nextName(); + consLabel = nextName(); if (explicitDataTypes && "_type".equals(consLabel)) { typeName = in.nextString(); } } else if (explicitDataTypes && consName == null) { // we've read type name, but we still need a constructor name - consLabel = in.nextName(); + consLabel = nextName(); if (explicitDataTypes && "_constructor".equals(consLabel)) { consName = in.nextString(); } @@ -615,7 +616,7 @@ else if (alternatives.size() == 0) { } while (in.hasNext()) { - String label = in.nextName(); + String label = nextName(); if (cons.hasField(label)) { IValue val = cons.getFieldType(label).accept(this); if (val != null) { @@ -769,6 +770,10 @@ public IValue visitNode(Type type) throws IOException { @Override public IValue visitNumber(Type type) throws IOException { + if (isNull()) { + return inferNullValue(nulls, type); + } + if (in.peek() == JsonToken.BEGIN_ARRAY) { return visitRational(type); } diff --git a/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc b/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc index 474c9c90447..59c90711a74 100644 --- a/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc +++ b/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc @@ -210,6 +210,7 @@ test bool dealWithNull() { // test different specific nulls for different expected types: for (t <- defaultJSONNULLValues<0>) { + println(t); assert parseJSON(t, "null") == (defaultJSONNULLValues[t]?"default-not-found"); } @@ -219,7 +220,7 @@ test bool dealWithNull() { assert parseJSON(#set[int], "[1,null,2]") == {1, defaultJSONNULLValues[#int], 2}; try { - assert parseJSON(#tuple[int,int], "[null,null]") == []; + assert parseJSON(#tuple[int,int], "[null,null]", nulls=()) == []; } catch ParseError(_): assert true; From 7dbb8bed261477635ee2a13d7cea6dcc897c65db Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Tue, 7 Jan 2025 12:00:34 +0100 Subject: [PATCH 157/191] fixed tuples with nulls --- .../lang/json/internal/JsonValueReader.java | 18 ++++++++++++------ .../tests/library/lang/json/JSONIOTests.rsc | 1 - 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java index 84449c68a0a..9d3659a1224 100644 --- a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java +++ b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java @@ -160,11 +160,11 @@ public IValue visitString(Type type) throws IOException { return vf.string(nextString()); } - @Override - public IValue visitTuple(Type type) throws IOException { - if (isNull()) { - return null; - } + @Override + public IValue visitTuple(Type type) throws IOException { + if (isNull()) { + return null; + } List l = new ArrayList<>(); in.beginArray(); @@ -183,7 +183,13 @@ public IValue visitTuple(Type type) throws IOException { in.endArray(); // filter all the null values - l.removeIf(p -> p == null); + l.forEach(e -> { + if (e == null) { + throw parseErrorHere("Tuples can not have null elements."); + } + }); + + assert type.getArity() == l.size(); return vf.tuple(l.toArray(new IValue[l.size()])); } diff --git a/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc b/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc index 59c90711a74..73720a8f349 100644 --- a/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc +++ b/src/org/rascalmpl/library/lang/rascal/tests/library/lang/json/JSONIOTests.rsc @@ -210,7 +210,6 @@ test bool dealWithNull() { // test different specific nulls for different expected types: for (t <- defaultJSONNULLValues<0>) { - println(t); assert parseJSON(t, "null") == (defaultJSONNULLValues[t]?"default-not-found"); } From 2c79bb9123a9ad0cc813f1d2b1f40139ed3f7554 Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Wed, 8 Jan 2025 09:19:34 +0100 Subject: [PATCH 158/191] fixed new NPW in JSON writer, breaking the vis::Chart and vis::Graph modules --- .../lang/json/internal/JsonValueWriter.java | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/src/org/rascalmpl/library/lang/json/internal/JsonValueWriter.java b/src/org/rascalmpl/library/lang/json/internal/JsonValueWriter.java index 26c7d28ad09..af3d614e150 100644 --- a/src/org/rascalmpl/library/lang/json/internal/JsonValueWriter.java +++ b/src/org/rascalmpl/library/lang/json/internal/JsonValueWriter.java @@ -42,6 +42,7 @@ import io.usethesource.vallang.ITuple; import io.usethesource.vallang.IValue; import io.usethesource.vallang.visitors.IValueVisitor; +import jline.internal.Nullable; /** * This class streams am IValue stream directly to an JSon stream. Useful to communicate IValues to browsers. @@ -96,14 +97,17 @@ public JsonValueWriter() { /** * Builder method to set the format to use for all date-time values encoded as strings */ - public JsonValueWriter setCalendarFormat(String format) { - // SimpleDateFormat is not thread safe, so here we make sure - // we can use objects of this reader in different threads at the same time - this.format = new ThreadLocal() { - protected SimpleDateFormat initialValue() { - return new SimpleDateFormat(format); - } - }; + public JsonValueWriter setCalendarFormat(@Nullable String format) { + if (format != null) { + // SimpleDateFormat is not thread safe, so here we make sure + // we can use objects of this reader in different threads at the same time + this.format = new ThreadLocal() { + protected SimpleDateFormat initialValue() { + return new SimpleDateFormat(format); + } + }; + } + return this; } @@ -122,8 +126,8 @@ public JsonValueWriter setDropOrigins(boolean setting) { return this; } - public JsonValueWriter setFormatters(IFunction formatters) { - if (formatters.getType().getFieldType(0).isTop()) { + public JsonValueWriter setFormatters(@Nullable IFunction formatters) { + if (formatters != null && formatters.getType().getFieldType(0).isTop()) { // ignore default function formatters = null; } From 31b1031ade5d84f9c60e30d17da3b55e78d291fb Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Wed, 8 Jan 2025 09:23:19 +0100 Subject: [PATCH 159/191] fixed indentation of the JSON IO Java library classes: 2 spaces to 4 spaces --- src/org/rascalmpl/library/lang/json/IO.java | 222 +- .../lang/json/internal/JsonValueReader.java | 1781 +++++++++-------- .../lang/json/internal/JsonValueWriter.java | 774 +++---- 3 files changed, 1398 insertions(+), 1379 deletions(-) diff --git a/src/org/rascalmpl/library/lang/json/IO.java b/src/org/rascalmpl/library/lang/json/IO.java index c96dd763cb0..696dbfb6033 100644 --- a/src/org/rascalmpl/library/lang/json/IO.java +++ b/src/org/rascalmpl/library/lang/json/IO.java @@ -1,16 +1,12 @@ /******************************************************************************* - * Copyright (c) 2009-2013 CWI - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html + * Copyright (c) 2009-2013 CWI All rights reserved. This program and the accompanying materials are + * made available under the terms of the Eclipse Public License v1.0 which accompanies this + * distribution, and is available at http://www.eclipse.org/legal/epl-v10.html * * Contributors: - - * * Jurgen J. Vinju - Jurgen.Vinju@cwi.nl - CWI - * * Mark Hills - Mark.Hills@cwi.nl (CWI) - * * Arnold Lankamp - Arnold.Lankamp@cwi.nl - * * Bert Lisser - Bert.Lisser@cwi.nl + * + * * Jurgen J. Vinju - Jurgen.Vinju@cwi.nl - CWI * Mark Hills - Mark.Hills@cwi.nl (CWI) * Arnold + * Lankamp - Arnold.Lankamp@cwi.nl * Bert Lisser - Bert.Lisser@cwi.nl *******************************************************************************/ package org.rascalmpl.library.lang.json; @@ -47,111 +43,105 @@ import com.google.gson.stream.JsonWriter; public class IO { - private final IRascalValueFactory values; - private final IRascalMonitor monitor; - - public IO(IRascalValueFactory values, IRascalMonitor monitor) { - super(); - this.values = values; - this.monitor = monitor; - } - - public IValue readJSON(IValue type, ISourceLocation loc, IString dateTimeFormat, IBool lenient, IBool trackOrigins, IFunction parsers, IMap nulls, IBool explicitConstructorNames, IBool explicitDataTypes) { - TypeStore store = new TypeStore(); - Type start = new TypeReifier(values).valueToType((IConstructor) type, store); - - if (parsers.getType() instanceof ReifiedType && parsers.getType().getTypeParameters().getFieldType(0).isTop()) { - // ignore the default parser - parsers = null; - } - - try (JsonReader in = new JsonReader(URIResolverRegistry.getInstance().getCharacterReader(loc))) { - in.setLenient(lenient.getValue()); - return new JsonValueReader(values, store, monitor, trackOrigins.getValue() ? loc : null) - .setCalendarFormat(dateTimeFormat.getValue()) - .setParsers(parsers) - .setNulls(unreify(nulls)) - .setExplicitConstructorNames(explicitConstructorNames.getValue()) - .setExplicitDataTypes(explicitDataTypes.getValue()) - .read(in, start); - } - catch (IOException e) { - throw RuntimeExceptionFactory.io(values.string(e.getMessage()), null, null); - } - catch (NullPointerException e) { - throw RuntimeExceptionFactory.io(values.string("NPE in error handling code"), null, null); - } + private final IRascalValueFactory values; + private final IRascalMonitor monitor; + + public IO(IRascalValueFactory values, IRascalMonitor monitor) { + super(); + this.values = values; + this.monitor = monitor; + } + + public IValue readJSON(IValue type, ISourceLocation loc, IString dateTimeFormat, IBool lenient, IBool trackOrigins, + IFunction parsers, IMap nulls, IBool explicitConstructorNames, IBool explicitDataTypes) { + TypeStore store = new TypeStore(); + Type start = new TypeReifier(values).valueToType((IConstructor) type, store); + + if (parsers.getType() instanceof ReifiedType && parsers.getType().getTypeParameters().getFieldType(0).isTop()) { + // ignore the default parser + parsers = null; + } + + try (JsonReader in = new JsonReader(URIResolverRegistry.getInstance().getCharacterReader(loc))) { + in.setLenient(lenient.getValue()); + return new JsonValueReader(values, store, monitor, trackOrigins.getValue() ? loc : null) + .setCalendarFormat(dateTimeFormat.getValue()).setParsers(parsers).setNulls(unreify(nulls)) + .setExplicitConstructorNames(explicitConstructorNames.getValue()) + .setExplicitDataTypes(explicitDataTypes.getValue()).read(in, start); + } + catch (IOException e) { + throw RuntimeExceptionFactory.io(values.string(e.getMessage()), null, null); + } + catch (NullPointerException e) { + throw RuntimeExceptionFactory.io(values.string("NPE in error handling code"), null, null); + } + } + + private Map unreify(IMap nulls) { + var tr = new TypeReifier(values); + return nulls.stream().map(t -> (ITuple) t) + .collect(Collectors.toMap(t -> tr.valueToType((IConstructor) t.get(0)), t -> t.get(1))); + } + + public IValue parseJSON(IValue type, IString src, IString dateTimeFormat, IBool lenient, IBool trackOrigins, + IFunction parsers, IMap nulls, IBool explicitConstructorNames, IBool explicitDataTypes) { + TypeStore store = new TypeStore(); + Type start = new TypeReifier(values).valueToType((IConstructor) type, store); + + try (JsonReader in = new JsonReader(new StringReader(src.getValue()))) { + in.setLenient(lenient.getValue()); + return new JsonValueReader(values, store, monitor, + trackOrigins.getValue() ? URIUtil.rootLocation("unknown") : null) + .setCalendarFormat(dateTimeFormat.getValue()).setParsers(parsers).setNulls(unreify(nulls)) + .setExplicitConstructorNames(explicitConstructorNames.getValue()) + .setExplicitDataTypes(explicitDataTypes.getValue()).read(in, start); + } + catch (IOException e) { + throw RuntimeExceptionFactory.io(values.string(e.getMessage())); + } + catch (NullPointerException e) { + throw RuntimeExceptionFactory.io(values.string("NPE")); + } + } + + public void writeJSON(ISourceLocation loc, IValue value, IBool unpackedLocations, IString dateTimeFormat, + IBool dateTimeAsInt, IInteger indent, IBool dropOrigins, IFunction formatter, IBool explicitConstructorNames, + IBool explicitDataTypes) { + try (JsonWriter out = + new JsonWriter(new OutputStreamWriter(URIResolverRegistry.getInstance().getOutputStream(loc, false), + Charset.forName("UTF8")))) { + if (indent.intValue() > 0) { + out.setIndent(" ".substring(0, indent.intValue() % 9)); + } + + new JsonValueWriter().setCalendarFormat(dateTimeFormat.getValue()).setDatesAsInt(dateTimeAsInt.getValue()) + .setUnpackedLocations(unpackedLocations.getValue()).setDropOrigins(dropOrigins.getValue()) + .setFormatters(formatter).setExplicitConstructorNames(explicitConstructorNames.getValue()) + .setExplicitDataTypes(explicitDataTypes.getValue()).write(out, value); + } + catch (IOException e) { + throw RuntimeExceptionFactory.io(values.string(e.getMessage()), null, null); + } + } + + public IString asJSON(IValue value, IBool unpackedLocations, IString dateTimeFormat, IBool dateTimeAsInt, + IInteger indent, IBool dropOrigins, IFunction formatter, IBool explicitConstructorNames, + IBool explicitDataTypes) { + StringWriter string = new StringWriter(); + + try (JsonWriter out = new JsonWriter(string)) { + if (indent.intValue() > 0) { + out.setIndent(" ".substring(0, indent.intValue() % 9)); + } + new JsonValueWriter().setCalendarFormat(dateTimeFormat.getValue()).setDatesAsInt(dateTimeAsInt.getValue()) + .setUnpackedLocations(unpackedLocations.getValue()).setDropOrigins(dropOrigins.getValue()) + .setFormatters(formatter).setExplicitConstructorNames(explicitConstructorNames.getValue()) + .setExplicitDataTypes(explicitDataTypes.getValue()).write(out, value); + + return values.string(string.toString()); + } + catch (IOException e) { + throw RuntimeExceptionFactory.io(values.string(e.getMessage()), null, null); + } } - - private Map unreify(IMap nulls) { - var tr = new TypeReifier(values); - return nulls.stream() - .map(t -> (ITuple) t) - .collect(Collectors.toMap(t -> tr.valueToType((IConstructor) t.get(0)), t -> t.get(1))); - } - - public IValue parseJSON(IValue type, IString src, IString dateTimeFormat, IBool lenient, IBool trackOrigins, IFunction parsers, IMap nulls, IBool explicitConstructorNames, IBool explicitDataTypes) { - TypeStore store = new TypeStore(); - Type start = new TypeReifier(values).valueToType((IConstructor) type, store); - - try (JsonReader in = new JsonReader(new StringReader(src.getValue()))) { - in.setLenient(lenient.getValue()); - return new JsonValueReader(values, store, monitor, trackOrigins.getValue() ? URIUtil.rootLocation("unknown") : null) - .setCalendarFormat(dateTimeFormat.getValue()) - .setParsers(parsers) - .setNulls(unreify(nulls)) - .setExplicitConstructorNames(explicitConstructorNames.getValue()) - .setExplicitDataTypes(explicitDataTypes.getValue()) - .read(in, start); - } - catch (IOException e) { - throw RuntimeExceptionFactory.io(values.string(e.getMessage())); - } - catch (NullPointerException e) { - throw RuntimeExceptionFactory.io(values.string("NPE")); - } - } - - public void writeJSON(ISourceLocation loc, IValue value, IBool unpackedLocations, IString dateTimeFormat, IBool dateTimeAsInt, IInteger indent, IBool dropOrigins, IFunction formatter, IBool explicitConstructorNames, IBool explicitDataTypes) { - try (JsonWriter out = new JsonWriter(new OutputStreamWriter(URIResolverRegistry.getInstance().getOutputStream(loc, false), Charset.forName("UTF8")))) { - if (indent.intValue() > 0) { - out.setIndent(" ".substring(0, indent.intValue() % 9)); - } - - new JsonValueWriter() - .setCalendarFormat(dateTimeFormat.getValue()) - .setDatesAsInt(dateTimeAsInt.getValue()) - .setUnpackedLocations(unpackedLocations.getValue()) - .setDropOrigins(dropOrigins.getValue()) - .setFormatters(formatter) - .setExplicitConstructorNames(explicitConstructorNames.getValue()) - .setExplicitDataTypes(explicitDataTypes.getValue()) - .write(out, value); - } catch (IOException e) { - throw RuntimeExceptionFactory.io(values.string(e.getMessage()), null, null); - } - } - - public IString asJSON(IValue value, IBool unpackedLocations, IString dateTimeFormat, IBool dateTimeAsInt, IInteger indent, IBool dropOrigins, IFunction formatter, IBool explicitConstructorNames, IBool explicitDataTypes) { - StringWriter string = new StringWriter(); - - try (JsonWriter out = new JsonWriter(string)) { - if (indent.intValue() > 0) { - out.setIndent(" ".substring(0, indent.intValue() % 9)); - } - new JsonValueWriter() - .setCalendarFormat(dateTimeFormat.getValue()) - .setDatesAsInt(dateTimeAsInt.getValue()) - .setUnpackedLocations(unpackedLocations.getValue()) - .setDropOrigins(dropOrigins.getValue()) - .setFormatters(formatter) - .setExplicitConstructorNames(explicitConstructorNames.getValue()) - .setExplicitDataTypes(explicitDataTypes.getValue()) - .write(out, value); - - return values.string(string.toString()); - } catch (IOException e) { - throw RuntimeExceptionFactory.io(values.string(e.getMessage()), null, null); - } - } } diff --git a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java index 9d3659a1224..fbd0a0cd7b5 100644 --- a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java +++ b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java @@ -1,15 +1,25 @@ -/** - * Copyright (c) 2016, Jurgen J. Vinju, Centrum Wiskunde & Informatica (CWI) - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ +/** + * Copyright (c) 2016, Jurgen J. Vinju, Centrum Wiskunde & Informatica (CWI) All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are permitted + * provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions + * and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other materials provided with + * the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY + * WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ package org.rascalmpl.library.lang.json.internal; import java.io.EOFException; @@ -27,7 +37,6 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; -import java.util.stream.Collectors; import java.util.Set; import org.rascalmpl.debug.IRascalMonitor; import org.rascalmpl.exceptions.RuntimeExceptionFactory; @@ -60,966 +69,972 @@ /** * This class streams a JSON stream directly to an IValue representation and validates the content - * to a given type as declared in a given type store. See the Rascal file lang::json::IO::readJson for documentation. + * to a given type as declared in a given type store. See the Rascal file lang::json::IO::readJson + * for documentation. */ public class JsonValueReader { - private final class ExpectedTypeDispatcher implements ITypeVisitor { - private final JsonReader in; - private int lastPos; - - private ExpectedTypeDispatcher(JsonReader in) { - this.in = in; - } + private final class ExpectedTypeDispatcher implements ITypeVisitor { + private final JsonReader in; + private int lastPos; - /** - * Wrapping in.nextString for better error reporting - */ - private String nextString() throws IOException { - // need to cache the last position before parsing the string, because - // when the string does not have a balancing quote the read accidentally - // rewinds the position to 0. - lastPos=getPos(); - return in.nextString(); - } + private ExpectedTypeDispatcher(JsonReader in) { + this.in = in; + } - /** - * Wrapping in.nextName for better error reporting - */ - private String nextName() throws IOException { - // need to cache the last position before parsing the string, because - // when the string does not have a balancing quote the read accidentally - // rewinds the position to 0. - lastPos=getPos(); - return in.nextName(); - } + /** + * Wrapping in.nextString for better error reporting + */ + private String nextString() throws IOException { + // need to cache the last position before parsing the string, because + // when the string does not have a balancing quote the read accidentally + // rewinds the position to 0. + lastPos = getPos(); + return in.nextString(); + } - @Override - public IValue visitInteger(Type type) throws IOException { - try { - switch (in.peek()) { - case NUMBER: - // fallthrough - case STRING: - return vf.integer(nextString()); - case NULL: - in.nextNull(); - return inferNullValue(nulls, type); - default: - throw parseErrorHere("Expected integer but got " + in.peek()); + /** + * Wrapping in.nextName for better error reporting + */ + private String nextName() throws IOException { + // need to cache the last position before parsing the string, because + // when the string does not have a balancing quote the read accidentally + // rewinds the position to 0. + lastPos = getPos(); + return in.nextName(); } - } - catch (NumberFormatException e) { - throw parseErrorHere("Expected integer but got " + e.getMessage()); - } - } - @Override - public IValue visitReal(Type type) throws IOException { - try { - switch (in.peek()) { - case NUMBER: - // fallthrough - case STRING: - return vf.real(nextString()); - case NULL: - in.nextNull(); - return inferNullValue(nulls, type); - default: - throw parseErrorHere("Expected real but got " + in.peek()); + @Override + public IValue visitInteger(Type type) throws IOException { + try { + switch (in.peek()) { + case NUMBER: + // fallthrough + case STRING: + return vf.integer(nextString()); + case NULL: + in.nextNull(); + return inferNullValue(nulls, type); + default: + throw parseErrorHere("Expected integer but got " + in.peek()); + } + } + catch (NumberFormatException e) { + throw parseErrorHere("Expected integer but got " + e.getMessage()); + } } - } - catch (NumberFormatException e) { - throw parseErrorHere("Expected real but got " + e.getMessage()); - } - } - - private IValue inferNullValue(Map nulls, Type expected) { - return nulls.entrySet().stream() - .map(Entry::getKey) - .sorted(Type::compareTo) - .filter(superType -> expected.isSubtypeOf(superType)) - .findFirst() // give the most specific match - .map(t -> nulls.get(t)) // lookup the corresponding null value - .filter(r -> r.getType().isSubtypeOf(expected)) // the value in the table still has to fit the currently expected type - .orElse(null); // or muddle on and throw NPE elsewhere - - // The NPE triggering "elsewhere" should help with fault localization. - } - @Override - public IValue visitExternal(Type type) throws IOException { - throw parseErrorHere("External type " + type + "is not implemented yet by the json reader:" + in.getPath()); - } + @Override + public IValue visitReal(Type type) throws IOException { + try { + switch (in.peek()) { + case NUMBER: + // fallthrough + case STRING: + return vf.real(nextString()); + case NULL: + in.nextNull(); + return inferNullValue(nulls, type); + default: + throw parseErrorHere("Expected real but got " + in.peek()); + } + } + catch (NumberFormatException e) { + throw parseErrorHere("Expected real but got " + e.getMessage()); + } + } - @Override - public IValue visitString(Type type) throws IOException { - if (isNull()) { - return inferNullValue(nulls, type); - } - - return vf.string(nextString()); - } + private IValue inferNullValue(Map nulls, Type expected) { + return nulls.entrySet().stream().map(Entry::getKey).sorted(Type::compareTo) + .filter(superType -> expected.isSubtypeOf(superType)).findFirst() // give the most specific match + .map(t -> nulls.get(t)) // lookup the corresponding null value + .filter(r -> r.getType().isSubtypeOf(expected)) // the value in the table still has to fit the currently + // expected type + .orElse(null); // or muddle on and throw NPE elsewhere - @Override - public IValue visitTuple(Type type) throws IOException { - if (isNull()) { - return null; - } - - List l = new ArrayList<>(); - in.beginArray(); - - if (type.hasFieldNames()) { - for (int i = 0; i < type.getArity(); i++) { - l.add(type.getFieldType(i).accept(this)); + // The NPE triggering "elsewhere" should help with fault localization. } - } - else { - for (int i = 0; i < type.getArity(); i++) { - l.add(type.getFieldType(i).accept(this)); + + @Override + public IValue visitExternal(Type type) throws IOException { + throw parseErrorHere("External type " + type + "is not implemented yet by the json reader:" + in.getPath()); } - } - in.endArray(); + @Override + public IValue visitString(Type type) throws IOException { + if (isNull()) { + return inferNullValue(nulls, type); + } - // filter all the null values - l.forEach(e -> { - if (e == null) { - throw parseErrorHere("Tuples can not have null elements."); + return vf.string(nextString()); } - }); - assert type.getArity() == l.size(); + @Override + public IValue visitTuple(Type type) throws IOException { + if (isNull()) { + return null; + } - return vf.tuple(l.toArray(new IValue[l.size()])); - } + List l = new ArrayList<>(); + in.beginArray(); - @Override - public IValue visitVoid(Type type) throws IOException { - throw parseErrorHere("Can not read json values of type void: " + in.getPath()); - } + if (type.hasFieldNames()) { + for (int i = 0; i < type.getArity(); i++) { + l.add(type.getFieldType(i).accept(this)); + } + } + else { + for (int i = 0; i < type.getArity(); i++) { + l.add(type.getFieldType(i).accept(this)); + } + } - @Override - public IValue visitFunction(Type type) throws IOException { - throw parseErrorHere("Can not read json values of function types: " + in.getPath()); - } + in.endArray(); - @Override - public IValue visitSourceLocation(Type type) throws IOException { - if (isNull()) { - return inferNullValue(nulls, type); - } - - switch (in.peek()) { - case STRING: - return sourceLocationString(); - case BEGIN_OBJECT: - return sourceLocationObject(); - default: - throw parseErrorHere("Could not find string or source location object here: " + in.getPath()); - } - } + // filter all the null values + l.forEach(e -> { + if (e == null) { + throw parseErrorHere("Tuples can not have null elements."); + } + }); - private IValue sourceLocationObject() throws IOException { - String scheme = null; - String authority = null; - String path = null; - String fragment = ""; - String query = ""; - int offset = -1; - int length = -1; - int beginLine = -1; - int endLine = -1; - int beginColumn = -1; - int endColumn = -1; - - in.beginObject(); - - while (in.hasNext()) { - String name = nextName(); - - switch (name) { - case "scheme": - scheme = nextString(); - break; - case "authority": - authority = nextString(); - break; - case "path": - path = nextString(); - break; - case "fragment": - fragment = nextString(); - break; - case "query": - query = nextString(); - break; - case "offset": - offset = in.nextInt(); - break; - case "length": - length = in.nextInt(); - break; - case "start": - case "begin": - in.beginArray(); - beginLine = in.nextInt(); - beginColumn = in.nextInt(); - in.endArray(); - break; - case "end": - in.beginArray(); - endLine = in.nextInt(); - endColumn = in.nextInt(); - in.endArray(); - break; - default: - throw parseErrorHere("unexpected property name " + name + " :" + in.getPath()); - } - } - - in.endObject(); - try { - ISourceLocation root; - if (scheme != null && authority != null && query != null && fragment != null) { - root = vf.sourceLocation(scheme, authority, path, query, fragment); - } - else if (scheme != null) { - root = vf.sourceLocation(scheme, authority == null ? "" : authority, path); - } - else if (path != null) { - root = URIUtil.createFileLocation(path); - } - else { - throw parseErrorHere("Could not parse complete source location: " + in.getPath()); + assert type.getArity() == l.size(); + + return vf.tuple(l.toArray(new IValue[l.size()])); } - if (offset != -1 && length != -1 && beginLine != -1 && endLine != -1 && beginColumn != -1 && endColumn != -1) { - return vf.sourceLocation(root, offset, length, beginLine, endLine, beginColumn, endColumn); + + @Override + public IValue visitVoid(Type type) throws IOException { + throw parseErrorHere("Can not read json values of type void: " + in.getPath()); } - if (offset != -1 && length != -1) { - return vf.sourceLocation(root, offset, length); + + @Override + public IValue visitFunction(Type type) throws IOException { + throw parseErrorHere("Can not read json values of function types: " + in.getPath()); } - return root; - } catch (URISyntaxException e) { - throw parseErrorHere(e.getMessage()); - } - } - @Override - public IValue visitValue(Type type) throws IOException { - switch (in.peek()) { - case NUMBER: - return visitNumber(TF.numberType()); - case STRING: - return visitString(TF.stringType()); - case BEGIN_ARRAY: - return visitList(TF.listType(TF.valueType())); - case BEGIN_OBJECT: - return visitNode(TF.nodeType()); - case BOOLEAN: - return visitBool(TF.boolType()); - case NAME: - // this would be weird though - return vf.string(nextName()); - case NULL: - in.nextNull(); - return inferNullValue(nulls, type); - default: - throw parseErrorHere("Did not expect end of Json value here, while looking for " + type + " + at " + in.getPath()); - } - } + @Override + public IValue visitSourceLocation(Type type) throws IOException { + if (isNull()) { + return inferNullValue(nulls, type); + } - private IValue sourceLocationString() throws IOException { - try { - String val = nextString().trim(); - - if (val.startsWith("|") && (val.endsWith("|") || val.endsWith(")"))) { - return new StandardTextReader().read(vf, new StringReader(val)); - } - else if (val.contains("://")) { - return vf.sourceLocation(URIUtil.createFromEncoded(val)); - } - else { - // will be simple interpreted as an absolute file name - return URIUtil.createFileLocation(val); - } - } - catch (URISyntaxException e) { - throw parseErrorHere(e.getMessage()); + switch (in.peek()) { + case STRING: + return sourceLocationString(); + case BEGIN_OBJECT: + return sourceLocationObject(); + default: + throw parseErrorHere("Could not find string or source location object here: " + in.getPath()); + } } - } - @Override - public IValue visitRational(Type type) throws IOException { - if (isNull()) { - return inferNullValue(nulls, type); - } - - switch (in.peek()) { - case BEGIN_ARRAY: - in.beginArray(); - IInteger numA = (IInteger) TF.integerType().accept(this); - IInteger denomA = (IInteger) TF.integerType().accept(this); - in.endArray(); - return vf.rational(numA, denomA); - case STRING: - return vf.rational(nextString()); - default: - throw parseErrorHere("Expected integer but got " + in.peek()); - } - } + private IValue sourceLocationObject() throws IOException { + String scheme = null; + String authority = null; + String path = null; + String fragment = ""; + String query = ""; + int offset = -1; + int length = -1; + int beginLine = -1; + int endLine = -1; + int beginColumn = -1; + int endColumn = -1; + + in.beginObject(); + + while (in.hasNext()) { + String name = nextName(); + + switch (name) { + case "scheme": + scheme = nextString(); + break; + case "authority": + authority = nextString(); + break; + case "path": + path = nextString(); + break; + case "fragment": + fragment = nextString(); + break; + case "query": + query = nextString(); + break; + case "offset": + offset = in.nextInt(); + break; + case "length": + length = in.nextInt(); + break; + case "start": + case "begin": + in.beginArray(); + beginLine = in.nextInt(); + beginColumn = in.nextInt(); + in.endArray(); + break; + case "end": + in.beginArray(); + endLine = in.nextInt(); + endColumn = in.nextInt(); + in.endArray(); + break; + default: + throw parseErrorHere("unexpected property name " + name + " :" + in.getPath()); + } + } - @Override - public IValue visitMap(Type type) throws IOException { - if (isNull()) { - return inferNullValue(nulls, type); - } - IMapWriter w = vf.mapWriter(); - - switch (in.peek()) { - case BEGIN_OBJECT: - in.beginObject(); - if (!type.getKeyType().isString() && in.peek() != JsonToken.END_OBJECT) { - throw parseErrorHere("Can not read JSon object as a map if the key type of the map (" + type + ") is not a string at " + in.getPath()); - } - - while (in.hasNext()) { - IString label = vf.string(nextName()); - IValue value = type.getValueType().accept(this); - if (value != null) { - w.put(label, value); - } - } - in.endObject(); - return w.done(); - case BEGIN_ARRAY: - in.beginArray(); - while (in.hasNext()) { - in.beginArray(); - IValue key = type.getKeyType().accept(this); - IValue value = type.getValueType().accept(this); - if (key != null && value != null) { - w.put(key,value); + in.endObject(); + try { + ISourceLocation root; + if (scheme != null && authority != null && query != null && fragment != null) { + root = vf.sourceLocation(scheme, authority, path, query, fragment); + } + else if (scheme != null) { + root = vf.sourceLocation(scheme, authority == null ? "" : authority, path); + } + else if (path != null) { + root = URIUtil.createFileLocation(path); + } + else { + throw parseErrorHere("Could not parse complete source location: " + in.getPath()); + } + if (offset != -1 && length != -1 && beginLine != -1 && endLine != -1 && beginColumn != -1 + && endColumn != -1) { + return vf.sourceLocation(root, offset, length, beginLine, endLine, beginColumn, endColumn); + } + if (offset != -1 && length != -1) { + return vf.sourceLocation(root, offset, length); + } + return root; } - in.endArray(); - } - in.endArray(); - return w.done(); - default: - throw parseErrorHere("Expected a map encoded as an object or an nested array to match " + type); - } - } + catch (URISyntaxException e) { + throw parseErrorHere(e.getMessage()); + } + } - @Override - public IValue visitAlias(Type type) throws IOException { - while (type.isAliased()) { - type = type.getAliased(); - } - - return type.accept(this); - } + @Override + public IValue visitValue(Type type) throws IOException { + switch (in.peek()) { + case NUMBER: + return visitNumber(TF.numberType()); + case STRING: + return visitString(TF.stringType()); + case BEGIN_ARRAY: + return visitList(TF.listType(TF.valueType())); + case BEGIN_OBJECT: + return visitNode(TF.nodeType()); + case BOOLEAN: + return visitBool(TF.boolType()); + case NAME: + // this would be weird though + return vf.string(nextName()); + case NULL: + in.nextNull(); + return inferNullValue(nulls, type); + default: + throw parseErrorHere( + "Did not expect end of Json value here, while looking for " + type + " + at " + in.getPath()); + } + } - @Override - public IValue visitBool(Type type) throws IOException { - if (isNull()) { - return inferNullValue(nulls, type); - } - return vf.bool(in.nextBoolean()); - } + private IValue sourceLocationString() throws IOException { + try { + String val = nextString().trim(); + + if (val.startsWith("|") && (val.endsWith("|") || val.endsWith(")"))) { + return new StandardTextReader().read(vf, new StringReader(val)); + } + else if (val.contains("://")) { + return vf.sourceLocation(URIUtil.createFromEncoded(val)); + } + else { + // will be simple interpreted as an absolute file name + return URIUtil.createFileLocation(val); + } + } + catch (URISyntaxException e) { + throw parseErrorHere(e.getMessage()); + } + } - private int getPos() { - if (src == null) { - return 0; - } - - try { - return Math.max(0, (int) posHandler.get(in) - 1); - } - catch (IllegalArgumentException | SecurityException e) { - // stop trying to recover the positions - src = null; - return 0; - } - } + @Override + public IValue visitRational(Type type) throws IOException { + if (isNull()) { + return inferNullValue(nulls, type); + } - private int getLine() { - if (src == null) { - return 0; - } - - try { - return (int) lineHandler.get(in) + 1; - } - catch (IllegalArgumentException | SecurityException e) { - // stop trying to recover the positions - src = null; - return 0; - } - } + switch (in.peek()) { + case BEGIN_ARRAY: + in.beginArray(); + IInteger numA = (IInteger) TF.integerType().accept(this); + IInteger denomA = (IInteger) TF.integerType().accept(this); + in.endArray(); + return vf.rational(numA, denomA); + case STRING: + return vf.rational(nextString()); + default: + throw parseErrorHere("Expected integer but got " + in.peek()); + } + } - private int getCol() { - if (src == null) { - return 0; - } - - try { - return getPos() - (int) lineStartHandler.get(in); - } - catch (IllegalArgumentException | SecurityException e) { - // stop trying to recover the positions - src = null; - return 0; - } - } + @Override + public IValue visitMap(Type type) throws IOException { + if (isNull()) { + return inferNullValue(nulls, type); + } + IMapWriter w = vf.mapWriter(); + + switch (in.peek()) { + case BEGIN_OBJECT: + in.beginObject(); + if (!type.getKeyType().isString() && in.peek() != JsonToken.END_OBJECT) { + throw parseErrorHere("Can not read JSon object as a map if the key type of the map (" + type + + ") is not a string at " + in.getPath()); + } + + while (in.hasNext()) { + IString label = vf.string(nextName()); + IValue value = type.getValueType().accept(this); + if (value != null) { + w.put(label, value); + } + } + in.endObject(); + return w.done(); + case BEGIN_ARRAY: + in.beginArray(); + while (in.hasNext()) { + in.beginArray(); + IValue key = type.getKeyType().accept(this); + IValue value = type.getValueType().accept(this); + if (key != null && value != null) { + w.put(key, value); + } + in.endArray(); + } + in.endArray(); + return w.done(); + default: + throw parseErrorHere("Expected a map encoded as an object or an nested array to match " + type); + } + } - protected Throw parseErrorHere(String cause) { - var location = src == null ? URIUtil.rootLocation("unknown") : src; - int offset = Math.max(getPos(), lastPos); - int line = getLine(); - int col = getCol(); - - return RuntimeExceptionFactory.jsonParseError( - vf.sourceLocation(location,offset, 1, line, line, col, col + 1), - cause, - in.getPath()); - } + @Override + public IValue visitAlias(Type type) throws IOException { + while (type.isAliased()) { + type = type.getAliased(); + } - /** - * Expecting an ADT we found NULL on the lookahead. - * This is either a Maybe or we can use the map - * of null values. - */ - private IValue visitNullAsAbstractData(Type type) { - return inferNullValue(nulls, type); - } + return type.accept(this); + } - /** - * Expecting an ADT we found a string value instead. - * Now we can (try to) apply the parsers that were passed in. - * If that does not fly, we can interpret strings as nullary ADT - * constructors. - */ - private IValue visitStringAsAbstractData(Type type) throws IOException { - var stringInput = nextString(); + @Override + public IValue visitBool(Type type) throws IOException { + if (isNull()) { + return inferNullValue(nulls, type); + } + return vf.bool(in.nextBoolean()); + } - // might be a parsable string. let's see. - if (parsers != null) { - var reified = new org.rascalmpl.types.TypeReifier(vf).typeToValue(type, new TypeStore(), vf.map()); - - try { - return parsers.call(Collections.emptyMap(), reified, vf.string(stringInput)); + private int getPos() { + if (src == null) { + return 0; + } + + try { + return Math.max(0, (int) posHandler.get(in) - 1); + } + catch (IllegalArgumentException | SecurityException e) { + // stop trying to recover the positions + src = null; + return 0; + } } - catch (Throw t) { - Type excType = t.getException().getType(); - if (excType.isAbstractData() && ((IConstructor) t.getException()).getConstructorType().getName().equals("ParseError")) { - throw t; // that's a real parse error to report - } - // otherwise we fall through to enum recognition + private int getLine() { + if (src == null) { + return 0; + } + + try { + return (int) lineHandler.get(in) + 1; + } + catch (IllegalArgumentException | SecurityException e) { + // stop trying to recover the positions + src = null; + return 0; + } } - } - // enum! - Set enumCons = store.lookupConstructor(type, stringInput); + private int getCol() { + if (src == null) { + return 0; + } - for (Type candidate : enumCons) { - if (candidate.getArity() == 0) { - return vf.constructor(candidate); + try { + return getPos() - (int) lineStartHandler.get(in); + } + catch (IllegalArgumentException | SecurityException e) { + // stop trying to recover the positions + src = null; + return 0; + } } - } - - if (parsers != null) { - throw parseErrorHere("parser failed to recognize \"" + stringInput + "\" and no nullary constructor found for " + type + "either"); - } - else { - throw parseErrorHere("no nullary constructor found for " + type + ", that matches " + stringInput); - } - } - /** - * This is the main workhorse. Every object is mapped one-to-one to an ADT constructor - * instance. The field names (keyword parameters and positional) are mapped to field - * names of the object. The name of the constructor is _not_ consequential. - * @param type - * @return - * @throws IOException - */ - private IValue visitObjectAsAbstractData(Type type) throws IOException { - Set alternatives = null; - - in.beginObject(); - int startPos = getPos(); - int startLine = getLine(); - int startCol = getCol(); - - // use explicit information in the JSON to select and filter constructors from the TypeStore - // we expect always to have the field _constructor before _type. - if (explicitConstructorNames || explicitDataTypes) { - String consName = null; - String typeName = null; // this one is optional, and the order with cons is not defined. - String consLabel = nextName(); - - // first we read either a cons name or a type name - if (explicitConstructorNames && "_constructor".equals(consLabel)) { - consName = in.nextString(); + protected Throw parseErrorHere(String cause) { + var location = src == null ? URIUtil.rootLocation("unknown") : src; + int offset = Math.max(getPos(), lastPos); + int line = getLine(); + int col = getCol(); + + return RuntimeExceptionFactory + .jsonParseError(vf.sourceLocation(location, offset, 1, line, line, col, col + 1), cause, in.getPath()); } - else if (explicitDataTypes && "_type".equals(consLabel)) { - typeName = in.nextString(); + + /** + * Expecting an ADT we found NULL on the lookahead. This is either a Maybe or we can use the map of + * null values. + */ + private IValue visitNullAsAbstractData(Type type) { + return inferNullValue(nulls, type); } - // optionally read the second field - if (explicitDataTypes && typeName == null) { - // we've read a constructor name, but we still need a type name - consLabel = nextName(); - if (explicitDataTypes && "_type".equals(consLabel)) { - typeName = in.nextString(); - } + /** + * Expecting an ADT we found a string value instead. Now we can (try to) apply the parsers that were + * passed in. If that does not fly, we can interpret strings as nullary ADT constructors. + */ + private IValue visitStringAsAbstractData(Type type) throws IOException { + var stringInput = nextString(); + + // might be a parsable string. let's see. + if (parsers != null) { + var reified = new org.rascalmpl.types.TypeReifier(vf).typeToValue(type, new TypeStore(), vf.map()); + + try { + return parsers.call(Collections.emptyMap(), reified, vf.string(stringInput)); + } + catch (Throw t) { + Type excType = t.getException().getType(); + + if (excType.isAbstractData() + && ((IConstructor) t.getException()).getConstructorType().getName().equals("ParseError")) { + throw t; // that's a real parse error to report + } + // otherwise we fall through to enum recognition + } + } + + // enum! + Set enumCons = store.lookupConstructor(type, stringInput); + + for (Type candidate : enumCons) { + if (candidate.getArity() == 0) { + return vf.constructor(candidate); + } + } + + if (parsers != null) { + throw parseErrorHere("parser failed to recognize \"" + stringInput + + "\" and no nullary constructor found for " + type + "either"); + } + else { + throw parseErrorHere("no nullary constructor found for " + type + ", that matches " + stringInput); + } } - else if (explicitDataTypes && consName == null) { - // we've read type name, but we still need a constructor name - consLabel = nextName(); - if (explicitDataTypes && "_constructor".equals(consLabel)) { - consName = in.nextString(); - } + + /** + * This is the main workhorse. Every object is mapped one-to-one to an ADT constructor instance. The + * field names (keyword parameters and positional) are mapped to field names of the object. The name + * of the constructor is _not_ consequential. + * + * @param type + * @return + * @throws IOException + */ + private IValue visitObjectAsAbstractData(Type type) throws IOException { + Set alternatives = null; + + in.beginObject(); + int startPos = getPos(); + int startLine = getLine(); + int startCol = getCol(); + + // use explicit information in the JSON to select and filter constructors from the TypeStore + // we expect always to have the field _constructor before _type. + if (explicitConstructorNames || explicitDataTypes) { + String consName = null; + String typeName = null; // this one is optional, and the order with cons is not defined. + String consLabel = nextName(); + + // first we read either a cons name or a type name + if (explicitConstructorNames && "_constructor".equals(consLabel)) { + consName = in.nextString(); + } + else if (explicitDataTypes && "_type".equals(consLabel)) { + typeName = in.nextString(); + } + + // optionally read the second field + if (explicitDataTypes && typeName == null) { + // we've read a constructor name, but we still need a type name + consLabel = nextName(); + if (explicitDataTypes && "_type".equals(consLabel)) { + typeName = in.nextString(); + } + } + else if (explicitDataTypes && consName == null) { + // we've read type name, but we still need a constructor name + consLabel = nextName(); + if (explicitDataTypes && "_constructor".equals(consLabel)) { + consName = in.nextString(); + } + } + + if (explicitDataTypes && typeName == null) { + throw parseErrorHere("Missing a _type field: " + in.getPath()); + } + else if (explicitConstructorNames && consName == null) { + throw parseErrorHere("Missing a _constructor field: " + in.getPath()); + } + + if (typeName != null && consName != null) { + // first focus on the given type name + var dataType = TF.abstractDataType(store, typeName); + alternatives = store.lookupConstructor(dataType, consName); + } + else { + // we only have a constructor name + // lookup over all data types by constructor name + alternatives = store.lookupConstructors(consName); + } + } + else { + alternatives = store.lookupAlternatives(type); + } + + if (alternatives.size() > 1) { + monitor.warning("selecting arbitrary constructor for " + type, vf.sourceLocation(in.getPath())); + } + else if (alternatives.size() == 0) { + throw parseErrorHere("No fitting constructor found for " + in.getPath()); + } + + Type cons = alternatives.iterator().next(); + + IValue[] args = new IValue[cons.getArity()]; + Map kwParams = new HashMap<>(); + + if (!cons.hasFieldNames() && cons.getArity() != 0) { + throw parseErrorHere("For the object encoding constructors must have field names " + in.getPath()); + } + + while (in.hasNext()) { + String label = nextName(); + if (cons.hasField(label)) { + IValue val = cons.getFieldType(label).accept(this); + if (val != null) { + args[cons.getFieldIndex(label)] = val; + } + else { + throw parseErrorHere("Could not parse argument " + label + ":" + in.getPath()); + } + } + else if (cons.hasKeywordField(label, store)) { + if (!isNull()) { // lookahead for null to give default parameters the preference. + IValue val = store.getKeywordParameterType(cons, label).accept(this); + // null can still happen if the nulls map doesn't have a default + if (val != null) { + // if the value is null we'd use the default value of the defined field in the constructor + kwParams.put(label, val); + } + } + else { + var nullValue = inferNullValue(nulls, cons.getAbstractDataType()); + if (nullValue != null) { + kwParams.put(label, nullValue); + } + } + } + else { // its a normal arg, pass its label to the child + if (!explicitConstructorNames && "_constructor".equals(label)) { + // ignore additional _constructor fields. + in.nextString(); // skip the constructor value + continue; + } + else if (!explicitDataTypes && "_type".equals(label)) { + // ignore additional _type fields. + in.nextString(); // skip the type value + continue; + } + else { + // field label does not match data type definition + throw parseErrorHere("Unknown field " + label + ":" + in.getPath()); + } + } + } + + in.endObject(); + int endPos = getPos(); + int endLine = getLine(); + int endCol = getCol(); + + for (int i = 0; i < args.length; i++) { + if (args[i] == null) { + throw parseErrorHere( + "Missing argument " + cons.getFieldName(i) + " to " + cons + ":" + in.getPath()); + } + } + + if (src != null) { + kwParams.put(kwParams.containsKey("src") ? "rascal-src" : "src", + vf.sourceLocation(src, startPos, endPos - startPos + 1, startLine, endLine, startCol, endCol + 1)); + } + + return vf.constructor(cons, args, kwParams); } - if (explicitDataTypes && typeName == null) { - throw parseErrorHere("Missing a _type field: " + in.getPath()); + @Override + public IValue visitAbstractData(Type type) throws IOException { + if (UtilMaybe.isMaybe(type)) { + if (in.peek() == JsonToken.NULL) { + in.nextNull(); + return UtilMaybe.nothing(); + } + else { + // dive into the wrapped type, and wrap the result. Could be a str, int, or anything. + return UtilMaybe.just(type.getTypeParameters().getFieldType(0).accept(this)); + } + } + + switch (in.peek()) { + case NULL: + return visitNullAsAbstractData(type); + case STRING: + return visitStringAsAbstractData(type); + case BEGIN_OBJECT: + return visitObjectAsAbstractData(type); + default: + throw parseErrorHere("Expected ADT:" + type + ", but found " + in.peek().toString()); + } } - else if (explicitConstructorNames && consName == null) { - throw parseErrorHere("Missing a _constructor field: " + in.getPath()); + + @Override + public IValue visitConstructor(Type type) throws IOException { + return type.getAbstractDataType().accept(this); } - if (typeName != null && consName != null) { - // first focus on the given type name - var dataType = TF.abstractDataType(store, typeName); - alternatives = store.lookupConstructor(dataType, consName); + @Override + public IValue visitNode(Type type) throws IOException { + if (isNull()) { + return inferNullValue(nulls, type); + } + + in.beginObject(); + int startPos = getPos(); + int startLine = getLine(); + int startCol = getCol(); + + Map kws = new HashMap<>(); + Map args = new HashMap<>(); + + String name = "object"; + + while (in.hasNext()) { + String kwName = nextName(); + + if (kwName.equals("_name")) { + name = ((IString) TF.stringType().accept(this)).getValue(); + continue; + } + + boolean positioned = kwName.startsWith("arg"); + + if (!isNull()) { // lookahead for null to give default parameters the preference. + IValue val = TF.valueType().accept(this); + + if (val != null) { + // if the value is null we'd use the default value of the defined field in the constructor + (positioned ? args : kws).put(kwName, val); + } + } + else { + var nullValue = inferNullValue(nulls, TF.valueType()); + if (nullValue != null) { + (positioned ? args : kws).put(kwName, nullValue); + } + } + } + + in.endObject(); + int endPos = getPos(); + int endLine = getLine(); + int endCol = getCol(); + + if (originTracking) { + kws.put(kws.containsKey("src") ? "rascal-src" : "src", + vf.sourceLocation(src, startPos, endPos - startPos + 1, startLine, endLine, startCol, endCol + 1)); + } + + IValue[] argArray = args.entrySet().stream().sorted((e, f) -> e.getKey().compareTo(f.getKey())) + .filter(e -> e.getValue() != null).map(e -> e.getValue()).toArray(IValue[]::new); + + return vf.node(name, argArray, kws); } - else { - // we only have a constructor name - // lookup over all data types by constructor name - alternatives = store.lookupConstructors(consName); + + @Override + public IValue visitNumber(Type type) throws IOException { + if (isNull()) { + return inferNullValue(nulls, type); + } + + if (in.peek() == JsonToken.BEGIN_ARRAY) { + return visitRational(type); + } + + String numberString = in.nextString(); + + if (numberString.contains("r")) { + return vf.rational(numberString); + } + if (numberString.matches(".*[\\.eE].*")) { + return vf.real(numberString); + } + else { + return vf.integer(numberString); + } } - } - else { - alternatives = store.lookupAlternatives(type); - } - - if (alternatives.size() > 1) { - monitor.warning("selecting arbitrary constructor for " + type, vf.sourceLocation(in.getPath())); - } - else if (alternatives.size() == 0) { - throw parseErrorHere("No fitting constructor found for " + in.getPath()); - } - - Type cons = alternatives.iterator().next(); - - IValue[] args = new IValue[cons.getArity()]; - Map kwParams = new HashMap<>(); - - if (!cons.hasFieldNames() && cons.getArity() != 0) { - throw parseErrorHere("For the object encoding constructors must have field names " + in.getPath()); - } - - while (in.hasNext()) { - String label = nextName(); - if (cons.hasField(label)) { - IValue val = cons.getFieldType(label).accept(this); - if (val != null) { - args[cons.getFieldIndex(label)] = val; - } - else { - throw parseErrorHere("Could not parse argument " + label + ":" + in.getPath()); - } + + @Override + public IValue visitParameter(Type type) throws IOException { + return type.getBound().accept(this); } - else if (cons.hasKeywordField(label, store)) { - if (!isNull()) { // lookahead for null to give default parameters the preference. - IValue val = store.getKeywordParameterType(cons, label).accept(this); - // null can still happen if the nulls map doesn't have a default - if (val != null) { - // if the value is null we'd use the default value of the defined field in the constructor - kwParams.put(label, val); - } - } - else { - var nullValue = inferNullValue(nulls, cons.getAbstractDataType()); - if (nullValue != null) { - kwParams.put(label, nullValue); - } - } - } - else { // its a normal arg, pass its label to the child - if (!explicitConstructorNames && "_constructor".equals(label)) { - // ignore additional _constructor fields. - in.nextString(); // skip the constructor value - continue; - } - else if (!explicitDataTypes && "_type".equals(label)) { - // ignore additional _type fields. - in.nextString(); // skip the type value - continue; - } - else { - // field label does not match data type definition - throw parseErrorHere("Unknown field " + label + ":" + in.getPath()); - } + + @Override + public IValue visitDateTime(Type type) throws IOException { + try { + switch (in.peek()) { + case STRING: + lastPos = getPos(); + Date parsedDate = format.get().parse(nextString()); + return vf.datetime(parsedDate.toInstant().toEpochMilli()); + case NUMBER: + return vf.datetime(in.nextLong()); + default: + throw parseErrorHere("Expected a datetime instant " + in.getPath()); + } + } + catch (ParseException e) { + throw parseErrorHere("Could not parse date: " + in.getPath()); + } } - } - - in.endObject(); - int endPos = getPos(); - int endLine = getLine(); - int endCol = getCol(); - - for (int i = 0; i < args.length; i++) { - if (args[i] == null) { - throw parseErrorHere("Missing argument " + cons.getFieldName(i) + " to " + cons + ":" + in.getPath()); + + @Override + public IValue visitList(Type type) throws IOException { + if (isNull()) { + return inferNullValue(nulls, type); + } + + IListWriter w = vf.listWriter(); + in.beginArray(); + while (in.hasNext()) { + // here we pass label from the higher context + IValue elem = + isNull() ? inferNullValue(nulls, type.getElementType()) : type.getElementType().accept(this); + + if (elem != null) { + w.append(elem); + } + } + + in.endArray(); + return w.done(); } - } - - if (src != null) { - kwParams.put(kwParams.containsKey("src") ? "rascal-src" : "src", vf.sourceLocation(src, startPos, endPos - startPos + 1, startLine, endLine, startCol, endCol + 1)); - } - return vf.constructor(cons, args, kwParams); - } + public IValue visitSet(Type type) throws IOException { + if (isNull()) { + return inferNullValue(nulls, type); + } + + ISetWriter w = vf.setWriter(); + in.beginArray(); + while (in.hasNext()) { + // here we pass label from the higher context + IValue elem = + isNull() ? inferNullValue(nulls, type.getElementType()) : type.getElementType().accept(this); + + if (elem != null) { + w.insert(elem); + } + } - @Override - public IValue visitAbstractData(Type type) throws IOException { - if (UtilMaybe.isMaybe(type)) { - if (in.peek() == JsonToken.NULL) { - in.nextNull(); - return UtilMaybe.nothing(); + in.endArray(); + return w.done(); } - else { - // dive into the wrapped type, and wrap the result. Could be a str, int, or anything. - return UtilMaybe.just(type.getTypeParameters().getFieldType(0).accept(this)); + + private boolean isNull() throws IOException { + // we use null in JSon to encode optional values. + // this will be mapped to keyword parameters in Rascal, + // or an exception if we really need a value + if (in.peek() == JsonToken.NULL) { + in.nextNull(); + return true; + } + return false; } - } - - switch (in.peek()) { - case NULL: - return visitNullAsAbstractData(type); - case STRING: - return visitStringAsAbstractData(type); - case BEGIN_OBJECT: - return visitObjectAsAbstractData(type); - default: - throw parseErrorHere("Expected ADT:" + type + ", but found " + in.peek().toString()); - } } - @Override - public IValue visitConstructor(Type type) throws IOException { - return type.getAbstractDataType().accept(this); - } + private static final TypeFactory TF = TypeFactory.getInstance(); + private final TypeStore store; + private final IValueFactory vf; + private ThreadLocal format; + private final IRascalMonitor monitor; + private ISourceLocation src; + private boolean originTracking; + private VarHandle posHandler; + private VarHandle lineHandler; + private VarHandle lineStartHandler; + private boolean explicitConstructorNames; + private boolean explicitDataTypes; + private IFunction parsers; + private Map nulls = Collections.emptyMap(); - @Override - public IValue visitNode(Type type) throws IOException { - if (isNull()) { - return inferNullValue(nulls, type); - } - - in.beginObject(); - int startPos = getPos(); - int startLine = getLine(); - int startCol = getCol(); - - Map kws = new HashMap<>(); - Map args = new HashMap<>(); - - String name = "object"; - - while (in.hasNext()) { - String kwName = nextName(); - - if (kwName.equals("_name")) { - name = ((IString) TF.stringType().accept(this)).getValue(); - continue; + /** + * @param vf factory which will be used to construct values + * @param store type store to lookup constructors of abstract data-types in and the types of keyword + * fields + * @param monitor provides progress reports and warnings + * @param src loc to use to identify the entire file. + */ + public JsonValueReader(IValueFactory vf, TypeStore store, IRascalMonitor monitor, ISourceLocation src) { + this.vf = vf; + this.store = store; + this.monitor = monitor; + this.src = src; + setCalendarFormat("yyyy-MM-dd'T'HH:mm:ssZ"); + + if (src != null) { + try { + var lookup = MethodHandles.lookup(); + var privateLookup = MethodHandles.privateLookupIn(JsonReader.class, lookup); + this.posHandler = privateLookup.findVarHandle(JsonReader.class, "pos", int.class); + this.lineHandler = privateLookup.findVarHandle(JsonReader.class, "lineNumber", int.class); + this.lineStartHandler = privateLookup.findVarHandle(JsonReader.class, "lineStart", int.class); + this.originTracking = (src != null); + } + catch (NoSuchFieldException | SecurityException | IllegalAccessException e) { + // we disable the origin tracking if we can not get to the fields + src = null; + originTracking = false; + monitor.warning("Unable to retrieve origin information due to: " + e.getMessage(), src); + } } + } - boolean positioned = kwName.startsWith("arg"); + public JsonValueReader(IValueFactory vf, IRascalMonitor monitor, ISourceLocation src) { + this(vf, new TypeStore(), monitor, src); + } - if (!isNull()) { // lookahead for null to give default parameters the preference. - IValue val = TF.valueType().accept(this); - - if (val != null) { - // if the value is null we'd use the default value of the defined field in the constructor - (positioned ? args : kws).put(kwName, val); - } - } - else { - var nullValue = inferNullValue(nulls, TF.valueType()); - if (nullValue != null) { - (positioned ? args : kws).put(kwName, nullValue); - } - } - } - - in.endObject(); - int endPos = getPos(); - int endLine = getLine(); - int endCol = getCol(); - - if (originTracking) { - kws.put(kws.containsKey("src") ? "rascal-src" : "src", vf.sourceLocation(src, startPos, endPos - startPos + 1, startLine, endLine, startCol, endCol + 1)); - } - - IValue[] argArray = args.entrySet().stream() - .sorted((e, f) -> e.getKey().compareTo(f.getKey())) - .filter(e -> e.getValue() != null) - .map(e -> e.getValue()) - .toArray(IValue[]::new); - - return vf.node(name, argArray, kws); + public JsonValueReader setExplicitConstructorNames(boolean value) { + this.explicitConstructorNames = value; + return this; } - @Override - public IValue visitNumber(Type type) throws IOException { - if (isNull()) { - return inferNullValue(nulls, type); + public JsonValueReader setExplicitDataTypes(boolean value) { + this.explicitDataTypes = value; + if (value) { + this.explicitConstructorNames = true; } + return this; + } - if (in.peek() == JsonToken.BEGIN_ARRAY) { - return visitRational(type); - } - - String numberString = in.nextString(); + /** + * @param vf factory which will be used to construct values + * @param store type store to lookup constructors of abstract data-types in and the types of keyword + * fields + */ + public JsonValueReader(IRascalValueFactory vf, TypeStore store, IRascalMonitor monitor, ISourceLocation src) { + this.vf = vf; + this.store = store; + this.monitor = monitor; + this.src = (src == null) ? URIUtil.rootLocation("unknown") : src; - if (numberString.contains("r")) { - return vf.rational(numberString); - } - if (numberString.matches(".*[\\.eE].*")) { - return vf.real(numberString); + setCalendarFormat("yyyy-MM-dd'T'HH:mm:ssZ"); + + // this is for origin tracking as well as accurate parse errors + try { + var lookup = MethodHandles.lookup(); + var privateLookup = MethodHandles.privateLookupIn(JsonReader.class, lookup); + this.posHandler = privateLookup.findVarHandle(JsonReader.class, "pos", int.class); + this.lineHandler = privateLookup.findVarHandle(JsonReader.class, "lineNumber", int.class); + this.lineStartHandler = privateLookup.findVarHandle(JsonReader.class, "lineStart", int.class); + this.originTracking = (src != null); } - else { - return vf.integer(numberString); + catch (NoSuchFieldException | SecurityException | IllegalAccessException e) { + // we disable the origin tracking if we can not get to the fields + originTracking = false; + src = null; + monitor.warning("Unable to retrieve origin information due to: " + e.getMessage(), src); } } - @Override - public IValue visitParameter(Type type) throws IOException { - return type.getBound().accept(this); + public JsonValueReader(IRascalValueFactory vf, IRascalMonitor monitor, ISourceLocation src) { + this(vf, new TypeStore(), monitor, src); } - @Override - public IValue visitDateTime(Type type) throws IOException { - try { - switch (in.peek()) { - case STRING: - lastPos = getPos(); - Date parsedDate = format.get().parse(nextString()); - return vf.datetime(parsedDate.toInstant().toEpochMilli()); - case NUMBER: - return vf.datetime(in.nextLong()); - default: - throw parseErrorHere("Expected a datetime instant " + in.getPath()); - } - } catch (ParseException e) { - throw parseErrorHere("Could not parse date: " + in.getPath()); - } + public JsonValueReader setNulls(Map nulls) { + this.nulls = nulls; + return this; } - @Override - public IValue visitList(Type type) throws IOException { - if (isNull()) { - return inferNullValue(nulls, type); - } - - IListWriter w = vf.listWriter(); - in.beginArray(); - while (in.hasNext()) { - // here we pass label from the higher context - IValue elem = isNull() - ? inferNullValue(nulls, type.getElementType()) - : type.getElementType().accept(this); - - if (elem != null) { - w.append(elem); - } - } - - in.endArray(); - return w.done(); + /** + * Builder method to set the format to use for all date-time values encoded as strings + */ + public JsonValueReader setCalendarFormat(String format) { + // SimpleDateFormat is not thread safe, so here we make sure + // we can use objects of this reader in different threads at the same time + this.format = new ThreadLocal() { + protected SimpleDateFormat initialValue() { + return new SimpleDateFormat(format); + } + }; + return this; } - public IValue visitSet(Type type) throws IOException { - if (isNull()) { - return inferNullValue(nulls, type); - } - - ISetWriter w = vf.setWriter(); - in.beginArray(); - while (in.hasNext()) { - // here we pass label from the higher context - IValue elem = isNull() - ? inferNullValue(nulls, type.getElementType()) - : type.getElementType().accept(this); - - if (elem != null) { - w.insert(elem); + public JsonValueReader setParsers(IFunction parsers) { + if (parsers.getType() instanceof ReifiedType && parsers.getType().getTypeParameters().getFieldType(0).isTop()) { + // ignore the default parser + parsers = null; } - } - in.endArray(); - return w.done(); + this.parsers = parsers; + return this; } - private boolean isNull() throws IOException { - // we use null in JSon to encode optional values. - // this will be mapped to keyword parameters in Rascal, - // or an exception if we really need a value - if (in.peek() == JsonToken.NULL) { - in.nextNull(); - return true; - } - return false; - } - } - - private static final TypeFactory TF = TypeFactory.getInstance(); - private final TypeStore store; - private final IValueFactory vf; - private ThreadLocal format; - private final IRascalMonitor monitor; - private ISourceLocation src; - private boolean originTracking; - private VarHandle posHandler; - private VarHandle lineHandler; - private VarHandle lineStartHandler; - private boolean explicitConstructorNames; - private boolean explicitDataTypes; - private IFunction parsers; - private Map nulls = Collections.emptyMap(); - - /** - * @param vf factory which will be used to construct values - * @param store type store to lookup constructors of abstract data-types in and the types of keyword fields - * @param monitor provides progress reports and warnings - * @param src loc to use to identify the entire file. - */ - public JsonValueReader(IValueFactory vf, TypeStore store, IRascalMonitor monitor, ISourceLocation src) { - this.vf = vf; - this.store = store; - this.monitor = monitor; - this.src = src; - setCalendarFormat("yyyy-MM-dd'T'HH:mm:ssZ"); - - if (src != null) { - try { - var lookup = MethodHandles.lookup(); - var privateLookup = MethodHandles.privateLookupIn(JsonReader.class, lookup); - this.posHandler = privateLookup.findVarHandle(JsonReader.class, "pos", int.class); - this.lineHandler = privateLookup.findVarHandle(JsonReader.class, "lineNumber", int.class); - this.lineStartHandler = privateLookup.findVarHandle(JsonReader.class, "lineStart", int.class); - this.originTracking = (src != null); - } - catch (NoSuchFieldException | SecurityException | IllegalAccessException e) { - // we disable the origin tracking if we can not get to the fields - src = null; - originTracking = false; - monitor.warning("Unable to retrieve origin information due to: " + e.getMessage(), src); - } - } - } - - public JsonValueReader(IValueFactory vf, IRascalMonitor monitor, ISourceLocation src) { - this(vf, new TypeStore(), monitor, src); - } - - public JsonValueReader setExplicitConstructorNames(boolean value) { - this.explicitConstructorNames = value; - return this; - } - - public JsonValueReader setExplicitDataTypes(boolean value) { - this.explicitDataTypes = value; - if (value) { - this.explicitConstructorNames = true; - } - return this; - } - - /** - * @param vf factory which will be used to construct values - * @param store type store to lookup constructors of abstract data-types in and the types of keyword fields - */ - public JsonValueReader(IRascalValueFactory vf, TypeStore store, IRascalMonitor monitor, ISourceLocation src) { - this.vf = vf; - this.store = store; - this.monitor = monitor; - this.src = (src == null) ? URIUtil.rootLocation("unknown") : src; - - setCalendarFormat("yyyy-MM-dd'T'HH:mm:ssZ"); - - // this is for origin tracking as well as accurate parse errors - try { - var lookup = MethodHandles.lookup(); - var privateLookup = MethodHandles.privateLookupIn(JsonReader.class, lookup); - this.posHandler = privateLookup.findVarHandle(JsonReader.class, "pos", int.class); - this.lineHandler = privateLookup.findVarHandle(JsonReader.class, "lineNumber", int.class); - this.lineStartHandler = privateLookup.findVarHandle(JsonReader.class, "lineStart", int.class); - this.originTracking = (src != null); - } - catch (NoSuchFieldException | SecurityException | IllegalAccessException e) { - // we disable the origin tracking if we can not get to the fields - originTracking = false; - src = null; - monitor.warning("Unable to retrieve origin information due to: " + e.getMessage(), src); - } - } - - public JsonValueReader(IRascalValueFactory vf, IRascalMonitor monitor, ISourceLocation src) { - this(vf, new TypeStore(), monitor, src); - } - - public JsonValueReader setNulls(Map nulls) { - this.nulls = nulls; - return this; - } - /** - * Builder method to set the format to use for all date-time values encoded as strings - */ - public JsonValueReader setCalendarFormat(String format) { - // SimpleDateFormat is not thread safe, so here we make sure - // we can use objects of this reader in different threads at the same time - this.format = new ThreadLocal() { - protected SimpleDateFormat initialValue() { - return new SimpleDateFormat(format); - } - }; - return this; - } - - public JsonValueReader setParsers(IFunction parsers) { - if (parsers.getType() instanceof ReifiedType && parsers.getType().getTypeParameters().getFieldType(0).isTop()) { - // ignore the default parser - parsers = null; - } + /** + * Read and validate a Json stream as an IValue + * + * @param in json stream + * @param expected type to validate against (recursively) + * @return an IValue of the expected type + * @throws IOException when either a parse error or a validation error occurs + */ + public IValue read(JsonReader in, Type expected) throws IOException { + var dispatch = new ExpectedTypeDispatcher(in); - this.parsers = parsers; - return this; - } - - /** - * Read and validate a Json stream as an IValue - * @param in json stream - * @param expected type to validate against (recursively) - * @return an IValue of the expected type - * @throws IOException when either a parse error or a validation error occurs - */ - public IValue read(JsonReader in, Type expected) throws IOException { - var dispatch = new ExpectedTypeDispatcher(in); - - try { - var result = expected.accept(dispatch); - if (result == null) { - throw new JsonParseException("null occurred outside an optionality context and without a registered representation."); - } - return result; - } - catch (EOFException | JsonParseException | NumberFormatException | MalformedJsonException | IllegalStateException | NullPointerException e) { - throw dispatch.parseErrorHere(e.getMessage()); + try { + var result = expected.accept(dispatch); + if (result == null) { + throw new JsonParseException( + "null occurred outside an optionality context and without a registered representation."); + } + return result; + } + catch (EOFException | JsonParseException | NumberFormatException | MalformedJsonException + | IllegalStateException | NullPointerException e) { + throw dispatch.parseErrorHere(e.getMessage()); + } } - } } diff --git a/src/org/rascalmpl/library/lang/json/internal/JsonValueWriter.java b/src/org/rascalmpl/library/lang/json/internal/JsonValueWriter.java index af3d614e150..6c8c273c541 100644 --- a/src/org/rascalmpl/library/lang/json/internal/JsonValueWriter.java +++ b/src/org/rascalmpl/library/lang/json/internal/JsonValueWriter.java @@ -1,15 +1,25 @@ -/** - * Copyright (c) 2016, Jurgen J. Vinju, Centrum Wiskunde & Informatica (CWI) - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ +/** + * Copyright (c) 2016, Jurgen J. Vinju, Centrum Wiskunde & Informatica (CWI) All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are permitted + * provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions + * and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other materials provided with + * the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY + * WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ package org.rascalmpl.library.lang.json.internal; import java.io.IOException; @@ -45,396 +55,400 @@ import jline.internal.Nullable; /** - * This class streams am IValue stream directly to an JSon stream. Useful to communicate IValues to browsers. + * This class streams an IValue directly to an JSON stream. Useful to communicate IValues to + * browsers. */ public class JsonValueWriter { - private ThreadLocal format; - private boolean datesAsInts = true; - private boolean unpackedLocations = false; - private boolean dropOrigins = true; - private IFunction formatters; - private boolean explicitConstructorNames = false; - private boolean explicitDataTypes; - - /** helper class for number serialization without quotes */ - private static class RascalNumber extends Number { - private static final long serialVersionUID = -2204435793489295963L; - public INumber wrapped; - - @Override - public int intValue() { - return wrapped.toInteger().intValue(); + private ThreadLocal format; + private boolean datesAsInts = true; + private boolean unpackedLocations = false; + private boolean dropOrigins = true; + private IFunction formatters; + private boolean explicitConstructorNames = false; + private boolean explicitDataTypes; + + /** helper class for number serialization without quotes */ + private static class RascalNumber extends Number { + private static final long serialVersionUID = -2204435793489295963L; + public INumber wrapped; + + @Override + public int intValue() { + return wrapped.toInteger().intValue(); + } + + @Override + public long longValue() { + return wrapped.toInteger().longValue(); + } + + @Override + public float floatValue() { + // TODO parameterize precision + return wrapped.toReal(20).floatValue(); + } + + @Override + public double doubleValue() { + return wrapped.toReal(20).doubleValue(); + } + + @Override + public String toString() { + return wrapped.toString(); + } } - @Override - public long longValue() { - return wrapped.toInteger().longValue(); + private RascalNumber wrapper = new RascalNumber(); + + public JsonValueWriter() { + setCalendarFormat("yyyy-MM-dd'T'HH:mm:ss'Z'"); } - @Override - public float floatValue() { - // TODO parameterize precision - return wrapped.toReal(20).floatValue(); + /** + * Builder method to set the format to use for all date-time values encoded as strings + */ + public JsonValueWriter setCalendarFormat(@Nullable String format) { + if (format != null) { + // SimpleDateFormat is not thread safe, so here we make sure + // we can use objects of this reader in different threads at the same time + this.format = new ThreadLocal() { + protected SimpleDateFormat initialValue() { + return new SimpleDateFormat(format); + } + }; + } + + return this; } - @Override - public double doubleValue() { - return wrapped.toReal(20).doubleValue(); + public JsonValueWriter setDatesAsInt(boolean setting) { + this.datesAsInts = setting; + return this; } - @Override - public String toString() { - return wrapped.toString(); + public JsonValueWriter setUnpackedLocations(boolean setting) { + this.unpackedLocations = setting; + return this; } - } - - private RascalNumber wrapper = new RascalNumber(); - - public JsonValueWriter() { - setCalendarFormat("yyyy-MM-dd'T'HH:mm:ss'Z'"); - } - - /** - * Builder method to set the format to use for all date-time values encoded as strings - */ - public JsonValueWriter setCalendarFormat(@Nullable String format) { - if (format != null) { - // SimpleDateFormat is not thread safe, so here we make sure - // we can use objects of this reader in different threads at the same time - this.format = new ThreadLocal() { - protected SimpleDateFormat initialValue() { - return new SimpleDateFormat(format); - } - }; + + public JsonValueWriter setDropOrigins(boolean setting) { + this.dropOrigins = setting; + return this; } - - return this; - } - - public JsonValueWriter setDatesAsInt(boolean setting) { - this.datesAsInts = setting; - return this; - } - - public JsonValueWriter setUnpackedLocations(boolean setting) { - this.unpackedLocations = setting; - return this; - } - - public JsonValueWriter setDropOrigins(boolean setting) { - this.dropOrigins = setting; - return this; - } - - public JsonValueWriter setFormatters(@Nullable IFunction formatters) { - if (formatters != null && formatters.getType().getFieldType(0).isTop()) { - // ignore default function - formatters = null; - } - - this.formatters = formatters; - return this; - } - - public JsonValueWriter setExplicitConstructorNames(boolean setting) { - this.explicitConstructorNames = setting; - return this; - } - - public JsonValueWriter setExplicitDataTypes(boolean setting) { - this.explicitDataTypes = setting; - return this; - } - - public void write(JsonWriter out, IValue value) throws IOException { - value.accept(new IValueVisitor() { - - @Override - public Void visitString(IString o) throws IOException { - out.value(o.getValue()); - return null; - } - - @Override - public Void visitReal(IReal o) throws IOException { - wrapper.wrapped = o; - out.value(wrapper); - return null; - } - - @Override - public Void visitRational(IRational o) throws IOException { - out.beginArray(); - o.numerator().accept(this); - o.denominator().accept(this); - out.endArray(); - - return null; - } - - @Override - public Void visitList(IList o) throws IOException { - out.beginArray(); - for (IValue v : o) { - v.accept(this); - } - out.endArray(); - return null; - } - - @Override - public Void visitSet(ISet o) throws IOException { - out.beginArray(); - for (IValue v : o) { - v.accept(this); - } - out.endArray(); - return null; - } - - @Override - public Void visitSourceLocation(ISourceLocation o) throws IOException { - if (unpackedLocations) { - out.beginObject(); - - out.name("scheme"); - out.value(o.getScheme()); - - out.name("authority"); - out.value(o.getAuthority()); - - out.name("path"); - out.value(o.getPath()); - - if (!o.getFragment().isEmpty()) { - out.name("fragment"); - out.value(o.getFragment()); - } - - if (!o.getQuery().isEmpty()) { - out.name("query"); - out.value(o.getQuery()); - } - - if (o.hasOffsetLength()) { - out.name("offset"); - out.value(o.getOffset()); - out.name("length"); - out.value(o.getLength()); - } - - if (o.hasLineColumn()) { - out.name("begin"); - out.beginArray(); - out.value(o.getBeginLine()); - out.value(o.getBeginColumn()); - out.endArray(); - - out.name("end"); - out.beginArray(); - out.value(o.getEndLine()); - out.value(o.getEndColumn()); - out.endArray(); - } - - out.endObject(); - } - else { - if (!o.hasOffsetLength()) { - if ("file".equals(o.getScheme())) { - out.value(o.getPath()); - } - else { - out.value(o.getURI().toASCIIString()); - } - } - else { - out.value(o.toString()); - } - } - - return null; - } - - @Override - public Void visitTuple(ITuple o) throws IOException { - out.beginArray(); - for (IValue v : o) { - v.accept(this); - } - out.endArray(); - return null; - } - - @Override - public Void visitNode(INode o) throws IOException { - out.beginObject(); - out.name("_name"); - out.value(o.getName()); - - int i = 0; - for (IValue arg : o) { - out.name("arg" + i++); - arg.accept(this); + + public JsonValueWriter setFormatters(@Nullable IFunction formatters) { + if (formatters != null && formatters.getType().getFieldType(0).isTop()) { + // ignore default function + formatters = null; } - Map parameters = o.asWithKeywordParameters().getParameters(); + this.formatters = formatters; + return this; + } - String originKey = parameters.containsKey("rascal-src") ? "rascal-src" : "src"; - - for (Entry e : parameters.entrySet()) { - if (dropOrigins && e.getKey().equals(originKey)) { - continue; - } + public JsonValueWriter setExplicitConstructorNames(boolean setting) { + this.explicitConstructorNames = setting; + return this; + } - out.name(e.getKey()); - e.getValue().accept(this); - } - out.endObject(); - - return null; - } - - @Override - public Void visitConstructor(IConstructor o) throws IOException { - if (UtilMaybe.isMaybe(o.getType())) { - if (UtilMaybe.isNothing(o)) { - out.nullValue(); - } - else { - o.get(0).accept(this); - } - } - - if (formatters != null) { - try { - var formatted = formatters.call(o); - if (formatted != null) { - visitString((IString) formatted); - return null; + public JsonValueWriter setExplicitDataTypes(boolean setting) { + this.explicitDataTypes = setting; + return this; + } + + public void write(JsonWriter out, IValue value) throws IOException { + value.accept(new IValueVisitor() { + + @Override + public Void visitString(IString o) throws IOException { + out.value(o.getValue()); + return null; } - } - catch (Throw x) { - // it happens - } - } - if (!explicitConstructorNames && !explicitDataTypes && o.getConstructorType().getArity() == 0 && !o.asWithKeywordParameters().hasParameters()) { - // enums! - out.value(o.getName()); - return null; - } - out.beginObject(); + @Override + public Void visitReal(IReal o) throws IOException { + wrapper.wrapped = o; + out.value(wrapper); + return null; + } - if (explicitConstructorNames || explicitDataTypes) { - out.name("_constructor"); - out.value(o.getName()); - } + @Override + public Void visitRational(IRational o) throws IOException { + out.beginArray(); + o.numerator().accept(this); + o.denominator().accept(this); + out.endArray(); - if (explicitDataTypes) { - out.name("_type"); - out.value(o.getType().getName()); - } + return null; + } - int i = 0; - for (IValue arg : o) { - out.name(o.getConstructorType().getFieldName(i)); - arg.accept(this); - i++; - } - for (Entry e : o.asWithKeywordParameters().getParameters().entrySet()) { - out.name(e.getKey()); - e.getValue().accept(this); - } - out.endObject(); - - return null; - } - - @Override - public Void visitInteger(IInteger o) throws IOException { - wrapper.wrapped = o; - out.value(wrapper); - return null; - } - - @Override - public Void visitMap(IMap o) throws IOException { - if (o.isEmpty()) { - out.beginObject(); - out.endObject(); - } - else if (o.getKeyType().isString()) { - out.beginObject(); - for (IValue key : o) { - out.name(((IString) key).getValue()); - o.get(key).accept(this); - } - out.endObject(); - } - else if (o.getKeyType().isSourceLocation() && !unpackedLocations) { - out.beginObject(); - for (IValue key : o) { - ISourceLocation l = (ISourceLocation) key; - - if (!l.hasOffsetLength()) { - if ("file".equals(l.getScheme())) { - out.name(l.getPath()); - } - else { - out.name(l.getURI().toASCIIString()); - } + @Override + public Void visitList(IList o) throws IOException { + out.beginArray(); + for (IValue v : o) { + v.accept(this); + } + out.endArray(); + return null; } - else { - out.name(l.toString()); + + @Override + public Void visitSet(ISet o) throws IOException { + out.beginArray(); + for (IValue v : o) { + v.accept(this); + } + out.endArray(); + return null; } - o.get(key).accept(this); - } - out.endObject(); - } - else { - out.beginArray(); - for (IValue key : o) { - out.beginArray(); - key.accept(this); - o.get(key).accept(this); - out.endArray(); - } - out.endArray(); - } - - return null; - } - - @Override - public Void visitBoolean(IBool boolValue) throws IOException { - out.value(boolValue.getValue()); - return null; - } - - @Override - public Void visitExternal(IExternalValue externalValue) throws IOException { - throw new IOException("External values are not supported by JSon serialisation yet"); - } - - @Override - public Void visitDateTime(IDateTime o) throws IOException { - if (datesAsInts) { - out.value(o.getInstant()); - } - else { - try { - com.ibm.icu.text.SimpleDateFormat sd = format.get(); - com.ibm.icu.util.Calendar cal = Prelude.getCalendarForDateTime(o); - sd.setCalendar(cal); - out.value(sd.format(cal.getTime())); - } catch (IllegalArgumentException iae) { - throw RuntimeExceptionFactory.dateTimePrintingError("Cannot print datetime " + o + " using format string: " + format.get()); - } - } - return null; - } - }); + @Override + public Void visitSourceLocation(ISourceLocation o) throws IOException { + if (unpackedLocations) { + out.beginObject(); + + out.name("scheme"); + out.value(o.getScheme()); + + out.name("authority"); + out.value(o.getAuthority()); + + out.name("path"); + out.value(o.getPath()); + + if (!o.getFragment().isEmpty()) { + out.name("fragment"); + out.value(o.getFragment()); + } + + if (!o.getQuery().isEmpty()) { + out.name("query"); + out.value(o.getQuery()); + } + + if (o.hasOffsetLength()) { + out.name("offset"); + out.value(o.getOffset()); + out.name("length"); + out.value(o.getLength()); + } + + if (o.hasLineColumn()) { + out.name("begin"); + out.beginArray(); + out.value(o.getBeginLine()); + out.value(o.getBeginColumn()); + out.endArray(); + + out.name("end"); + out.beginArray(); + out.value(o.getEndLine()); + out.value(o.getEndColumn()); + out.endArray(); + } + + out.endObject(); + } + else { + if (!o.hasOffsetLength()) { + if ("file".equals(o.getScheme())) { + out.value(o.getPath()); + } + else { + out.value(o.getURI().toASCIIString()); + } + } + else { + out.value(o.toString()); + } + } + + return null; + } + + @Override + public Void visitTuple(ITuple o) throws IOException { + out.beginArray(); + for (IValue v : o) { + v.accept(this); + } + out.endArray(); + return null; + } + + @Override + public Void visitNode(INode o) throws IOException { + out.beginObject(); + out.name("_name"); + out.value(o.getName()); + + int i = 0; + for (IValue arg : o) { + out.name("arg" + i++); + arg.accept(this); + } + + Map parameters = o.asWithKeywordParameters().getParameters(); + + String originKey = parameters.containsKey("rascal-src") ? "rascal-src" : "src"; + + for (Entry e : parameters.entrySet()) { + if (dropOrigins && e.getKey().equals(originKey)) { + continue; + } + + out.name(e.getKey()); + e.getValue().accept(this); + } + out.endObject(); + + return null; + } + + @Override + public Void visitConstructor(IConstructor o) throws IOException { + if (UtilMaybe.isMaybe(o.getType())) { + if (UtilMaybe.isNothing(o)) { + out.nullValue(); + } + else { + o.get(0).accept(this); + } + } + + if (formatters != null) { + try { + var formatted = formatters.call(o); + if (formatted != null) { + visitString((IString) formatted); + return null; + } + } + catch (Throw x) { + // it happens + } + } + if (!explicitConstructorNames && !explicitDataTypes && o.getConstructorType().getArity() == 0 + && !o.asWithKeywordParameters().hasParameters()) { + // enums! + out.value(o.getName()); + return null; + } + + out.beginObject(); + + if (explicitConstructorNames || explicitDataTypes) { + out.name("_constructor"); + out.value(o.getName()); + } + + if (explicitDataTypes) { + out.name("_type"); + out.value(o.getType().getName()); + } + + int i = 0; + for (IValue arg : o) { + out.name(o.getConstructorType().getFieldName(i)); + arg.accept(this); + i++; + } + for (Entry e : o.asWithKeywordParameters().getParameters().entrySet()) { + out.name(e.getKey()); + e.getValue().accept(this); + } + out.endObject(); + + return null; + } + + @Override + public Void visitInteger(IInteger o) throws IOException { + wrapper.wrapped = o; + out.value(wrapper); + return null; + } + + @Override + public Void visitMap(IMap o) throws IOException { + if (o.isEmpty()) { + out.beginObject(); + out.endObject(); + } + else if (o.getKeyType().isString()) { + out.beginObject(); + for (IValue key : o) { + out.name(((IString) key).getValue()); + o.get(key).accept(this); + } + out.endObject(); + } + else if (o.getKeyType().isSourceLocation() && !unpackedLocations) { + out.beginObject(); + for (IValue key : o) { + ISourceLocation l = (ISourceLocation) key; + + if (!l.hasOffsetLength()) { + if ("file".equals(l.getScheme())) { + out.name(l.getPath()); + } + else { + out.name(l.getURI().toASCIIString()); + } + } + else { + out.name(l.toString()); + } + + o.get(key).accept(this); + } + out.endObject(); + } + else { + out.beginArray(); + for (IValue key : o) { + out.beginArray(); + key.accept(this); + o.get(key).accept(this); + out.endArray(); + } + out.endArray(); + } + + return null; + } + + @Override + public Void visitBoolean(IBool boolValue) throws IOException { + out.value(boolValue.getValue()); + return null; + } + + @Override + public Void visitExternal(IExternalValue externalValue) throws IOException { + throw new IOException("External values are not supported by JSon serialisation yet"); + } + + @Override + public Void visitDateTime(IDateTime o) throws IOException { + if (datesAsInts) { + out.value(o.getInstant()); + } + else { + try { + com.ibm.icu.text.SimpleDateFormat sd = format.get(); + com.ibm.icu.util.Calendar cal = Prelude.getCalendarForDateTime(o); + sd.setCalendar(cal); + out.value(sd.format(cal.getTime())); + } + catch (IllegalArgumentException iae) { + throw RuntimeExceptionFactory.dateTimePrintingError( + "Cannot print datetime " + o + " using format string: " + format.get()); + } + } + return null; + } + }); } -} \ No newline at end of file +} From be7b31b46e67db485b8e78ff719e44f02cd19e31 Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Wed, 8 Jan 2025 09:25:53 +0100 Subject: [PATCH 160/191] fixed trainwrecks --- src/org/rascalmpl/library/lang/json/IO.java | 33 ++++++++++++++------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/src/org/rascalmpl/library/lang/json/IO.java b/src/org/rascalmpl/library/lang/json/IO.java index 696dbfb6033..55f1f991d8d 100644 --- a/src/org/rascalmpl/library/lang/json/IO.java +++ b/src/org/rascalmpl/library/lang/json/IO.java @@ -65,7 +65,9 @@ public IValue readJSON(IValue type, ISourceLocation loc, IString dateTimeFormat, try (JsonReader in = new JsonReader(URIResolverRegistry.getInstance().getCharacterReader(loc))) { in.setLenient(lenient.getValue()); return new JsonValueReader(values, store, monitor, trackOrigins.getValue() ? loc : null) - .setCalendarFormat(dateTimeFormat.getValue()).setParsers(parsers).setNulls(unreify(nulls)) + .setCalendarFormat(dateTimeFormat.getValue()) + .setParsers(parsers) + .setNulls(unreify(nulls)) .setExplicitConstructorNames(explicitConstructorNames.getValue()) .setExplicitDataTypes(explicitDataTypes.getValue()).read(in, start); } @@ -92,7 +94,9 @@ public IValue parseJSON(IValue type, IString src, IString dateTimeFormat, IBool in.setLenient(lenient.getValue()); return new JsonValueReader(values, store, monitor, trackOrigins.getValue() ? URIUtil.rootLocation("unknown") : null) - .setCalendarFormat(dateTimeFormat.getValue()).setParsers(parsers).setNulls(unreify(nulls)) + .setCalendarFormat(dateTimeFormat.getValue()) + .setParsers(parsers) + .setNulls(unreify(nulls)) .setExplicitConstructorNames(explicitConstructorNames.getValue()) .setExplicitDataTypes(explicitDataTypes.getValue()).read(in, start); } @@ -114,10 +118,15 @@ public void writeJSON(ISourceLocation loc, IValue value, IBool unpackedLocations out.setIndent(" ".substring(0, indent.intValue() % 9)); } - new JsonValueWriter().setCalendarFormat(dateTimeFormat.getValue()).setDatesAsInt(dateTimeAsInt.getValue()) - .setUnpackedLocations(unpackedLocations.getValue()).setDropOrigins(dropOrigins.getValue()) - .setFormatters(formatter).setExplicitConstructorNames(explicitConstructorNames.getValue()) - .setExplicitDataTypes(explicitDataTypes.getValue()).write(out, value); + new JsonValueWriter() + .setCalendarFormat(dateTimeFormat.getValue()) + .setDatesAsInt(dateTimeAsInt.getValue()) + .setUnpackedLocations(unpackedLocations.getValue()) + .setDropOrigins(dropOrigins.getValue()) + .setFormatters(formatter) + .setExplicitConstructorNames(explicitConstructorNames.getValue()) + .setExplicitDataTypes(explicitDataTypes.getValue()) + .write(out, value); } catch (IOException e) { throw RuntimeExceptionFactory.io(values.string(e.getMessage()), null, null); @@ -133,10 +142,14 @@ public IString asJSON(IValue value, IBool unpackedLocations, IString dateTimeFor if (indent.intValue() > 0) { out.setIndent(" ".substring(0, indent.intValue() % 9)); } - new JsonValueWriter().setCalendarFormat(dateTimeFormat.getValue()).setDatesAsInt(dateTimeAsInt.getValue()) - .setUnpackedLocations(unpackedLocations.getValue()).setDropOrigins(dropOrigins.getValue()) - .setFormatters(formatter).setExplicitConstructorNames(explicitConstructorNames.getValue()) - .setExplicitDataTypes(explicitDataTypes.getValue()).write(out, value); + new JsonValueWriter().setCalendarFormat(dateTimeFormat.getValue()) + .setDatesAsInt(dateTimeAsInt.getValue()) + .setUnpackedLocations(unpackedLocations.getValue()) + .setDropOrigins(dropOrigins.getValue()) + .setFormatters(formatter) + .setExplicitConstructorNames(explicitConstructorNames.getValue()) + .setExplicitDataTypes(explicitDataTypes.getValue()) + .write(out, value); return values.string(string.toString()); } From 48ef6f57849eb911fbf4db01d3252664c731c11d Mon Sep 17 00:00:00 2001 From: Davy Landman Date: Wed, 8 Jan 2025 09:30:07 +0100 Subject: [PATCH 161/191] Create .git-blame-ignore-revs to help git blame We should go through our history and identify more commits that only fix spaces & tabs on a large whole file base. --- .git-blame-ignore-revs | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 .git-blame-ignore-revs diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs new file mode 100644 index 00000000000..933e3bb46e1 --- /dev/null +++ b/.git-blame-ignore-revs @@ -0,0 +1,12 @@ +# List of commits that shouldn't be included in `git blame`. +# Github and other tools already support it if it's this exact filename +# But you have to teach your own git about this by running this command (in this repo) +# git config blame.ignoreRevsFile .git-blame-ignore-revs + +# indent fix for JSON +31b1031ade5d84f9c60e30d17da3b55e78d291fb + +# fixing tabs & spaces mixed +0d048e15683740b5c944be5333ec0680df825e47 +23ec4b622bbe503ef013be5a458e45ae6fd89b97 +200b0352084be9435c64aa60c550edd24a59131b From e0bfa4db3cc69849f02c844af2aaf23d42647c6c Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Wed, 8 Jan 2025 09:55:57 +0100 Subject: [PATCH 162/191] let positioned arg names start with __ because the random name generator will never come up with names that start with _ --- src/org/rascalmpl/library/lang/json/IO.java | 9 ++++++--- .../library/lang/json/internal/JsonValueReader.java | 2 +- .../library/lang/json/internal/JsonValueWriter.java | 2 +- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/org/rascalmpl/library/lang/json/IO.java b/src/org/rascalmpl/library/lang/json/IO.java index 55f1f991d8d..e3e5dbc1d6f 100644 --- a/src/org/rascalmpl/library/lang/json/IO.java +++ b/src/org/rascalmpl/library/lang/json/IO.java @@ -69,7 +69,8 @@ public IValue readJSON(IValue type, ISourceLocation loc, IString dateTimeFormat, .setParsers(parsers) .setNulls(unreify(nulls)) .setExplicitConstructorNames(explicitConstructorNames.getValue()) - .setExplicitDataTypes(explicitDataTypes.getValue()).read(in, start); + .setExplicitDataTypes(explicitDataTypes.getValue()) + .read(in, start); } catch (IOException e) { throw RuntimeExceptionFactory.io(values.string(e.getMessage()), null, null); @@ -98,7 +99,8 @@ public IValue parseJSON(IValue type, IString src, IString dateTimeFormat, IBool .setParsers(parsers) .setNulls(unreify(nulls)) .setExplicitConstructorNames(explicitConstructorNames.getValue()) - .setExplicitDataTypes(explicitDataTypes.getValue()).read(in, start); + .setExplicitDataTypes(explicitDataTypes.getValue()) + .read(in, start); } catch (IOException e) { throw RuntimeExceptionFactory.io(values.string(e.getMessage())); @@ -142,7 +144,8 @@ public IString asJSON(IValue value, IBool unpackedLocations, IString dateTimeFor if (indent.intValue() > 0) { out.setIndent(" ".substring(0, indent.intValue() % 9)); } - new JsonValueWriter().setCalendarFormat(dateTimeFormat.getValue()) + new JsonValueWriter() + .setCalendarFormat(dateTimeFormat.getValue()) .setDatesAsInt(dateTimeAsInt.getValue()) .setUnpackedLocations(unpackedLocations.getValue()) .setDropOrigins(dropOrigins.getValue()) diff --git a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java index fbd0a0cd7b5..f33a87762f3 100644 --- a/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java +++ b/src/org/rascalmpl/library/lang/json/internal/JsonValueReader.java @@ -750,7 +750,7 @@ public IValue visitNode(Type type) throws IOException { continue; } - boolean positioned = kwName.startsWith("arg"); + boolean positioned = kwName.startsWith("__arg"); if (!isNull()) { // lookahead for null to give default parameters the preference. IValue val = TF.valueType().accept(this); diff --git a/src/org/rascalmpl/library/lang/json/internal/JsonValueWriter.java b/src/org/rascalmpl/library/lang/json/internal/JsonValueWriter.java index 6c8c273c541..92e7e230b17 100644 --- a/src/org/rascalmpl/library/lang/json/internal/JsonValueWriter.java +++ b/src/org/rascalmpl/library/lang/json/internal/JsonValueWriter.java @@ -285,7 +285,7 @@ public Void visitNode(INode o) throws IOException { int i = 0; for (IValue arg : o) { - out.name("arg" + i++); + out.name("__arg" + i++); arg.accept(this); } From 7da84cf250005a8cb3336d2da1b002a82b06a0ae Mon Sep 17 00:00:00 2001 From: Davy Landman Date: Wed, 8 Jan 2025 10:41:34 +0100 Subject: [PATCH 163/191] Reducing memory needed for the tests This avoids the arm runner crashing without any perf loss. --- .github/workflows/build.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 9bfb3c6889c..1eff4e9cad0 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -150,7 +150,7 @@ jobs: - name: Run Tests # single quotes to help windows deal with argument splitting - run: mvn -B '-Drascal.compile.skip' '-Drascal.tutor.skip' '-Drascal.test.memory=3' test + run: mvn -B '-Drascal.compile.skip' '-Drascal.tutor.skip' '-Drascal.test.memory=2' test - uses: codecov/codecov-action@v4 continue-on-error: true # sometimes this one fails, that shouldn't stop a build From 7d2d5465c481bc47c7bdaafe9c5c799b867b707c Mon Sep 17 00:00:00 2001 From: Davy Landman Date: Thu, 9 Jan 2025 20:35:31 +0100 Subject: [PATCH 164/191] Implemented parse error reporting by highlighting the error in the REPL input --- .../lang/json/internal/JsonValueWriter.java | 2 +- .../repl/rascal/IRascalLanguageProtocol.java | 8 +- .../repl/rascal/ParseErrorPrinter.java | 181 ++++++++++++++++++ .../repl/rascal/RascalInterpreterREPL.java | 19 +- .../repl/rascal/RascalLineParser.java | 14 +- .../repl/rascal/RascalReplServices.java | 10 +- .../rascalmpl/test/repl/JlineParserTest.java | 2 + 7 files changed, 221 insertions(+), 15 deletions(-) create mode 100644 src/org/rascalmpl/repl/rascal/ParseErrorPrinter.java diff --git a/src/org/rascalmpl/library/lang/json/internal/JsonValueWriter.java b/src/org/rascalmpl/library/lang/json/internal/JsonValueWriter.java index 92e7e230b17..02c91578e0d 100644 --- a/src/org/rascalmpl/library/lang/json/internal/JsonValueWriter.java +++ b/src/org/rascalmpl/library/lang/json/internal/JsonValueWriter.java @@ -26,6 +26,7 @@ import java.util.Map; import java.util.Map.Entry; +import org.checkerframework.checker.nullness.qual.Nullable; import org.rascalmpl.exceptions.RuntimeExceptionFactory; import org.rascalmpl.exceptions.Throw; import org.rascalmpl.library.Prelude; @@ -52,7 +53,6 @@ import io.usethesource.vallang.ITuple; import io.usethesource.vallang.IValue; import io.usethesource.vallang.visitors.IValueVisitor; -import jline.internal.Nullable; /** * This class streams an IValue directly to an JSON stream. Useful to communicate IValues to diff --git a/src/org/rascalmpl/repl/rascal/IRascalLanguageProtocol.java b/src/org/rascalmpl/repl/rascal/IRascalLanguageProtocol.java index bb42d8ce1fa..f38e0e41b00 100644 --- a/src/org/rascalmpl/repl/rascal/IRascalLanguageProtocol.java +++ b/src/org/rascalmpl/repl/rascal/IRascalLanguageProtocol.java @@ -30,9 +30,12 @@ import org.jline.terminal.Terminal; import org.rascalmpl.debug.IRascalMonitor; +import org.rascalmpl.parser.gtd.exception.ParseError; import org.rascalmpl.repl.output.ICommandOutput; import org.rascalmpl.values.parsetrees.ITree; +import io.usethesource.vallang.ISourceLocation; + public interface IRascalLanguageProtocol { @@ -57,8 +60,9 @@ public interface IRascalLanguageProtocol { * After a command has succesfully parsed, this function is called to execute the command * @param command command entered. * @throws InterruptedException throw this exception to stop the REPL (instead of calling .stop()) + * @throws ParseError handle parse error of the input command */ - ICommandOutput handleInput(String command) throws InterruptedException; + ICommandOutput handleInput(String command) throws InterruptedException, ParseError; /** * This method gets called from another thread, and indicates the user pressed CTLR-C during a call to handleInput. @@ -97,4 +101,6 @@ public interface IRascalLanguageProtocol { * @return map from command line option to description of it */ Map availableCommandLineOptions(); + + ISourceLocation promptRootLocation(); } diff --git a/src/org/rascalmpl/repl/rascal/ParseErrorPrinter.java b/src/org/rascalmpl/repl/rascal/ParseErrorPrinter.java new file mode 100644 index 00000000000..b1ca9a1bc0e --- /dev/null +++ b/src/org/rascalmpl/repl/rascal/ParseErrorPrinter.java @@ -0,0 +1,181 @@ +package org.rascalmpl.repl.rascal; + + +import java.io.PrintWriter; +import java.util.List; +import java.util.ArrayList; + +import org.jline.jansi.Ansi; +import org.jline.jansi.Ansi.Attribute; +import org.rascalmpl.interpreter.utils.ReadEvalPrintDialogMessages; +import org.rascalmpl.parser.gtd.exception.ParseError; +import org.rascalmpl.repl.output.IAnsiCommandOutput; +import org.rascalmpl.repl.output.ICommandOutput; +import org.rascalmpl.repl.output.IErrorCommandOutput; +import org.rascalmpl.repl.output.IOutputPrinter; +import org.rascalmpl.repl.output.MimeTypes; +import org.rascalmpl.repl.output.impl.AsciiStringOutputPrinter; + +import io.usethesource.vallang.ISourceLocation; +import io.usethesource.vallang.io.StandardTextWriter; + +public class ParseErrorPrinter { + + public static IErrorCommandOutput parseErrorMaybePrompt(ParseError pe, ISourceLocation promptRoot, String input, PrintWriter stdOut, boolean ansiSupported, int promptOffset) { + if (pe.getLocation().top().equals(promptRoot) && ansiSupported) { + // it's an prompt root + return buildPromptError(pe, input, stdOut, promptOffset); + } + return new IErrorCommandOutput() { + @Override + public ICommandOutput getError() { + return new ICommandOutput() { + @Override + public IOutputPrinter asPlain() { + return defaultPrinter(pe, promptRoot, input); + } + }; + } + @Override + public IOutputPrinter asPlain() { + return defaultPrinter(pe, promptRoot, input); + } + + }; + } + + private static IOutputPrinter defaultPrinter(ParseError pe, ISourceLocation promptRoot, String input) { + return new IOutputPrinter() { + @Override + public void write(PrintWriter target, boolean unicodeSupported) { + ReadEvalPrintDialogMessages.parseErrorMessage(target, input, promptRoot.getScheme(), pe, new StandardTextWriter(true)); + } + @Override + public String mimeType() { + return MimeTypes.PLAIN_TEXT; + } + }; + } + private static void writeUnderLine(PrintWriter out, int column, String line) { + writeUnderLine(out, column, line, 0, line.length()); + } + + private static void writeUnderLine(PrintWriter out, int column, String line, int offset, int length) { + var ansi = Ansi.ansi(); + if (column >= 0) { + ansi = ansi.cursorToColumn(column); + } + out.write(ansi + .reset() + .fgRed() + .bold() + .a(Attribute.UNDERLINE) + .a(line, offset, offset + length) + .reset() + .toString() + ); + } + + private static IErrorCommandOutput buildPromptError(ParseError pe, String input, PrintWriter stdOut, int promptOffset) { + // we know we support ansi, so let's rewrite the input for the parts where the error is + highlightErrorInInput(pe, input, stdOut, promptOffset); + + + return new IErrorCommandOutput() { + @Override + public ICommandOutput getError() { + return new IAnsiCommandOutput() { + @Override + public IOutputPrinter asAnsi() { + return new IOutputPrinter() { + @Override + public void write(PrintWriter target, boolean unicodeSupported) { + target.write(unicodeSupported ? "❌ " : "! "); + target.write("There was a parse error in the input, see the "); + writeUnderLine(target, -1, "highlighted"); + target.print(" section (line: "); + target.print(pe.getBeginLine() - 1); + target.print(" column: "); + target.print(pe.getBeginColumn()); + target.println(")"); + + } + @Override + public String mimeType() { + return MimeTypes.ANSI; + } + }; + } + + @Override + public IOutputPrinter asPlain() { + return new AsciiStringOutputPrinter("! Parse error highlighted"); + } + + }; + } + @Override + public IOutputPrinter asPlain() { + return new AsciiStringOutputPrinter("! Parse error highlighted"); + } + }; + } + + /** + * Overwrite the existing prompt input, and overwrite the sections with highlighted errors + */ + private static void highlightErrorInInput(ParseError pe, String input, PrintWriter stdOut, int promptOffset) { + stdOut.write(Ansi.ansi().saveCursorPosition().cursorUpLine().toString()); + try { + var lines = properSplit(input); + int currentLine = lines.size(); + while (currentLine > pe.getEndLine()) { + stdOut.write(Ansi.ansi().cursorUpLine().toString()); + currentLine--; + } + while (currentLine >= pe.getBeginLine()) { + String thisLine = lines.get(currentLine - 1); + int offset = 0; + int endOffset = thisLine.length(); + if (pe.getBeginLine() == currentLine) { + // first line + offset = pe.getBeginColumn(); + } + if (pe.getEndLine() == currentLine) { + // last line + endOffset = pe.getEndColumn(); + } + writeUnderLine(stdOut, promptOffset + offset, thisLine, offset, endOffset - offset); + stdOut.write(Ansi.ansi().cursorUpLine().toString()); + currentLine--; + } + } + finally { + stdOut.write(Ansi.ansi().restoreCursorPosition().toString()); + } + } + + private static List properSplit(String line) { + List lines = new ArrayList<>(); + int start = 0; + int end = 0; + while (end < line.length()) { + int nextLine = line.indexOf('\n', end); + if (nextLine == -1) { + lines.add(line.substring(start)); + break; + } + else { + start = end; + end = nextLine + 1; + lines.add(line.substring(start, end - 1)); + } + } + if (end == line.length()) { + // newline at end means ended with an empty line, which would be tru in most cases + lines.add(""); + } + return lines; + } + +} diff --git a/src/org/rascalmpl/repl/rascal/RascalInterpreterREPL.java b/src/org/rascalmpl/repl/rascal/RascalInterpreterREPL.java index 4396843f5c4..170856dcd0a 100644 --- a/src/org/rascalmpl/repl/rascal/RascalInterpreterREPL.java +++ b/src/org/rascalmpl/repl/rascal/RascalInterpreterREPL.java @@ -14,6 +14,7 @@ import java.util.Objects; import java.util.function.Function; +import org.jline.jansi.Ansi; import org.jline.reader.EndOfFileException; import org.jline.terminal.Terminal; import org.rascalmpl.debug.IRascalMonitor; @@ -32,7 +33,10 @@ import org.rascalmpl.interpreter.result.Result; import org.rascalmpl.interpreter.staticErrors.StaticError; import org.rascalmpl.parser.gtd.exception.ParseError; +import org.rascalmpl.repl.output.IAnsiCommandOutput; import org.rascalmpl.repl.output.ICommandOutput; +import org.rascalmpl.repl.output.IErrorCommandOutput; +import org.rascalmpl.repl.output.IOutputPrinter; import org.rascalmpl.repl.output.IWebContentOutput; import org.rascalmpl.uri.URIUtil; import org.rascalmpl.values.ValueFactoryFactory; @@ -76,6 +80,11 @@ protected Function liftProviderFunction(IFunction func) { }; } + @Override + public ISourceLocation promptRootLocation() { + return PROMPT_LOCATION; + } + /** * Build an IDE service, in most places you want to override this function to construct a specific one for the setting you are in. * @param err @@ -117,7 +126,7 @@ public void initialize(Reader input, PrintWriter stdout, PrintWriter stderr, IRa @Override - public ICommandOutput handleInput(String command) throws InterruptedException { + public ICommandOutput handleInput(String command) throws InterruptedException, ParseError { Objects.requireNonNull(eval, "Not initialized yet"); synchronized(eval) { try { @@ -140,11 +149,6 @@ public ICommandOutput handleInput(String command) throws InterruptedException { ex.getRascalStackTrace().prettyPrintedString(w, sw); }); } - catch (ParseError pe) { - return printer.outputError((w, sw, _u) -> { - parseErrorMessage(w, command, "prompt", pe, sw); - }); - } catch (StaticError e) { return printer.outputError((w, sw, _u) -> { staticErrorMessage(w, e, sw); @@ -159,6 +163,9 @@ public ICommandOutput handleInput(String command) throws InterruptedException { throw new EndOfFileException("Quiting REPL"); } catch (Throwable e) { + if (e instanceof ParseError) { + throw e; + } return printer.outputError((w, sw, _u) -> { throwableMessage(w, e, eval.getStackTrace(), sw); }); diff --git a/src/org/rascalmpl/repl/rascal/RascalLineParser.java b/src/org/rascalmpl/repl/rascal/RascalLineParser.java index 888d9a7c465..a48efaa802e 100644 --- a/src/org/rascalmpl/repl/rascal/RascalLineParser.java +++ b/src/org/rascalmpl/repl/rascal/RascalLineParser.java @@ -31,7 +31,7 @@ public ParsedLine parse(String line, int cursor, ParseContext context) throws Sy case UNSPECIFIED: // TODO: check if this is correct case ACCEPT_LINE: // we have to verify the input is correct rascal statement - return parseFullRascalCommand(line, cursor); + return parseFullRascalCommand(line, cursor, true); case COMPLETE: // for completion purposes, we want a specific kind of grouping // so we'll use a heuristic for this. @@ -40,7 +40,7 @@ public ParsedLine parse(String line, int cursor, ParseContext context) throws Sy // parse tree, such as `:` and the `set` try { // lets see, maybe it parses as a rascal expression - return parseFullRascalCommand(line, cursor); + return parseFullRascalCommand(line, cursor, false); } catch (EOFError e) { // otherwise fallback to regex party @@ -194,7 +194,7 @@ private static int parseEndedAfter(String buffer, int position, Pattern parser) // strings with rudementary interpolation support private static final Pattern RASCAL_STRING - = Pattern.compile("^[\">]([^\"<\\\\]|([\\\\].))*[\"<]"); + = Pattern.compile("^[\">]([^\"<\\\\]|([\\\\].))*([\"<]|$)"); // locations with rudementary interpolation support private static final Pattern RASCAL_LOCATION = Pattern.compile("^[\\|\\>][^\\|\\<\\t-\\n\\r ]*[\\|\\<]?"); @@ -210,12 +210,15 @@ private int eatWhiteSpace(String buffer, int position) { return parseEndedAfter(buffer, position, RASCAL_WHITE_SPACE); } - private ParsedLine parseFullRascalCommand(String line, int cursor) throws SyntaxError { + private ParsedLine parseFullRascalCommand(String line, int cursor, boolean completeStatementMode) throws SyntaxError { // TODO: to support inline highlighting, we have to remove the ansi escapes before parsing try { return translateTree(commandParser.apply(line), line, cursor); } catch (ParseError pe) { + if (!completeStatementMode || lastLineIsBlank(line)) { + return splitWordsOnly(line, cursor); + } throw new EOFError(pe.getBeginLine(), pe.getBeginColumn(), "Parse error"); } catch (Throwable e) { @@ -223,6 +226,9 @@ private ParsedLine parseFullRascalCommand(String line, int cursor) throws Synta } } + private boolean lastLineIsBlank(String line) { + return line.endsWith("\n"); + } private ParsedLine translateTree(ITree command, String line, int cursor) { // todo: return CompletingParsedLine so that we can also help with quoting completion diff --git a/src/org/rascalmpl/repl/rascal/RascalReplServices.java b/src/org/rascalmpl/repl/rascal/RascalReplServices.java index 0d910f5d0ed..091f0caafb3 100644 --- a/src/org/rascalmpl/repl/rascal/RascalReplServices.java +++ b/src/org/rascalmpl/repl/rascal/RascalReplServices.java @@ -12,6 +12,7 @@ import org.jline.reader.Completer; import org.jline.reader.Parser; import org.jline.terminal.Terminal; +import org.rascalmpl.parser.gtd.exception.ParseError; import org.rascalmpl.repl.IREPLService; import org.rascalmpl.repl.TerminalProgressBarMonitor; import org.rascalmpl.repl.completers.RascalCommandCompletion; @@ -58,7 +59,9 @@ private void printOutput(ICommandOutput cmd) { if (cmd instanceof IAnsiCommandOutput && ansiSupported) { ((IAnsiCommandOutput)cmd).asAnsi().write(err, unicodeSupported); } - cmd.asPlain().write(err, unicodeSupported); + else { + cmd.asPlain().write(err, unicodeSupported); + } } public void disconnect() { @@ -88,14 +91,15 @@ public ICommandOutput handleInput(String input) throws InterruptedException { in.startStreamMonitoring(); return lang.handleInput(input); } + catch (ParseError pe) { + return ParseErrorPrinter.parseErrorMaybePrompt(pe, lang.promptRootLocation(), input, out, ansiSupported, prompt(false, unicodeSupported).length() + 1); + } finally { in.pauseStreamMonitoring(); } } - - @Override public void handleInterrupt() throws InterruptedException { lang.cancelRunningCommandRequested(); diff --git a/test/org/rascalmpl/test/repl/JlineParserTest.java b/test/org/rascalmpl/test/repl/JlineParserTest.java index 392c0e3c712..1b3e9ee9a02 100644 --- a/test/org/rascalmpl/test/repl/JlineParserTest.java +++ b/test/org/rascalmpl/test/repl/JlineParserTest.java @@ -36,6 +36,8 @@ public void stringsAreNotParsedAsWords() { assertEquals("\"long string with multiple spaces\"", completeParser("\"long string with multiple spaces\"",11).word()); assertEquals("\"long string with multiple spaces\"", completeParser("\"long string with multiple spaces\"").word()); assertEquals(2, completeParser("x = \"long string with multiple spaces\";").words().size()); + assertEquals(1, completeParser("\"never terminated").words().size()); + assertEquals(1, completeParser("\"long string \nthat is never ended\nbut has newlines").words().size()); } @Test From 51434a3569d93844b9f48d0fc968f17a048a8452 Mon Sep 17 00:00:00 2001 From: Davy Landman Date: Fri, 10 Jan 2025 10:12:07 +0100 Subject: [PATCH 165/191] Removing input stream reader as it breaks copy and paste --- .vscode/launch.json | 5 +- src/org/rascalmpl/repl/BaseREPL.java | 7 +- .../repl/rascal/RascalInterpreterREPL.java | 5 - .../repl/rascal/RascalReplServices.java | 72 +++++------ .../rascal/RascalSpecificSignalsReader.java | 116 ------------------ 5 files changed, 39 insertions(+), 166 deletions(-) delete mode 100644 src/org/rascalmpl/repl/rascal/RascalSpecificSignalsReader.java diff --git a/.vscode/launch.json b/.vscode/launch.json index 20390c331e2..e5fb91aec1a 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -30,7 +30,8 @@ "request": "launch", "mainClass": "org.rascalmpl.shell.RascalShell", "projectName": "rascal", - "vmArgs": "-Xss80m -Xmx2g -ea" + "vmArgs": "-Xss80m -Xmx2g -ea", + "console": "integratedTerminal" }, { "type": "java", @@ -47,7 +48,7 @@ "request": "attach", "projectName": "rascal", "hostName": "localhost", - "port": 9213 + "port": 9001 }, { "type": "java", diff --git a/src/org/rascalmpl/repl/BaseREPL.java b/src/org/rascalmpl/repl/BaseREPL.java index 28b4e2e9500..75be5cedd31 100644 --- a/src/org/rascalmpl/repl/BaseREPL.java +++ b/src/org/rascalmpl/repl/BaseREPL.java @@ -66,12 +66,11 @@ public BaseREPL(IREPLService replService, Terminal term) { this.reader = reader.build(); - // todo: + // FUTURE features: + // - CTRL+\ to print the stacktrace while running // - highlighting in the prompt? (future work, as it also hurts other parts) // - measure time - // - possible to tee output (future work) - // - check if the REPL close properly closes the right streams - // - fix progress bar speed & proper recovering from intermediate prints + // - possible to tee output } public void run() throws IOException { diff --git a/src/org/rascalmpl/repl/rascal/RascalInterpreterREPL.java b/src/org/rascalmpl/repl/rascal/RascalInterpreterREPL.java index 170856dcd0a..2a74b30657c 100644 --- a/src/org/rascalmpl/repl/rascal/RascalInterpreterREPL.java +++ b/src/org/rascalmpl/repl/rascal/RascalInterpreterREPL.java @@ -1,7 +1,6 @@ package org.rascalmpl.repl.rascal; -import static org.rascalmpl.interpreter.utils.ReadEvalPrintDialogMessages.parseErrorMessage; import static org.rascalmpl.interpreter.utils.ReadEvalPrintDialogMessages.staticErrorMessage; import static org.rascalmpl.interpreter.utils.ReadEvalPrintDialogMessages.throwMessage; import static org.rascalmpl.interpreter.utils.ReadEvalPrintDialogMessages.throwableMessage; @@ -14,7 +13,6 @@ import java.util.Objects; import java.util.function.Function; -import org.jline.jansi.Ansi; import org.jline.reader.EndOfFileException; import org.jline.terminal.Terminal; import org.rascalmpl.debug.IRascalMonitor; @@ -33,10 +31,7 @@ import org.rascalmpl.interpreter.result.Result; import org.rascalmpl.interpreter.staticErrors.StaticError; import org.rascalmpl.parser.gtd.exception.ParseError; -import org.rascalmpl.repl.output.IAnsiCommandOutput; import org.rascalmpl.repl.output.ICommandOutput; -import org.rascalmpl.repl.output.IErrorCommandOutput; -import org.rascalmpl.repl.output.IOutputPrinter; import org.rascalmpl.repl.output.IWebContentOutput; import org.rascalmpl.uri.URIUtil; import org.rascalmpl.values.ValueFactoryFactory; diff --git a/src/org/rascalmpl/repl/rascal/RascalReplServices.java b/src/org/rascalmpl/repl/rascal/RascalReplServices.java index 091f0caafb3..89261b4c1c6 100644 --- a/src/org/rascalmpl/repl/rascal/RascalReplServices.java +++ b/src/org/rascalmpl/repl/rascal/RascalReplServices.java @@ -1,6 +1,5 @@ package org.rascalmpl.repl.rascal; -import java.io.IOException; import java.io.PrintWriter; import java.nio.file.Path; import java.util.ArrayList; @@ -20,7 +19,6 @@ import org.rascalmpl.repl.completers.RascalKeywordCompletion; import org.rascalmpl.repl.completers.RascalLocationCompletion; import org.rascalmpl.repl.completers.RascalModuleCompletion; -import org.rascalmpl.repl.output.IAnsiCommandOutput; import org.rascalmpl.repl.output.ICommandOutput; import org.rascalmpl.repl.streams.StreamUtil; @@ -30,7 +28,6 @@ public class RascalReplServices implements IREPLService { private boolean unicodeSupported = false; private boolean ansiSupported = false; - private RascalSpecificSignalsReader in; private PrintWriter out; private PrintWriter err; @@ -51,27 +48,10 @@ public void connect(Terminal term, boolean ansiColorsSupported, boolean unicodeS var monitor = new TerminalProgressBarMonitor(term); out = monitor; err = StreamUtil.generateErrorStream(term, monitor); - in = new RascalSpecificSignalsReader(term, lang, this::printOutput); - lang.initialize(in, out, err, monitor, term); + lang.initialize(term.reader(), out, err, monitor, term); } - private void printOutput(ICommandOutput cmd) { - if (cmd instanceof IAnsiCommandOutput && ansiSupported) { - ((IAnsiCommandOutput)cmd).asAnsi().write(err, unicodeSupported); - } - else { - cmd.asPlain().write(err, unicodeSupported); - } - } - public void disconnect() { - if (in != null) { - try { - in.close(); - } - catch (IOException e) { - } - } if (err != null) { err.close(); } @@ -88,15 +68,11 @@ public Parser inputParser() { @Override public ICommandOutput handleInput(String input) throws InterruptedException { try { - in.startStreamMonitoring(); return lang.handleInput(input); } catch (ParseError pe) { return ParseErrorPrinter.parseErrorMaybePrompt(pe, lang.promptRootLocation(), input, out, ansiSupported, prompt(false, unicodeSupported).length() + 1); } - finally { - in.pauseStreamMonitoring(); - } } @@ -107,22 +83,51 @@ public void handleInterrupt() throws InterruptedException { @Override public String prompt(boolean ansiColorsSupported, boolean unicodeSupported) { + String prompt = "rascal>"; if (ansiColorsSupported) { - return Ansi.ansi().reset().bold() + "rascal>" + Ansi.ansi().reset(); + return Ansi.ansi() + .reset() + .bold() + .a(prompt) + .reset() + .toString(); } - return "rascal>"; + return prompt; } @Override public String parseErrorPrompt(boolean ansiColorsSupported, boolean unicodeSupported) { String errorPrompt = (unicodeSupported ? "│" : "|") + "%N %P>"; if (ansiColorsSupported) { - return Ansi.ansi().reset().bold() + errorPrompt + Ansi.ansi().reset(); + return Ansi.ansi() + .reset() + .bold() + .a(errorPrompt) + .reset() + .toString(); } return errorPrompt; } + @Override + public String interruptedPrompt(boolean ansiColorsSupported, boolean unicodeSupported) { + String prompt = ">>>>>>> Interrupted"; + if (unicodeSupported) { + prompt = prompt.replace(">", "»"); + } + if (ansiColorsSupported) { + return Ansi.ansi() + .reset() + .fgRed() + .bold() + .a(prompt) + .reset() + .toString(); + } + return prompt; + } + @Override public PrintWriter errorWriter() { return err; @@ -163,17 +168,6 @@ public List completers() { return result; } - @Override - public String interruptedPrompt(boolean ansiColorsSupported, boolean unicodeSupported) { - String prompt = ">>>>>>> Interrupted"; - if (unicodeSupported) { - prompt = prompt.replace(">", "»"); - } - if (ansiColorsSupported) { - prompt = Ansi.ansi().reset().fgRed().bold() + prompt + Ansi.ansi().reset(); - } - return prompt; - } @Override public boolean storeHistory() { diff --git a/src/org/rascalmpl/repl/rascal/RascalSpecificSignalsReader.java b/src/org/rascalmpl/repl/rascal/RascalSpecificSignalsReader.java deleted file mode 100644 index 6ea109a0eda..00000000000 --- a/src/org/rascalmpl/repl/rascal/RascalSpecificSignalsReader.java +++ /dev/null @@ -1,116 +0,0 @@ -package org.rascalmpl.repl.rascal; - -import java.io.IOException; -import java.io.Reader; -import java.util.function.Consumer; - -import org.jline.terminal.Terminal; -import org.jline.utils.NonBlockingReader; -import org.rascalmpl.repl.output.ICommandOutput; - -/** - *

- * Monitor the reader stream of the terminal while a rascal command is running. - * To detect custom signals such as ctrl+\ - *

- * - *

- * The runner should use this reader to read from stdin, just to make sure it gets a lock first - * and the contents aren't lost while it's reading - *

- */ -public class RascalSpecificSignalsReader extends Reader { - private final NonBlockingReader target; - private volatile boolean keepRunning = true; - private volatile boolean checkStream = false; - private final Thread streamMonitor; - private final IRascalLanguageProtocol lang; - private final Consumer printStackTrace; - - public RascalSpecificSignalsReader(Terminal term, IRascalLanguageProtocol lang, Consumer printStackTrace) { - target = term.reader(); - streamMonitor = new Thread(this::monitor, "Rascal's Input stream monitor"); - streamMonitor.setDaemon(true); - streamMonitor.start(); - this.lang = lang; - this.printStackTrace = printStackTrace; - } - - public void startStreamMonitoring() { - checkStream = true; - } - - public void pauseStreamMonitoring() { - checkStream = false; - // stop an active read/poll - target.shutdown(); - } - - private static final int EOF = -1; - private static final int TIMEOUT = -2; - private static final int CTRL_SLASH = '\\' & 0x1F; - - private void monitor() { - while (keepRunning) { - while (checkStream) { - int input; - try { - synchronized (this.lock) { - input = target.peek(1000); - } - } - catch (IOException e) { - input = TIMEOUT; - } - switch (input) { - case EOF: return; - case TIMEOUT: continue; - case CTRL_SLASH: - try { - printStackTrace.accept(lang.stackTraceRequested()); - } - catch (Throwable _ignored) {} - break; - - default: break; - } - // we got here, so let's swallow the character - if (keepRunning) { // but make sure we're not interrupted by now - synchronized (this.lock) { - try { - target.read(); - } - catch (IOException e) { - } - } - } - } - try { - Thread.sleep(1000); - } - catch (InterruptedException e) { - return; - } - } - } - - - - @Override - public int read(char[] cbuf, int off, int len) throws IOException { - synchronized (this.lock) { - return target.read(cbuf, off, len); - } - } - - @Override - public void close() throws IOException { - keepRunning = false; - pauseStreamMonitoring(); - streamMonitor.interrupt(); - synchronized (this.lock) { - target.close(); - } - } - -} From f27104dba6e0efd122d9a1438c2087e8cd0fca14 Mon Sep 17 00:00:00 2001 From: Davy Landman Date: Fri, 10 Jan 2025 11:05:26 +0100 Subject: [PATCH 166/191] Using ansi library in progress bar instead of own escapes --- .../repl/TerminalProgressBarMonitor.java | 152 +++++++++--------- 1 file changed, 72 insertions(+), 80 deletions(-) diff --git a/src/org/rascalmpl/repl/TerminalProgressBarMonitor.java b/src/org/rascalmpl/repl/TerminalProgressBarMonitor.java index 4bcfa86e333..563e23c4751 100644 --- a/src/org/rascalmpl/repl/TerminalProgressBarMonitor.java +++ b/src/org/rascalmpl/repl/TerminalProgressBarMonitor.java @@ -9,6 +9,10 @@ import java.util.LinkedList; import java.util.List; +import org.checkerframework.checker.nullness.qual.Nullable; +import org.jline.jansi.Ansi; +import org.jline.jansi.Ansi.Color; +import org.jline.jansi.Ansi.Erase; import org.jline.terminal.Terminal; import org.jline.utils.InfoCmp.Capability; import org.rascalmpl.debug.IRascalMonitor; @@ -62,11 +66,28 @@ public class TerminalProgressBarMonitor extends PrintWriter implements IRascalMo */ private final Terminal tm; + /** + * ANSI command for this terminal to hide the cursor + */ + private final String hideCursor; + /** + * ANSI command for this terminal to show the cursor + */ + private final String showCursor; + public static boolean shouldWorkIn(Terminal tm) { + Integer cols = tm.getNumericCapability(Capability.max_colors); + if (cols == null || cols < 8) { + return false; + } + return "\r".equals(tm.getStringCapability(Capability.carriage_return)) && tm.getNumericCapability(Capability.columns) != null && tm.getNumericCapability(Capability.lines) != null - && ANSI.supportsCapabilities(tm); + && tm.getStringCapability(Capability.clear_screen) != null + && tm.getStringCapability(Capability.cursor_up) != null + && tm.getStringCapability(Capability.cursor_down) != null + ; } @@ -79,13 +100,23 @@ public TerminalProgressBarMonitor(Terminal tm) { this.lineWidth = tm.getWidth(); this.unicodeEnabled = tm.encoding().newEncoder().canEncode(new ProgressBar("", 1).clocks[0]); + this.hideCursor = interpretCapability(tm.getStringCapability(Capability.cursor_invisible)); + this.showCursor = interpretCapability(tm.getStringCapability(Capability.cursor_visible)); + assert out.getClass() != TerminalProgressBarMonitor.class : "accidentally wrapping the wrapper."; } + private static String interpretCapability(@Nullable String arg) { + if (arg == null) { + return ""; + } + return arg.replace("\\E", "" + ((char)27)); // escape char + } + /** * Use this for debugging terminal cursor movements, step by step. */ - private static class AlwaysFlushAlwaysShowCursor extends PrintWriter { + private class AlwaysFlushAlwaysShowCursor extends PrintWriter { public AlwaysFlushAlwaysShowCursor(PrintWriter out) { super(out); @@ -94,21 +125,21 @@ public AlwaysFlushAlwaysShowCursor(PrintWriter out) { @Override public void write(int c) { super.write(c); - super.write(ANSI.showCursor()); + super.write(showCursor); super.flush(); } @Override public void write(char[] cbuf, int off, int len) { super.write(cbuf, off, len); - super.write(ANSI.showCursor()); + super.write(showCursor); super.flush(); } @Override public void write(String str, int off, int len) { super.write(str, off, len); - super.write(ANSI.showCursor()); + super.write(showCursor); super.flush(); } } @@ -281,16 +312,24 @@ void worked(int amount, String message) { void update() { // to avoid flicker we only print if there is a new bar character to draw if (newWidth() != previousWidth) { - directWrite(ANSI.hideCursor()); stepper++; - directWrite(ANSI.moveUp(bars.size() - bars.indexOf(this))); + directWrite( + Ansi.ansi() + .a(hideCursor) + .cursorUpLine(bars.size() - bars.indexOf(this)) + .toString() + ); write(); // this moves the cursor already one line down due to `println` int distance = bars.size() - bars.indexOf(this) - 1; + Ansi ansi = Ansi.ansi(); if (distance > 0) { // ANSI will move 1 line even if the parameter is 0 - directWrite(ANSI.moveDown(distance)); + ansi = ansi.cursorDownLine(distance); } - directWrite(ANSI.showCursor()); + directWrite(ansi + .a(showCursor) + .toString() + ); directFlush(); } } @@ -306,6 +345,8 @@ int newWidth() { } } + private static final int BAR_COLOR_BG = 240; // 232-255: grayscale from dark to light in 24 steps + /** * Print the current state of the progress bar */ @@ -347,20 +388,18 @@ else if (barWidth <= 3) { // we can print the clock for good measure return; } - var line - = done - + ANSI.grey8Background() - + ANSI.brightWhiteForeground() - + frontPart - + ANSI.noBackground() - + ANSI.normal() - + backPart - + " " + clock + " " - + String.format("%d:%02d:%02d.%03d", duration.toHoursPart(), duration.toMinutes(), duration.toSecondsPart(), duration.toMillisPart()) - + " " - ; - - directPrintln(line); // note this puts us one line down + directWrite( + Ansi.ansi() + .a(done) + .bg(BAR_COLOR_BG).fgBright(Color.WHITE) + .a(frontPart) + .reset() + .a(backPart) + .a(" " + clock) + .format(" %d:%02d:%02d.%03d ", duration.toHoursPart(), duration.toMinutes(), duration.toSecondsPart(), duration.toMillisPart()) + .a(System.lineSeparator()) + .toString() + ); } @Override @@ -390,62 +429,15 @@ public void done() { */ private void eraseBars() { if (!bars.isEmpty()) { - directWrite(ANSI.moveUp(bars.size())); - directWrite(ANSI.clearToEndOfScreen()); + directWrite(Ansi.ansi() + .cursorUpLine(bars.size()) + .eraseScreen(Erase.FORWARD) + .toString() + ); } directFlush(); } - /** - * ANSI escape codes convenience functions - */ - private static class ANSI { - - private static boolean supportsCapabilities(Terminal tm) { - Integer cols = tm.getNumericCapability(Capability.max_colors); - if (cols == null || cols < 8) { - return false; - } - return tm.getStringCapability(Capability.clear_screen) != null; - } - - public static String grey8Background() { - return "\u001B[48;5;240m"; - } - - public static String brightWhiteForeground() { - return "\u001B[97m"; - } - - static String moveUp(int n) { - return "\u001B[" + n + "F"; - } - - public static String noBackground() { - return "\u001B[49m"; - } - - public static String normal() { - return "\u001B[0m"; - } - - static String moveDown(int n) { - return "\u001B[" + n + "E"; - } - - static String clearToEndOfScreen() { - return "\u001B[0J"; - } - - static String hideCursor() { - return "\u001B[?25l"; - } - - static String showCursor() { - return "\u001B[?25h"; - } - } - /** * Simply print the bars. No cursor movement here. Hiding the cursor prevents flickering. */ @@ -495,7 +487,7 @@ public synchronized void jobStart(String name, int workShare, int totalWork) { var pb = findBarByName(name); - directWrite(ANSI.hideCursor()); + directWrite(hideCursor); if (pb == null) { eraseBars(); // to make room for the new bars @@ -509,7 +501,7 @@ public synchronized void jobStart(String name, int workShare, int totalWork) { pb.update(); } - directWrite(ANSI.showCursor()); + directWrite(showCursor); directFlush(); } @@ -527,7 +519,7 @@ public synchronized void jobStep(String name, String message, int workShare) { public synchronized int jobEnd(String name, boolean succeeded) { var pb = findBarByName(name); - directWrite(ANSI.hideCursor()); + directWrite(hideCursor); if (pb != null && --pb.nesting == -1) { eraseBars(); @@ -542,7 +534,7 @@ else if (pb != null) { pb.update(); } - directWrite(ANSI.showCursor()); + directWrite(showCursor); return -1; } @@ -659,7 +651,7 @@ public synchronized void endAllJobs() { } try { - directWrite(ANSI.showCursor()); + directWrite(showCursor); directFlush(); out.flush(); } From b0200c2534d74eb566ca7278fce9673b314fdb06 Mon Sep 17 00:00:00 2001 From: Davy Landman Date: Fri, 10 Jan 2025 11:08:29 +0100 Subject: [PATCH 167/191] Removing old code --- src/org/rascalmpl/repl/TerminalProgressBarMonitor.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/org/rascalmpl/repl/TerminalProgressBarMonitor.java b/src/org/rascalmpl/repl/TerminalProgressBarMonitor.java index 563e23c4751..72300a0d26d 100644 --- a/src/org/rascalmpl/repl/TerminalProgressBarMonitor.java +++ b/src/org/rascalmpl/repl/TerminalProgressBarMonitor.java @@ -91,7 +91,6 @@ public static boolean shouldWorkIn(Terminal tm) { } - @SuppressWarnings("resource") public TerminalProgressBarMonitor(Terminal tm) { super(DEBUG ? new AlwaysFlushAlwaysShowCursor(tm.writer()) : tm.writer()); @@ -102,8 +101,6 @@ public TerminalProgressBarMonitor(Terminal tm) { this.hideCursor = interpretCapability(tm.getStringCapability(Capability.cursor_invisible)); this.showCursor = interpretCapability(tm.getStringCapability(Capability.cursor_visible)); - - assert out.getClass() != TerminalProgressBarMonitor.class : "accidentally wrapping the wrapper."; } private static String interpretCapability(@Nullable String arg) { From a0cdd3e598285d52a585cf98b716acd171a7825a Mon Sep 17 00:00:00 2001 From: Davy Landman Date: Fri, 10 Jan 2025 11:23:44 +0100 Subject: [PATCH 168/191] Added license headers to all the files in the REPL Years reflect if the file was new or came from the previous REPL implementation --- src/org/rascalmpl/repl/BaseREPL.java | 26 ++++++++++++++++++ src/org/rascalmpl/repl/IREPLService.java | 26 ++++++++++++++++++ .../completers/RascalCommandCompletion.java | 27 +++++++++++++++++++ .../RascalIdentifierCompletion.java | 26 ++++++++++++++++++ .../completers/RascalKeywordCompletion.java | 26 ++++++++++++++++++ .../completers/RascalLocationCompletion.java | 26 ++++++++++++++++++ .../completers/RascalModuleCompletion.java | 26 ++++++++++++++++++ .../repl/completers/RascalQualifiedNames.java | 26 ++++++++++++++++++ .../repl/http/REPLContentServer.java | 26 ++++++++++++++++++ .../repl/http/REPLContentServerManager.java | 4 +-- .../repl/output/IAnsiCommandOutput.java | 26 ++++++++++++++++++ .../repl/output/IBinaryOutputPrinter.java | 26 ++++++++++++++++++ .../rascalmpl/repl/output/ICommandOutput.java | 26 ++++++++++++++++++ .../repl/output/IErrorCommandOutput.java | 26 ++++++++++++++++++ .../repl/output/IHtmlCommandOutput.java | 26 ++++++++++++++++++ .../repl/output/IImageCommandOutput.java | 26 ++++++++++++++++++ .../repl/output/INotebookOutput.java | 26 ++++++++++++++++++ .../rascalmpl/repl/output/IOutputPrinter.java | 26 ++++++++++++++++++ .../output/ISourceLocationCommandOutput.java | 26 ++++++++++++++++++ .../repl/output/IWebContentOutput.java | 26 ++++++++++++++++++ src/org/rascalmpl/repl/output/MimeTypes.java | 26 ++++++++++++++++++ .../output/impl/AsciiStringOutputPrinter.java | 26 ++++++++++++++++++ .../repl/parametric/ILanguageProtocol.java | 4 +-- .../repl/parametric/ParametricCompleter.java | 26 ++++++++++++++++++ .../parametric/ParametricReplService.java | 26 ++++++++++++++++++ .../repl/rascal/IRascalLanguageProtocol.java | 8 ++++-- .../repl/rascal/ParseErrorPrinter.java | 26 ++++++++++++++++++ .../repl/rascal/RascalInterpreterREPL.java | 26 ++++++++++++++++++ .../repl/rascal/RascalLineParser.java | 26 ++++++++++++++++++ .../repl/rascal/RascalReplServices.java | 26 ++++++++++++++++++ .../repl/rascal/RascalValuePrinter.java | 26 ++++++++++++++++++ 31 files changed, 739 insertions(+), 6 deletions(-) diff --git a/src/org/rascalmpl/repl/BaseREPL.java b/src/org/rascalmpl/repl/BaseREPL.java index 75be5cedd31..ebc63ff9274 100644 --- a/src/org/rascalmpl/repl/BaseREPL.java +++ b/src/org/rascalmpl/repl/BaseREPL.java @@ -1,3 +1,29 @@ +/* + * Copyright (c) 2015-2025, NWO-I CWI and Swat.engineering + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ package org.rascalmpl.repl; import java.io.IOException; diff --git a/src/org/rascalmpl/repl/IREPLService.java b/src/org/rascalmpl/repl/IREPLService.java index 4459fd937a4..eea1bbebb5a 100644 --- a/src/org/rascalmpl/repl/IREPLService.java +++ b/src/org/rascalmpl/repl/IREPLService.java @@ -1,3 +1,29 @@ +/* + * Copyright (c) 2024-2025, NWO-I CWI and Swat.engineering + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ package org.rascalmpl.repl; import java.io.PrintWriter; diff --git a/src/org/rascalmpl/repl/completers/RascalCommandCompletion.java b/src/org/rascalmpl/repl/completers/RascalCommandCompletion.java index da7738d45d0..e522e96c123 100644 --- a/src/org/rascalmpl/repl/completers/RascalCommandCompletion.java +++ b/src/org/rascalmpl/repl/completers/RascalCommandCompletion.java @@ -1,3 +1,30 @@ +/* + * Copyright (c) 2015-2025, NWO-I CWI and Swat.engineering + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + package org.rascalmpl.repl.completers; diff --git a/src/org/rascalmpl/repl/completers/RascalIdentifierCompletion.java b/src/org/rascalmpl/repl/completers/RascalIdentifierCompletion.java index 1324dcdb6e0..91158b16b58 100644 --- a/src/org/rascalmpl/repl/completers/RascalIdentifierCompletion.java +++ b/src/org/rascalmpl/repl/completers/RascalIdentifierCompletion.java @@ -1,3 +1,29 @@ +/* + * Copyright (c) 2015-2025, NWO-I CWI and Swat.engineering + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ package org.rascalmpl.repl.completers; import java.util.List; diff --git a/src/org/rascalmpl/repl/completers/RascalKeywordCompletion.java b/src/org/rascalmpl/repl/completers/RascalKeywordCompletion.java index 0005793a2ff..f8ddfd44c8f 100644 --- a/src/org/rascalmpl/repl/completers/RascalKeywordCompletion.java +++ b/src/org/rascalmpl/repl/completers/RascalKeywordCompletion.java @@ -1,3 +1,29 @@ +/* + * Copyright (c) 2015-2025, NWO-I CWI and Swat.engineering + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ package org.rascalmpl.repl.completers; import java.util.List; diff --git a/src/org/rascalmpl/repl/completers/RascalLocationCompletion.java b/src/org/rascalmpl/repl/completers/RascalLocationCompletion.java index 6f9965f8731..42c0e286f68 100644 --- a/src/org/rascalmpl/repl/completers/RascalLocationCompletion.java +++ b/src/org/rascalmpl/repl/completers/RascalLocationCompletion.java @@ -1,3 +1,29 @@ +/* + * Copyright (c) 2015-2025, NWO-I CWI and Swat.engineering + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ package org.rascalmpl.repl.completers; import java.io.IOException; diff --git a/src/org/rascalmpl/repl/completers/RascalModuleCompletion.java b/src/org/rascalmpl/repl/completers/RascalModuleCompletion.java index b60b2e95a93..d979e1af281 100644 --- a/src/org/rascalmpl/repl/completers/RascalModuleCompletion.java +++ b/src/org/rascalmpl/repl/completers/RascalModuleCompletion.java @@ -1,3 +1,29 @@ +/* + * Copyright (c) 2015-2025, NWO-I CWI and Swat.engineering + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ package org.rascalmpl.repl.completers; import java.util.List; diff --git a/src/org/rascalmpl/repl/completers/RascalQualifiedNames.java b/src/org/rascalmpl/repl/completers/RascalQualifiedNames.java index 620f5382af6..daafbcc898c 100644 --- a/src/org/rascalmpl/repl/completers/RascalQualifiedNames.java +++ b/src/org/rascalmpl/repl/completers/RascalQualifiedNames.java @@ -1,3 +1,29 @@ +/* + * Copyright (c) 2015-2025, NWO-I CWI and Swat.engineering + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ package org.rascalmpl.repl.completers; import java.io.IOException; diff --git a/src/org/rascalmpl/repl/http/REPLContentServer.java b/src/org/rascalmpl/repl/http/REPLContentServer.java index 3a414513571..808c5979ecd 100644 --- a/src/org/rascalmpl/repl/http/REPLContentServer.java +++ b/src/org/rascalmpl/repl/http/REPLContentServer.java @@ -1,3 +1,29 @@ +/* + * Copyright (c) 2018-2025, NWO-I CWI and Swat.engineering + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ package org.rascalmpl.repl.http; import java.io.ByteArrayInputStream; diff --git a/src/org/rascalmpl/repl/http/REPLContentServerManager.java b/src/org/rascalmpl/repl/http/REPLContentServerManager.java index 24bb5331869..6b6dd1dd504 100644 --- a/src/org/rascalmpl/repl/http/REPLContentServerManager.java +++ b/src/org/rascalmpl/repl/http/REPLContentServerManager.java @@ -1,6 +1,6 @@ /** - * Copyright (c) 2020, Jurgen J. Vinju, Centrum Wiskunde & Informatica (NWOi - CWI) - * All rights reserved. + * Copyright (c) 2020-2025, NWO-I CWI and Swat.engineering + * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * diff --git a/src/org/rascalmpl/repl/output/IAnsiCommandOutput.java b/src/org/rascalmpl/repl/output/IAnsiCommandOutput.java index e7363f320ca..0ae0fbb479e 100644 --- a/src/org/rascalmpl/repl/output/IAnsiCommandOutput.java +++ b/src/org/rascalmpl/repl/output/IAnsiCommandOutput.java @@ -1,3 +1,29 @@ +/* + * Copyright (c) 2023-2025, NWO-I CWI and Swat.engineering + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ package org.rascalmpl.repl.output; public interface IAnsiCommandOutput extends ICommandOutput { diff --git a/src/org/rascalmpl/repl/output/IBinaryOutputPrinter.java b/src/org/rascalmpl/repl/output/IBinaryOutputPrinter.java index 01b28a62cf5..cc9a8ad0811 100644 --- a/src/org/rascalmpl/repl/output/IBinaryOutputPrinter.java +++ b/src/org/rascalmpl/repl/output/IBinaryOutputPrinter.java @@ -1,3 +1,29 @@ +/* + * Copyright (c) 2023-2025, NWO-I CWI and Swat.engineering + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ package org.rascalmpl.repl.output; diff --git a/src/org/rascalmpl/repl/output/ICommandOutput.java b/src/org/rascalmpl/repl/output/ICommandOutput.java index 55faa539a1e..e157ef8eb61 100644 --- a/src/org/rascalmpl/repl/output/ICommandOutput.java +++ b/src/org/rascalmpl/repl/output/ICommandOutput.java @@ -1,3 +1,29 @@ +/* + * Copyright (c) 2023-2025, NWO-I CWI and Swat.engineering + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ package org.rascalmpl.repl.output; public interface ICommandOutput { diff --git a/src/org/rascalmpl/repl/output/IErrorCommandOutput.java b/src/org/rascalmpl/repl/output/IErrorCommandOutput.java index e79c451a2a1..48564738d51 100644 --- a/src/org/rascalmpl/repl/output/IErrorCommandOutput.java +++ b/src/org/rascalmpl/repl/output/IErrorCommandOutput.java @@ -1,3 +1,29 @@ +/* + * Copyright (c) 2023-2025, NWO-I CWI and Swat.engineering + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ package org.rascalmpl.repl.output; public interface IErrorCommandOutput extends ICommandOutput { diff --git a/src/org/rascalmpl/repl/output/IHtmlCommandOutput.java b/src/org/rascalmpl/repl/output/IHtmlCommandOutput.java index 307e64ef876..ba7d0f2abba 100644 --- a/src/org/rascalmpl/repl/output/IHtmlCommandOutput.java +++ b/src/org/rascalmpl/repl/output/IHtmlCommandOutput.java @@ -1,3 +1,29 @@ +/* + * Copyright (c) 2023-2025, NWO-I CWI and Swat.engineering + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ package org.rascalmpl.repl.output; public interface IHtmlCommandOutput extends ICommandOutput { diff --git a/src/org/rascalmpl/repl/output/IImageCommandOutput.java b/src/org/rascalmpl/repl/output/IImageCommandOutput.java index d44fd1888d3..92bb1dcd91c 100644 --- a/src/org/rascalmpl/repl/output/IImageCommandOutput.java +++ b/src/org/rascalmpl/repl/output/IImageCommandOutput.java @@ -1,3 +1,29 @@ +/* + * Copyright (c) 2023-2025, NWO-I CWI and Swat.engineering + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ package org.rascalmpl.repl.output; diff --git a/src/org/rascalmpl/repl/output/INotebookOutput.java b/src/org/rascalmpl/repl/output/INotebookOutput.java index d6b2b58595f..3bfc8dd21c8 100644 --- a/src/org/rascalmpl/repl/output/INotebookOutput.java +++ b/src/org/rascalmpl/repl/output/INotebookOutput.java @@ -1,3 +1,29 @@ +/* + * Copyright (c) 2023-2025, NWO-I CWI and Swat.engineering + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ package org.rascalmpl.repl.output; public interface INotebookOutput extends IHtmlCommandOutput { diff --git a/src/org/rascalmpl/repl/output/IOutputPrinter.java b/src/org/rascalmpl/repl/output/IOutputPrinter.java index 06ef62caedf..dff245c44b1 100644 --- a/src/org/rascalmpl/repl/output/IOutputPrinter.java +++ b/src/org/rascalmpl/repl/output/IOutputPrinter.java @@ -1,3 +1,29 @@ +/* + * Copyright (c) 2023-2025, NWO-I CWI and Swat.engineering + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ package org.rascalmpl.repl.output; import java.io.IOException; diff --git a/src/org/rascalmpl/repl/output/ISourceLocationCommandOutput.java b/src/org/rascalmpl/repl/output/ISourceLocationCommandOutput.java index 02c4791cb89..d359ab34abe 100644 --- a/src/org/rascalmpl/repl/output/ISourceLocationCommandOutput.java +++ b/src/org/rascalmpl/repl/output/ISourceLocationCommandOutput.java @@ -1,3 +1,29 @@ +/* + * Copyright (c) 2023-2025, NWO-I CWI and Swat.engineering + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ package org.rascalmpl.repl.output; import io.usethesource.vallang.ISourceLocation; diff --git a/src/org/rascalmpl/repl/output/IWebContentOutput.java b/src/org/rascalmpl/repl/output/IWebContentOutput.java index 3bc8040a11b..cb9398854f4 100644 --- a/src/org/rascalmpl/repl/output/IWebContentOutput.java +++ b/src/org/rascalmpl/repl/output/IWebContentOutput.java @@ -1,3 +1,29 @@ +/* + * Copyright (c) 2023-2025, NWO-I CWI and Swat.engineering + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ package org.rascalmpl.repl.output; import java.net.URI; diff --git a/src/org/rascalmpl/repl/output/MimeTypes.java b/src/org/rascalmpl/repl/output/MimeTypes.java index fb50edf0970..cf9d77f40b9 100644 --- a/src/org/rascalmpl/repl/output/MimeTypes.java +++ b/src/org/rascalmpl/repl/output/MimeTypes.java @@ -1,3 +1,29 @@ +/* + * Copyright (c) 2023-2025, NWO-I CWI and Swat.engineering + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ package org.rascalmpl.repl.output; public class MimeTypes { diff --git a/src/org/rascalmpl/repl/output/impl/AsciiStringOutputPrinter.java b/src/org/rascalmpl/repl/output/impl/AsciiStringOutputPrinter.java index 54219ba7140..4b5e8457b4b 100644 --- a/src/org/rascalmpl/repl/output/impl/AsciiStringOutputPrinter.java +++ b/src/org/rascalmpl/repl/output/impl/AsciiStringOutputPrinter.java @@ -1,3 +1,29 @@ +/* + * Copyright (c) 2023-2025, NWO-I CWI and Swat.engineering + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ package org.rascalmpl.repl.output.impl; import java.io.PrintWriter; diff --git a/src/org/rascalmpl/repl/parametric/ILanguageProtocol.java b/src/org/rascalmpl/repl/parametric/ILanguageProtocol.java index 73ae712e7e0..de758301cba 100644 --- a/src/org/rascalmpl/repl/parametric/ILanguageProtocol.java +++ b/src/org/rascalmpl/repl/parametric/ILanguageProtocol.java @@ -1,6 +1,6 @@ /** - * Copyright (c) 2017, Jurgen J. Vinju, Mauricio Verano, Centrum Wiskunde & Informatica (CWI) All - * rights reserved. + * Copyright (c) 2017-2025, NWO-I CWI and Swat.engineering + * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, are permitted * provided that the following conditions are met: diff --git a/src/org/rascalmpl/repl/parametric/ParametricCompleter.java b/src/org/rascalmpl/repl/parametric/ParametricCompleter.java index 882211ba615..acaa1a93380 100644 --- a/src/org/rascalmpl/repl/parametric/ParametricCompleter.java +++ b/src/org/rascalmpl/repl/parametric/ParametricCompleter.java @@ -1,3 +1,29 @@ +/* + * Copyright (c) 2023-2025, NWO-I CWI and Swat.engineering + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ package org.rascalmpl.repl.parametric; import java.util.List; diff --git a/src/org/rascalmpl/repl/parametric/ParametricReplService.java b/src/org/rascalmpl/repl/parametric/ParametricReplService.java index 759b715259a..2b06263e9cb 100644 --- a/src/org/rascalmpl/repl/parametric/ParametricReplService.java +++ b/src/org/rascalmpl/repl/parametric/ParametricReplService.java @@ -1,3 +1,29 @@ +/* + * Copyright (c) 2023-2025, NWO-I CWI and Swat.engineering + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ package org.rascalmpl.repl.parametric; import java.io.PrintWriter; diff --git a/src/org/rascalmpl/repl/rascal/IRascalLanguageProtocol.java b/src/org/rascalmpl/repl/rascal/IRascalLanguageProtocol.java index f38e0e41b00..1246419b312 100644 --- a/src/org/rascalmpl/repl/rascal/IRascalLanguageProtocol.java +++ b/src/org/rascalmpl/repl/rascal/IRascalLanguageProtocol.java @@ -1,6 +1,6 @@ /** - * Copyright (c) 2017, Jurgen J. Vinju, Mauricio Verano, Centrum Wiskunde & Informatica (CWI) All - * rights reserved. + * Copyright (c) 2017-2025, NWO-I CWI and Swat.engineering + * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, are permitted * provided that the following conditions are met: @@ -102,5 +102,9 @@ public interface IRascalLanguageProtocol { */ Map availableCommandLineOptions(); + /** + * which location will the rascal prompt be parsed under. This is used to detect parse errors in the input. + * @return + */ ISourceLocation promptRootLocation(); } diff --git a/src/org/rascalmpl/repl/rascal/ParseErrorPrinter.java b/src/org/rascalmpl/repl/rascal/ParseErrorPrinter.java index b1ca9a1bc0e..30e573d42a6 100644 --- a/src/org/rascalmpl/repl/rascal/ParseErrorPrinter.java +++ b/src/org/rascalmpl/repl/rascal/ParseErrorPrinter.java @@ -1,3 +1,29 @@ +/* + * Copyright (c) 2023-2025, NWO-I CWI and Swat.engineering + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ package org.rascalmpl.repl.rascal; diff --git a/src/org/rascalmpl/repl/rascal/RascalInterpreterREPL.java b/src/org/rascalmpl/repl/rascal/RascalInterpreterREPL.java index 2a74b30657c..18be28fe25e 100644 --- a/src/org/rascalmpl/repl/rascal/RascalInterpreterREPL.java +++ b/src/org/rascalmpl/repl/rascal/RascalInterpreterREPL.java @@ -1,3 +1,29 @@ +/* + * Copyright (c) 2015-2025, NWO-I CWI and Swat.engineering + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ package org.rascalmpl.repl.rascal; diff --git a/src/org/rascalmpl/repl/rascal/RascalLineParser.java b/src/org/rascalmpl/repl/rascal/RascalLineParser.java index a48efaa802e..bad9b66c779 100644 --- a/src/org/rascalmpl/repl/rascal/RascalLineParser.java +++ b/src/org/rascalmpl/repl/rascal/RascalLineParser.java @@ -1,3 +1,29 @@ +/* + * Copyright (c) 2024-2025, NWO-I CWI and Swat.engineering + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ package org.rascalmpl.repl.rascal; import java.util.ArrayList; diff --git a/src/org/rascalmpl/repl/rascal/RascalReplServices.java b/src/org/rascalmpl/repl/rascal/RascalReplServices.java index 89261b4c1c6..0e4d5d8ab66 100644 --- a/src/org/rascalmpl/repl/rascal/RascalReplServices.java +++ b/src/org/rascalmpl/repl/rascal/RascalReplServices.java @@ -1,3 +1,29 @@ +/* + * Copyright (c) 2023-2025, NWO-I CWI and Swat.engineering + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ package org.rascalmpl.repl.rascal; import java.io.PrintWriter; diff --git a/src/org/rascalmpl/repl/rascal/RascalValuePrinter.java b/src/org/rascalmpl/repl/rascal/RascalValuePrinter.java index bc3c8d90aac..b4e49622397 100644 --- a/src/org/rascalmpl/repl/rascal/RascalValuePrinter.java +++ b/src/org/rascalmpl/repl/rascal/RascalValuePrinter.java @@ -1,3 +1,29 @@ +/* + * Copyright (c) 2015-2025, NWO-I CWI and Swat.engineering + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ package org.rascalmpl.repl.rascal; From 227196aabcb4fe570112685d6812ddb37bb94075 Mon Sep 17 00:00:00 2001 From: Davy Landman Date: Fri, 10 Jan 2025 12:16:29 +0100 Subject: [PATCH 169/191] Wrote documentation for all the classes --- src/org/rascalmpl/repl/BaseREPL.java | 15 +++++-- src/org/rascalmpl/repl/IREPLService.java | 24 ++++++++++-- src/org/rascalmpl/repl/StopREPLException.java | 31 +++++++++++++++ .../repl/TerminalProgressBarMonitor.java | 28 ++++++++++++- .../repl/output/IAnsiCommandOutput.java | 3 ++ .../rascalmpl/repl/output/ICommandOutput.java | 10 +++++ .../repl/output/IErrorCommandOutput.java | 3 ++ .../repl/output/IHtmlCommandOutput.java | 3 ++ .../repl/output/IImageCommandOutput.java | 3 ++ .../repl/output/INotebookOutput.java | 3 ++ .../rascalmpl/repl/output/IOutputPrinter.java | 3 +- .../output/ISourceLocationCommandOutput.java | 3 ++ src/org/rascalmpl/repl/output/MimeTypes.java | 3 ++ .../output/impl/AsciiStringOutputPrinter.java | 3 ++ .../repl/parametric/ILanguageProtocol.java | 4 +- .../repl/parametric/ParametricCompleter.java | 3 ++ .../parametric/ParametricReplService.java | 10 ++++- .../repl/rascal/IRascalLanguageProtocol.java | 14 +++++-- .../repl/rascal/ParseErrorPrinter.java | 39 +++++++++++++++++-- .../repl/rascal/RascalInterpreterREPL.java | 16 ++++---- .../repl/rascal/RascalLineParser.java | 8 ++++ .../repl/rascal/RascalReplServices.java | 15 ++++++- .../rascalmpl/repl/streams/StreamUtil.java | 29 ++++++++++++++ 23 files changed, 244 insertions(+), 29 deletions(-) create mode 100644 src/org/rascalmpl/repl/StopREPLException.java diff --git a/src/org/rascalmpl/repl/BaseREPL.java b/src/org/rascalmpl/repl/BaseREPL.java index ebc63ff9274..b616d31024e 100644 --- a/src/org/rascalmpl/repl/BaseREPL.java +++ b/src/org/rascalmpl/repl/BaseREPL.java @@ -48,7 +48,13 @@ import org.rascalmpl.repl.output.ICommandOutput; import org.rascalmpl.repl.output.IErrorCommandOutput; import org.rascalmpl.repl.output.IOutputPrinter; +import org.rascalmpl.repl.parametric.ParametricReplService; +import org.rascalmpl.repl.rascal.RascalReplServices; +/** + * This class wraps a jline3 terminal, and turns it into a REPL, what kind of repl depends on the {@link IREPLService} implementation. + * The two common ones are: {@link RascalReplServices} for rascal and {@link ParametricReplService} for DSLs that define a repl. + */ public class BaseREPL { private final IREPLService replService; @@ -99,6 +105,9 @@ public BaseREPL(IREPLService replService, Terminal term) { // - possible to tee output } + /** + * Start the REPL, this function will block until the REPL is terminated by the user + */ public void run() throws IOException { try { replService.connect(term, ansiColorsSupported, unicodeSupported); @@ -129,7 +138,7 @@ public void run() throws IOException { catch (InterruptedException _e) { // closing the runner } - catch (EndOfFileException e) { + catch (EndOfFileException|StopREPLException _e) { // user pressed ctrl+d or the terminal :quit command was given // so exit cleanly replService.errorWriter().println("Quiting REPL"); @@ -166,7 +175,7 @@ public void run() throws IOException { /** * Queue a command (separated by newlines) to be "entered" - * No support for multi-line input + * No support for multi-line input, newlines in the input are turned into separate commands */ public void queueCommand(String command) { reader.addCommandsInBuffer(Arrays.asList(command.split("[\\n\\r]"))); @@ -196,7 +205,7 @@ private AtomicBoolean setupInterruptHandler() { } - private void handleInput(String line) throws InterruptedException { + private void handleInput(String line) throws InterruptedException, StopREPLException { writeResult(replService.handleInput(line)); } diff --git a/src/org/rascalmpl/repl/IREPLService.java b/src/org/rascalmpl/repl/IREPLService.java index eea1bbebb5a..d81b1659693 100644 --- a/src/org/rascalmpl/repl/IREPLService.java +++ b/src/org/rascalmpl/repl/IREPLService.java @@ -32,11 +32,15 @@ import java.util.List; import org.jline.reader.Completer; +import org.jline.reader.EndOfFileException; import org.jline.reader.Parser; import org.jline.reader.impl.DefaultParser; import org.jline.terminal.Terminal; import org.rascalmpl.repl.output.ICommandOutput; +/** + * This interface implements the behavior of a REPL, without caring about jline or terminals + */ public interface IREPLService { /** * Does this language support completion @@ -81,10 +85,17 @@ default Path historyFile() { /** * Name of the REPL, no ansi allowed */ - default String name() { return "Rascal REPL"; } + String name(); - ICommandOutput handleInput(String input) throws InterruptedException; + /** + * Givin a succesfull command (the {@see #inputParser()} returned no errors) execute the input + * @param input full string of the input terminiated by \n + * @return a result that can be printed/displayed, depending on the context + * @throws InterruptedException the thread got getting interrupted, exit, don't print anything + * @throws StopREPLException the user requested to stop the REPL, clean exit the REPL, no new commands should be send + */ + ICommandOutput handleInput(String input) throws InterruptedException, StopREPLException; /** * Will be called from a different thread then the one that called `handleInput` @@ -98,10 +109,15 @@ default Path historyFile() { String prompt(boolean ansiColorsSupported, boolean unicodeSupported); /** - * Continuation prompt + * Continuation prompt in case of an error */ String parseErrorPrompt(boolean ansiColorSupported, boolean unicodeSupported); + /** + * What to print when a command was interrupted (for example by CTRL+C) + */ + String interruptedPrompt(boolean ansiColorsSupported, boolean unicodeSupported); + /** * Connect the REPL to the Terminal, most likely want to take a copy of at least the {@link Terminal#writer()}. * @param term @@ -129,5 +145,5 @@ default Path historyFile() { */ void flush(); - String interruptedPrompt(boolean ansiColorsSupported, boolean unicodeSupported); + } diff --git a/src/org/rascalmpl/repl/StopREPLException.java b/src/org/rascalmpl/repl/StopREPLException.java new file mode 100644 index 00000000000..1445a8973b6 --- /dev/null +++ b/src/org/rascalmpl/repl/StopREPLException.java @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2024-2025, NWO-I CWI and Swat.engineering + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ +package org.rascalmpl.repl; + +public class StopREPLException extends Exception { + +} diff --git a/src/org/rascalmpl/repl/TerminalProgressBarMonitor.java b/src/org/rascalmpl/repl/TerminalProgressBarMonitor.java index 72300a0d26d..9326ae3e12e 100644 --- a/src/org/rascalmpl/repl/TerminalProgressBarMonitor.java +++ b/src/org/rascalmpl/repl/TerminalProgressBarMonitor.java @@ -1,3 +1,29 @@ +/* + * Copyright (c) 2023-2025, NWO-I CWI and Swat.engineering + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ package org.rascalmpl.repl; import java.io.IOException; @@ -29,7 +55,7 @@ * UI experience. * * This class only works correctly if the actual writer of the terminal is wrapped - * with an object of this class. + * with an object of this class. And all the writes to the terminal, go via this class. */ public class TerminalProgressBarMonitor extends PrintWriter implements IRascalMonitor { /** diff --git a/src/org/rascalmpl/repl/output/IAnsiCommandOutput.java b/src/org/rascalmpl/repl/output/IAnsiCommandOutput.java index 0ae0fbb479e..7bd13d519d8 100644 --- a/src/org/rascalmpl/repl/output/IAnsiCommandOutput.java +++ b/src/org/rascalmpl/repl/output/IAnsiCommandOutput.java @@ -26,6 +26,9 @@ */ package org.rascalmpl.repl.output; +/** + * Ansi encoded output, will only be requested if it's legal to print ANSI escapes in the output, the {@link #asPlain()} should print the same output, but without any ansi escape. + */ public interface IAnsiCommandOutput extends ICommandOutput { IOutputPrinter asAnsi(); } diff --git a/src/org/rascalmpl/repl/output/ICommandOutput.java b/src/org/rascalmpl/repl/output/ICommandOutput.java index e157ef8eb61..968bd976a74 100644 --- a/src/org/rascalmpl/repl/output/ICommandOutput.java +++ b/src/org/rascalmpl/repl/output/ICommandOutput.java @@ -26,6 +26,16 @@ */ package org.rascalmpl.repl.output; +/** + *

+ * Root interface of a command output. We use multiple inheritance to allow the producer of the command output + * to provide different kinds of output, and let the consumer check (via instanceof) which output they can print. + *

+ * + *

+ * {@link #asPlain()} should always be implemented as a fallback, although it is fine to print a message refering to the more content-rich output. For example: {@link IWebContentOutput} might print the url where the hosted content can be found. + *

+ */ public interface ICommandOutput { IOutputPrinter asPlain(); } diff --git a/src/org/rascalmpl/repl/output/IErrorCommandOutput.java b/src/org/rascalmpl/repl/output/IErrorCommandOutput.java index 48564738d51..b29f936db55 100644 --- a/src/org/rascalmpl/repl/output/IErrorCommandOutput.java +++ b/src/org/rascalmpl/repl/output/IErrorCommandOutput.java @@ -26,6 +26,9 @@ */ package org.rascalmpl.repl.output; +/** + * An error output, to denote that the actual responds should be printed/displayed in an error stream/box. + */ public interface IErrorCommandOutput extends ICommandOutput { ICommandOutput getError(); } diff --git a/src/org/rascalmpl/repl/output/IHtmlCommandOutput.java b/src/org/rascalmpl/repl/output/IHtmlCommandOutput.java index ba7d0f2abba..7514672a560 100644 --- a/src/org/rascalmpl/repl/output/IHtmlCommandOutput.java +++ b/src/org/rascalmpl/repl/output/IHtmlCommandOutput.java @@ -26,6 +26,9 @@ */ package org.rascalmpl.repl.output; +/** + * The output contains html that can be rendered directly. + */ public interface IHtmlCommandOutput extends ICommandOutput { IOutputPrinter asHtml(); } diff --git a/src/org/rascalmpl/repl/output/IImageCommandOutput.java b/src/org/rascalmpl/repl/output/IImageCommandOutput.java index 92bb1dcd91c..1f516d7ee12 100644 --- a/src/org/rascalmpl/repl/output/IImageCommandOutput.java +++ b/src/org/rascalmpl/repl/output/IImageCommandOutput.java @@ -27,6 +27,9 @@ package org.rascalmpl.repl.output; +/** + * The output contains an image that can be served/displayed (the mime type should correspond to what kind of image) + */ public interface IImageCommandOutput extends ICommandOutput { IBinaryOutputPrinter asImage(); } diff --git a/src/org/rascalmpl/repl/output/INotebookOutput.java b/src/org/rascalmpl/repl/output/INotebookOutput.java index 3bfc8dd21c8..d405f3cc30f 100644 --- a/src/org/rascalmpl/repl/output/INotebookOutput.java +++ b/src/org/rascalmpl/repl/output/INotebookOutput.java @@ -26,6 +26,9 @@ */ package org.rascalmpl.repl.output; +/** + * Result is suitable to print in a notebook + */ public interface INotebookOutput extends IHtmlCommandOutput { IOutputPrinter asNotebook(); } diff --git a/src/org/rascalmpl/repl/output/IOutputPrinter.java b/src/org/rascalmpl/repl/output/IOutputPrinter.java index dff245c44b1..4ec01a8cc3e 100644 --- a/src/org/rascalmpl/repl/output/IOutputPrinter.java +++ b/src/org/rascalmpl/repl/output/IOutputPrinter.java @@ -33,7 +33,8 @@ import java.io.StringWriter; /** - * The output of a REPL command is represented by this class, depending on the consumer (terminal/notebook/webserver) a different function might be called. + * Represent a lazy container for output. Depending on the consumer, it will ask to write to a writer, or to generate a reader. + * There is also a {@link IBinaryOutputPrinter} overload that would indicate there is a file that should instead be served, if possible in the context. */ public interface IOutputPrinter { diff --git a/src/org/rascalmpl/repl/output/ISourceLocationCommandOutput.java b/src/org/rascalmpl/repl/output/ISourceLocationCommandOutput.java index d359ab34abe..7ca11f9fd81 100644 --- a/src/org/rascalmpl/repl/output/ISourceLocationCommandOutput.java +++ b/src/org/rascalmpl/repl/output/ISourceLocationCommandOutput.java @@ -28,6 +28,9 @@ import io.usethesource.vallang.ISourceLocation; +/** + * A binary output that can be read for a location direclty (instead of returning an {@link IBinaryOutputPrinter}) + */ public interface ISourceLocationCommandOutput extends ICommandOutput { ISourceLocation asLocation(); String locationMimeType(); diff --git a/src/org/rascalmpl/repl/output/MimeTypes.java b/src/org/rascalmpl/repl/output/MimeTypes.java index cf9d77f40b9..fe035bf946a 100644 --- a/src/org/rascalmpl/repl/output/MimeTypes.java +++ b/src/org/rascalmpl/repl/output/MimeTypes.java @@ -26,6 +26,9 @@ */ package org.rascalmpl.repl.output; +/** + * A handy set of mime types, a user is not limited to this, but these tend to be well supported in backends. + */ public class MimeTypes { public static final String PLAIN_TEXT = "text/plain"; public static final String ANSI = "text/x-ansi"; diff --git a/src/org/rascalmpl/repl/output/impl/AsciiStringOutputPrinter.java b/src/org/rascalmpl/repl/output/impl/AsciiStringOutputPrinter.java index 4b5e8457b4b..2fa809620b5 100644 --- a/src/org/rascalmpl/repl/output/impl/AsciiStringOutputPrinter.java +++ b/src/org/rascalmpl/repl/output/impl/AsciiStringOutputPrinter.java @@ -33,6 +33,9 @@ import org.rascalmpl.repl.output.IOutputPrinter; import org.rascalmpl.repl.output.MimeTypes; +/** + * Simple output printer for a string + */ public class AsciiStringOutputPrinter implements IOutputPrinter { private final String body; diff --git a/src/org/rascalmpl/repl/parametric/ILanguageProtocol.java b/src/org/rascalmpl/repl/parametric/ILanguageProtocol.java index de758301cba..31da2909f5f 100644 --- a/src/org/rascalmpl/repl/parametric/ILanguageProtocol.java +++ b/src/org/rascalmpl/repl/parametric/ILanguageProtocol.java @@ -30,7 +30,9 @@ import org.rascalmpl.ideservices.IDEServices; import org.rascalmpl.repl.output.ICommandOutput; - +/** + * Features that a DSL REPL needs to behave like a DSL repl, this is extracted out so that these can be reused in a Notebook, but also so that we can have an compiler version of the REPL. + */ public interface ILanguageProtocol { /** diff --git a/src/org/rascalmpl/repl/parametric/ParametricCompleter.java b/src/org/rascalmpl/repl/parametric/ParametricCompleter.java index acaa1a93380..58534026120 100644 --- a/src/org/rascalmpl/repl/parametric/ParametricCompleter.java +++ b/src/org/rascalmpl/repl/parametric/ParametricCompleter.java @@ -33,6 +33,9 @@ import org.jline.reader.LineReader; import org.jline.reader.ParsedLine; +/** + * Forward the auto completer to the language protocol + */ public class ParametricCompleter implements Completer { private final ILanguageProtocol lang; diff --git a/src/org/rascalmpl/repl/parametric/ParametricReplService.java b/src/org/rascalmpl/repl/parametric/ParametricReplService.java index 2b06263e9cb..dc84a9e6959 100644 --- a/src/org/rascalmpl/repl/parametric/ParametricReplService.java +++ b/src/org/rascalmpl/repl/parametric/ParametricReplService.java @@ -42,6 +42,9 @@ import org.rascalmpl.repl.output.IWebContentOutput; import org.rascalmpl.repl.streams.StreamUtil; +/** + * Setup a REPL for any DSL. + */ public class ParametricReplService implements IREPLService { private final ILanguageProtocol lang; @@ -56,6 +59,11 @@ public ParametricReplService(ILanguageProtocol lang, IDEServices ide, @Nullable this.historyFile = historyFile; } + @Override + public String name() { + return "Parametric REPL"; + } + @Override public void connect(Terminal term, boolean ansiColorSupported, boolean unicodeSupported) { @@ -134,7 +142,7 @@ public List completers() { @Override public Parser inputParser() { - // TODO: allow for a user to provide regexes for the + // In the future we could allow for a user to provide regexes for the // input parser, to get better completor support and options for multiline return new DefaultParser(); } diff --git a/src/org/rascalmpl/repl/rascal/IRascalLanguageProtocol.java b/src/org/rascalmpl/repl/rascal/IRascalLanguageProtocol.java index 1246419b312..1f5424ad8f2 100644 --- a/src/org/rascalmpl/repl/rascal/IRascalLanguageProtocol.java +++ b/src/org/rascalmpl/repl/rascal/IRascalLanguageProtocol.java @@ -31,13 +31,16 @@ import org.jline.terminal.Terminal; import org.rascalmpl.debug.IRascalMonitor; import org.rascalmpl.parser.gtd.exception.ParseError; +import org.rascalmpl.repl.StopREPLException; import org.rascalmpl.repl.output.ICommandOutput; import org.rascalmpl.values.parsetrees.ITree; import io.usethesource.vallang.ISourceLocation; - +/** + * Features that a Rascal REPL needs to behave like a rascal repl, this is extracted out so that these can be reused in a Notebook, but also so that we can have an compiler version of the REPL. + */ public interface IRascalLanguageProtocol { /** @@ -59,10 +62,11 @@ public interface IRascalLanguageProtocol { /** * After a command has succesfully parsed, this function is called to execute the command * @param command command entered. - * @throws InterruptedException throw this exception to stop the REPL (instead of calling .stop()) + * @throws InterruptedException the thread is getting interrupted * @throws ParseError handle parse error of the input command + * @throws StopREPLException stop the REPL */ - ICommandOutput handleInput(String command) throws InterruptedException, ParseError; + ICommandOutput handleInput(String command) throws InterruptedException, ParseError, StopREPLException; /** * This method gets called from another thread, and indicates the user pressed CTLR-C during a call to handleInput. @@ -78,7 +82,9 @@ public interface IRascalLanguageProtocol { */ ICommandOutput stackTraceRequested(); - + /** + * Flush all buffered contents to the output streams + */ void flush(); /** diff --git a/src/org/rascalmpl/repl/rascal/ParseErrorPrinter.java b/src/org/rascalmpl/repl/rascal/ParseErrorPrinter.java index 30e573d42a6..03ee4e06841 100644 --- a/src/org/rascalmpl/repl/rascal/ParseErrorPrinter.java +++ b/src/org/rascalmpl/repl/rascal/ParseErrorPrinter.java @@ -33,6 +33,8 @@ import org.jline.jansi.Ansi; import org.jline.jansi.Ansi.Attribute; +import org.jline.terminal.Terminal; +import org.jline.utils.InfoCmp.Capability; import org.rascalmpl.interpreter.utils.ReadEvalPrintDialogMessages; import org.rascalmpl.parser.gtd.exception.ParseError; import org.rascalmpl.repl.output.IAnsiCommandOutput; @@ -45,12 +47,25 @@ import io.usethesource.vallang.ISourceLocation; import io.usethesource.vallang.io.StandardTextWriter; +/** + * This class wraps a parse error message. + * With a special case for when the ParseError was in the prompt of the REPL, in that case we try to highligh the parse error. + */ public class ParseErrorPrinter { - public static IErrorCommandOutput parseErrorMaybePrompt(ParseError pe, ISourceLocation promptRoot, String input, PrintWriter stdOut, boolean ansiSupported, int promptOffset) { - if (pe.getLocation().top().equals(promptRoot) && ansiSupported) { + /** + * Generate an error output for a parse error, and if a prompt, highlight the error in the input + * @param pe the parse error + * @param promptRoot the location that the prompt would be parsed under + * @param input original input text + * @param term the terminal where we want to print the error location, if supported + * @param promptOffset position on the line where the prompt ends + * @return + */ + public static IErrorCommandOutput parseErrorMaybePrompt(ParseError pe, ISourceLocation promptRoot, String input, Terminal term, int promptOffset) { + if (pe.getLocation().top().equals(promptRoot) && ansiSupported(term)) { // it's an prompt root - return buildPromptError(pe, input, stdOut, promptOffset); + return buildPromptError(pe, input, term.writer(), promptOffset); } return new IErrorCommandOutput() { @Override @@ -70,6 +85,13 @@ public IOutputPrinter asPlain() { }; } + private static boolean ansiSupported(Terminal term) { + return term.getStringCapability(Capability.cursor_down) != null + && term.getStringCapability(Capability.save_cursor) != null + && term.getStringCapability(Capability.restore_cursor) != null + ; + } + private static IOutputPrinter defaultPrinter(ParseError pe, ISourceLocation promptRoot, String input) { return new IOutputPrinter() { @Override @@ -155,10 +177,12 @@ private static void highlightErrorInInput(ParseError pe, String input, PrintWrit try { var lines = properSplit(input); int currentLine = lines.size(); + // first we go up untill the end of the error while (currentLine > pe.getEndLine()) { stdOut.write(Ansi.ansi().cursorUpLine().toString()); currentLine--; } + // then we highlight the error parts of the lines while (currentLine >= pe.getBeginLine()) { String thisLine = lines.get(currentLine - 1); int offset = 0; @@ -171,6 +195,12 @@ private static void highlightErrorInInput(ParseError pe, String input, PrintWrit // last line endOffset = pe.getEndColumn(); } + if (thisLine.isEmpty()&& endOffset == 0) { + // if the error is at the end of the input + // put a space there and make the error higlight that space + thisLine = " "; + endOffset = 1; + } writeUnderLine(stdOut, promptOffset + offset, thisLine, offset, endOffset - offset); stdOut.write(Ansi.ansi().cursorUpLine().toString()); currentLine--; @@ -181,6 +211,9 @@ private static void highlightErrorInInput(ParseError pe, String input, PrintWrit } } + /** + * Work around string.split not generating empty lines + */ private static List properSplit(String line) { List lines = new ArrayList<>(); int start = 0; diff --git a/src/org/rascalmpl/repl/rascal/RascalInterpreterREPL.java b/src/org/rascalmpl/repl/rascal/RascalInterpreterREPL.java index 18be28fe25e..ddf1e6c9a7c 100644 --- a/src/org/rascalmpl/repl/rascal/RascalInterpreterREPL.java +++ b/src/org/rascalmpl/repl/rascal/RascalInterpreterREPL.java @@ -39,7 +39,6 @@ import java.util.Objects; import java.util.function.Function; -import org.jline.reader.EndOfFileException; import org.jline.terminal.Terminal; import org.rascalmpl.debug.IRascalMonitor; import org.rascalmpl.exceptions.StackTrace; @@ -57,6 +56,7 @@ import org.rascalmpl.interpreter.result.Result; import org.rascalmpl.interpreter.staticErrors.StaticError; import org.rascalmpl.parser.gtd.exception.ParseError; +import org.rascalmpl.repl.StopREPLException; import org.rascalmpl.repl.output.ICommandOutput; import org.rascalmpl.repl.output.IWebContentOutput; import org.rascalmpl.uri.URIUtil; @@ -69,7 +69,8 @@ import io.usethesource.vallang.IValueFactory; /** - * In most cases you might want to override the {@link #buildIDEService(PrintWriter, IRascalMonitor, Terminal)} and the {@link #buildEvaluator(Reader, PrintWriter, PrintWriter, IDEServices)} functions. + * Implementation of a interpreter based Rascal REPL Service. + * In most cases you might want to override/extend the {@link #buildIDEService(PrintWriter, IRascalMonitor, Terminal)} and the {@link #buildEvaluator(Reader, PrintWriter, PrintWriter, IDEServices)} functions. */ public class RascalInterpreterREPL implements IRascalLanguageProtocol { protected IDEServices services; @@ -118,7 +119,7 @@ protected IDEServices buildIDEService(PrintWriter err, IRascalMonitor monitor, T } /** - * You might want to override this function for different cases of where we're building a REPL (possible only extend on the result of it) + * You might want to override/extend this function for different cases of where we're building a REPL (possible only extend on the result of it, by adding extra search path entries) * @param input * @param stdout * @param stderr @@ -147,7 +148,7 @@ public void initialize(Reader input, PrintWriter stdout, PrintWriter stderr, IRa @Override - public ICommandOutput handleInput(String command) throws InterruptedException, ParseError { + public ICommandOutput handleInput(String command) throws InterruptedException, ParseError, StopREPLException { Objects.requireNonNull(eval, "Not initialized yet"); synchronized(eval) { try { @@ -163,10 +164,7 @@ public ICommandOutput handleInput(String command) throws InterruptedException, P } catch (InterruptException ex) { return printer.outputError((w, sw, u) -> { - if (u) { - w.print("»» "); - } - w.println("Interrupted"); + w.println((u ? "»» " : ">> ") + "Interrupted"); ex.getRascalStackTrace().prettyPrintedString(w, sw); }); } @@ -181,7 +179,7 @@ public ICommandOutput handleInput(String command) throws InterruptedException, P }); } catch (QuitException q) { - throw new EndOfFileException("Quiting REPL"); + throw new StopREPLException(); } catch (Throwable e) { if (e instanceof ParseError) { diff --git a/src/org/rascalmpl/repl/rascal/RascalLineParser.java b/src/org/rascalmpl/repl/rascal/RascalLineParser.java index bad9b66c779..9b79b6724d7 100644 --- a/src/org/rascalmpl/repl/rascal/RascalLineParser.java +++ b/src/org/rascalmpl/repl/rascal/RascalLineParser.java @@ -43,6 +43,11 @@ +/** + * Implement a simple lexer for input that a user is typing. + * jline3 requires this for both auto completion and for multi-line editing. + * Note: JLine only supports completion for the current word, so sometimes things are lexed differently than in the rascal grammar. + */ public class RascalLineParser implements Parser { private final Function commandParser; @@ -88,6 +93,9 @@ private ParsedLine splitWordsOnly(String line, int cursor) { return new ParsedLineLexedWords(words, cursor, line); } + /** + * Recognize words in a way we get reasonable auto completion boundaries + */ private void parseWords(String buffer, int position, List words) { /** are we interpolating inside of a string */ boolean inString = false; diff --git a/src/org/rascalmpl/repl/rascal/RascalReplServices.java b/src/org/rascalmpl/repl/rascal/RascalReplServices.java index 0e4d5d8ab66..46cef36ace1 100644 --- a/src/org/rascalmpl/repl/rascal/RascalReplServices.java +++ b/src/org/rascalmpl/repl/rascal/RascalReplServices.java @@ -39,6 +39,7 @@ import org.jline.terminal.Terminal; import org.rascalmpl.parser.gtd.exception.ParseError; import org.rascalmpl.repl.IREPLService; +import org.rascalmpl.repl.StopREPLException; import org.rascalmpl.repl.TerminalProgressBarMonitor; import org.rascalmpl.repl.completers.RascalCommandCompletion; import org.rascalmpl.repl.completers.RascalIdentifierCompletion; @@ -48,14 +49,23 @@ import org.rascalmpl.repl.output.ICommandOutput; import org.rascalmpl.repl.streams.StreamUtil; +/** + * Defines the features of a Rascal REPL, and forwards details like execution to {@link IRascalLanguageProtocol}. + */ public class RascalReplServices implements IREPLService { private final IRascalLanguageProtocol lang; private final @Nullable Path historyFile; private boolean unicodeSupported = false; private boolean ansiSupported = false; + private Terminal term; private PrintWriter out; private PrintWriter err; + + @Override + public String name() { + return "Rascal REPL"; + } public RascalReplServices(IRascalLanguageProtocol lang, @Nullable Path historyFile) { @@ -69,6 +79,7 @@ public void connect(Terminal term, boolean ansiColorsSupported, boolean unicodeS if (out != null) { throw new IllegalStateException("Repl Service is already initialized"); } + this.term = term; this.unicodeSupported = unicodeSupported; this.ansiSupported = ansiColorsSupported; var monitor = new TerminalProgressBarMonitor(term); @@ -92,12 +103,12 @@ public Parser inputParser() { } @Override - public ICommandOutput handleInput(String input) throws InterruptedException { + public ICommandOutput handleInput(String input) throws InterruptedException, StopREPLException { try { return lang.handleInput(input); } catch (ParseError pe) { - return ParseErrorPrinter.parseErrorMaybePrompt(pe, lang.promptRootLocation(), input, out, ansiSupported, prompt(false, unicodeSupported).length() + 1); + return ParseErrorPrinter.parseErrorMaybePrompt(pe, lang.promptRootLocation(), input, term, prompt(false, unicodeSupported).length() + 1); } } diff --git a/src/org/rascalmpl/repl/streams/StreamUtil.java b/src/org/rascalmpl/repl/streams/StreamUtil.java index 8a262127726..00bcadebd3b 100644 --- a/src/org/rascalmpl/repl/streams/StreamUtil.java +++ b/src/org/rascalmpl/repl/streams/StreamUtil.java @@ -1,3 +1,29 @@ +/* + * Copyright (c) 2023-2025, NWO-I CWI and Swat.engineering + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ package org.rascalmpl.repl.streams; import java.io.PrintWriter; @@ -6,6 +32,9 @@ import org.jline.terminal.Terminal; import org.jline.utils.InfoCmp.Capability; +/** + * Small class with some utilities to wrap/simulate streams + */ public class StreamUtil { public static PrintWriter generateErrorStream(Terminal tm, Writer out) { From 60a0e01a1d8c6be1ee9eff7852edcc7d10a44b45 Mon Sep 17 00:00:00 2001 From: Davy Landman Date: Fri, 10 Jan 2025 12:23:22 +0100 Subject: [PATCH 170/191] Removed java compile error --- src/org/rascalmpl/repl/TerminalProgressBarMonitor.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/org/rascalmpl/repl/TerminalProgressBarMonitor.java b/src/org/rascalmpl/repl/TerminalProgressBarMonitor.java index 9326ae3e12e..2063cdc1b52 100644 --- a/src/org/rascalmpl/repl/TerminalProgressBarMonitor.java +++ b/src/org/rascalmpl/repl/TerminalProgressBarMonitor.java @@ -118,7 +118,7 @@ public static boolean shouldWorkIn(Terminal tm) { public TerminalProgressBarMonitor(Terminal tm) { - super(DEBUG ? new AlwaysFlushAlwaysShowCursor(tm.writer()) : tm.writer()); + super(DEBUG ? new AlwaysFlushAlwaysShowCursor(tm.writer(), tm) : tm.writer()); this.tm = tm; @@ -139,10 +139,12 @@ private static String interpretCapability(@Nullable String arg) { /** * Use this for debugging terminal cursor movements, step by step. */ - private class AlwaysFlushAlwaysShowCursor extends PrintWriter { + private static class AlwaysFlushAlwaysShowCursor extends PrintWriter { + private final String showCursor; - public AlwaysFlushAlwaysShowCursor(PrintWriter out) { + public AlwaysFlushAlwaysShowCursor(PrintWriter out, Terminal tm) { super(out); + this.showCursor = interpretCapability(tm.getStringCapability(Capability.cursor_visible)); } @Override From 085e226080eb65fff35817f1c0c3642e7f783808 Mon Sep 17 00:00:00 2001 From: Davy Landman Date: Fri, 10 Jan 2025 13:02:31 +0100 Subject: [PATCH 171/191] Made sure junit tests dont fight with jline3 --- pom.xml | 1 + .../infrastructure/RascalJUnitTestRunner.java | 19 ++++++------------- 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/pom.xml b/pom.xml index 8271ee4b1f8..1324a093d33 100644 --- a/pom.xml +++ b/pom.xml @@ -236,6 +236,7 @@ **/org/rascalmpl/test/AllSuiteParallel.java **/org/rascalmpl/test/library/LibraryLangPaths.java **/org/rascalmpl/test/value/AllTests.java + **/org/rascalmpl/test/repl/*Test.java **/org/rascalmpl/*Test.java diff --git a/src/org/rascalmpl/test/infrastructure/RascalJUnitTestRunner.java b/src/org/rascalmpl/test/infrastructure/RascalJUnitTestRunner.java index 55a4a983fce..8a8a4d3a466 100644 --- a/src/org/rascalmpl/test/infrastructure/RascalJUnitTestRunner.java +++ b/src/org/rascalmpl/test/infrastructure/RascalJUnitTestRunner.java @@ -12,6 +12,7 @@ import java.io.File; import java.io.IOException; +import java.io.InputStream; import java.io.PrintWriter; import java.io.Reader; import java.lang.annotation.Annotation; @@ -22,10 +23,7 @@ import java.util.List; import java.util.Queue; -import org.jline.terminal.Terminal; -import org.jline.terminal.TerminalBuilder; import org.jline.terminal.impl.DumbTerminal; -import org.jline.terminal.impl.DumbTerminalProvider; import org.junit.runner.Description; import org.junit.runner.Result; import org.junit.runner.Runner; @@ -57,19 +55,14 @@ public class RascalJUnitTestRunner extends Runner { private static class InstanceHolder { final static IRascalMonitor monitor; static { - Terminal tm; try { - tm = TerminalBuilder.terminal(); + // jline is to smart, it intersects with junit runners that also interact with the stream + // so instead of that we direct all the messages to stderr, and disable any smart stuff + monitor = IRascalMonitor.buildConsoleMonitor(new DumbTerminal(InputStream.nullInputStream(), System.out)); } - catch (IOException e) { - try { - tm = new DumbTerminal(System.in, System.err); - } - catch (IOException e1) { - throw new IllegalStateException("Could not create a terminal representation"); - } + catch (IOException e1) { + throw new IllegalStateException("Could not create a terminal representation"); } - monitor = IRascalMonitor.buildConsoleMonitor(tm); } } From 49328c4a95864405cdc34bfa1b1016bceaa95d4d Mon Sep 17 00:00:00 2001 From: paulklint Date: Fri, 10 Jan 2025 13:36:31 +0100 Subject: [PATCH 172/191] Added launch configuration --- .vscode/launch.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index aa506d012ad..63cc1119fae 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -30,7 +30,8 @@ "request": "launch", "mainClass": "org.rascalmpl.shell.RascalShell", "projectName": "rascal", - "vmArgs": "-Xss80m -Xmx2g -ea" + "vmArgs": "-Xss80m -Xmx2g -ea", + "cwd": "${workspaceFolder}/../rascal-core" }, { "type": "java", From 139078a505dfae228f4a754ffdbb784b323c0a9f Mon Sep 17 00:00:00 2001 From: Davy Landman Date: Fri, 10 Jan 2025 15:29:48 +0100 Subject: [PATCH 173/191] Made sure line numbers start at 1 not at 0 --- src/org/rascalmpl/repl/BaseREPL.java | 1 + src/org/rascalmpl/repl/rascal/ParseErrorPrinter.java | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/org/rascalmpl/repl/BaseREPL.java b/src/org/rascalmpl/repl/BaseREPL.java index b616d31024e..d09c2b7422d 100644 --- a/src/org/rascalmpl/repl/BaseREPL.java +++ b/src/org/rascalmpl/repl/BaseREPL.java @@ -86,6 +86,7 @@ public BaseREPL(IREPLService replService, Terminal term) { } reader.option(Option.HISTORY_IGNORE_DUPS, replService.historyIgnoreDuplicates()); reader.option(Option.DISABLE_EVENT_EXPANSION, true); // stop jline expending escaped characters in the input + reader.variable(LineReader.LINE_OFFSET, 1); if (replService.supportsCompletion()) { diff --git a/src/org/rascalmpl/repl/rascal/ParseErrorPrinter.java b/src/org/rascalmpl/repl/rascal/ParseErrorPrinter.java index 03ee4e06841..13093dcb716 100644 --- a/src/org/rascalmpl/repl/rascal/ParseErrorPrinter.java +++ b/src/org/rascalmpl/repl/rascal/ParseErrorPrinter.java @@ -141,8 +141,8 @@ public void write(PrintWriter target, boolean unicodeSupported) { target.write(unicodeSupported ? "❌ " : "! "); target.write("There was a parse error in the input, see the "); writeUnderLine(target, -1, "highlighted"); - target.print(" section (line: "); - target.print(pe.getBeginLine() - 1); + target.print(" text (line: "); + target.print(pe.getBeginLine()); target.print(" column: "); target.print(pe.getBeginColumn()); target.println(")"); From 08407209d535b05ac90a56089fb7e9d0f94c40fa Mon Sep 17 00:00:00 2001 From: paulklint Date: Sat, 11 Jan 2025 00:07:52 +0100 Subject: [PATCH 174/191] Reverted change in configuration file --- .vscode/launch.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index 63cc1119fae..aa506d012ad 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -30,8 +30,7 @@ "request": "launch", "mainClass": "org.rascalmpl.shell.RascalShell", "projectName": "rascal", - "vmArgs": "-Xss80m -Xmx2g -ea", - "cwd": "${workspaceFolder}/../rascal-core" + "vmArgs": "-Xss80m -Xmx2g -ea" }, { "type": "java", From cf981f3d6c91bdc0843f28e761d91c17636643d9 Mon Sep 17 00:00:00 2001 From: Davy Landman Date: Mon, 13 Jan 2025 09:40:51 +0100 Subject: [PATCH 175/191] No need for shading, especially in the unshaded jar --- pom.xml | 48 +----------------------------------------------- 1 file changed, 1 insertion(+), 47 deletions(-) diff --git a/pom.xml b/pom.xml index 1324a093d33..9ff6ca5d28f 100644 --- a/pom.xml +++ b/pom.xml @@ -333,15 +333,6 @@ false - - - org.fusesource.jansi - org.rascalmpl.fusesource.jansi - - org.fusesource.jansi.internal.* - - - *:* @@ -586,44 +577,7 @@ shade - - - - rascal - org.rascalmpl.shell.RascalShell - ${project.version} - http://www.usethesource.io - - - - - - org.fusesource.jansi - org.rascalmpl.fusesource.jansi - - org.fusesource.jansi.internal.* - - - - jline - org.rascalmpl.jline - - - - - *:* - - META-INF/*.SF - META-INF/*.DSA - META-INF/*.RSA - - - - - - jline:* - - + true
From 87dd9ed70c0da21e5654088873b66efe196c9867 Mon Sep 17 00:00:00 2001 From: Davy Landman Date: Mon, 13 Jan 2025 12:48:39 +0100 Subject: [PATCH 176/191] Fixed detection of newline character in maven --- src/org/rascalmpl/repl/TerminalProgressBarMonitor.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/org/rascalmpl/repl/TerminalProgressBarMonitor.java b/src/org/rascalmpl/repl/TerminalProgressBarMonitor.java index 2063cdc1b52..0f2ca0f02d2 100644 --- a/src/org/rascalmpl/repl/TerminalProgressBarMonitor.java +++ b/src/org/rascalmpl/repl/TerminalProgressBarMonitor.java @@ -40,6 +40,7 @@ import org.jline.jansi.Ansi.Color; import org.jline.jansi.Ansi.Erase; import org.jline.terminal.Terminal; +import org.jline.utils.Curses; import org.jline.utils.InfoCmp.Capability; import org.rascalmpl.debug.IRascalMonitor; @@ -107,7 +108,7 @@ public static boolean shouldWorkIn(Terminal tm) { return false; } - return "\r".equals(tm.getStringCapability(Capability.carriage_return)) + return "\r".equals(interpretCapability(tm.getStringCapability(Capability.carriage_return))) && tm.getNumericCapability(Capability.columns) != null && tm.getNumericCapability(Capability.lines) != null && tm.getStringCapability(Capability.clear_screen) != null @@ -133,7 +134,7 @@ private static String interpretCapability(@Nullable String arg) { if (arg == null) { return ""; } - return arg.replace("\\E", "" + ((char)27)); // escape char + return Curses.tputs(arg); } /** From 1fd9767dd9302fef1185408913801014f96ba3c2 Mon Sep 17 00:00:00 2001 From: Davy Landman Date: Mon, 13 Jan 2025 17:43:29 +0100 Subject: [PATCH 177/191] Apply suggestions from code review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Thanks Sung 👍🏽 Co-authored-by: sungshik <16154899+sungshik@users.noreply.github.com> --- src/org/rascalmpl/repl/IREPLService.java | 12 +++++----- .../completers/RascalCommandCompletion.java | 6 ++--- .../completers/RascalKeywordCompletion.java | 22 +++++++++---------- .../repl/output/IBinaryOutputPrinter.java | 8 +++---- .../rascalmpl/repl/output/ICommandOutput.java | 2 +- .../repl/output/IErrorCommandOutput.java | 2 +- .../output/ISourceLocationCommandOutput.java | 2 +- .../repl/rascal/IRascalLanguageProtocol.java | 5 +---- .../repl/rascal/ParseErrorPrinter.java | 6 ++--- .../repl/rascal/RascalInterpreterREPL.java | 12 +--------- .../repl/rascal/RascalLineParser.java | 7 ++---- .../semantics/dynamic/ShellCommand.java | 2 +- 12 files changed, 35 insertions(+), 51 deletions(-) diff --git a/src/org/rascalmpl/repl/IREPLService.java b/src/org/rascalmpl/repl/IREPLService.java index d81b1659693..e05f913d8ed 100644 --- a/src/org/rascalmpl/repl/IREPLService.java +++ b/src/org/rascalmpl/repl/IREPLService.java @@ -59,7 +59,7 @@ default List completers() { } /** - * This parser is respossible for multi-line support, as well as word splitting for completion. + * This parser is responsible for multi-line support, as well as word splitting for completion. */ default Parser inputParser() { return new DefaultParser(); @@ -89,16 +89,16 @@ default Path historyFile() { /** - * Givin a succesfull command (the {@see #inputParser()} returned no errors) execute the input - * @param input full string of the input terminiated by \n + * Given a successful command (the {@see #inputParser()} returned no errors) execute the input + * @param input full string of the input terminated by \n * @return a result that can be printed/displayed, depending on the context - * @throws InterruptedException the thread got getting interrupted, exit, don't print anything - * @throws StopREPLException the user requested to stop the REPL, clean exit the REPL, no new commands should be send + * @throws InterruptedException the thread got interrupted, exit, don't print anything + * @throws StopREPLException the user requested to stop the REPL, clean exit the REPL, no new commands should be sent */ ICommandOutput handleInput(String input) throws InterruptedException, StopREPLException; /** - * Will be called from a different thread then the one that called `handleInput` + * Will be called from a different thread than the one that called `handleInput` * Should try to stop the running command */ void handleInterrupt() throws InterruptedException; diff --git a/src/org/rascalmpl/repl/completers/RascalCommandCompletion.java b/src/org/rascalmpl/repl/completers/RascalCommandCompletion.java index e522e96c123..605a5a706c8 100644 --- a/src/org/rascalmpl/repl/completers/RascalCommandCompletion.java +++ b/src/org/rascalmpl/repl/completers/RascalCommandCompletion.java @@ -41,7 +41,7 @@ public class RascalCommandCompletion implements Completer { private static final NavigableMap COMMAND_KEYWORDS; static { COMMAND_KEYWORDS = new TreeMap<>(); - COMMAND_KEYWORDS.put("set", "change a evaluator setting"); + COMMAND_KEYWORDS.put("set", "change an evaluator setting"); COMMAND_KEYWORDS.put("undeclare", "undeclare a local variable of the REPL"); COMMAND_KEYWORDS.put("help", "print help message"); COMMAND_KEYWORDS.put("edit", "open a rascal module in the editor"); @@ -49,9 +49,9 @@ public class RascalCommandCompletion implements Completer { COMMAND_KEYWORDS.put("declarations", "show declarations"); // TODO figure out what it does COMMAND_KEYWORDS.put("quit", "cleanly exit the REPL"); COMMAND_KEYWORDS.put("history", "history"); // TODO: figure out what it does - COMMAND_KEYWORDS.put("test", "run rest modules"); + COMMAND_KEYWORDS.put("test", "run test modules"); COMMAND_KEYWORDS.put("modules", "show imported modules");// TODO: figure out what it does - COMMAND_KEYWORDS.put("clear", "clear repl screen"); + COMMAND_KEYWORDS.put("clear", "clear REPL screen"); } private final NavigableMap setOptions; diff --git a/src/org/rascalmpl/repl/completers/RascalKeywordCompletion.java b/src/org/rascalmpl/repl/completers/RascalKeywordCompletion.java index f8ddfd44c8f..f0a4bc67b82 100644 --- a/src/org/rascalmpl/repl/completers/RascalKeywordCompletion.java +++ b/src/org/rascalmpl/repl/completers/RascalKeywordCompletion.java @@ -40,23 +40,23 @@ public class RascalKeywordCompletion implements Completer { private static final NavigableMap RASCAL_TYPE_KEYWORDS; static { RASCAL_TYPE_KEYWORDS = new TreeMap<>(); - RASCAL_TYPE_KEYWORDS.put("void", "a type without any values"); - RASCAL_TYPE_KEYWORDS.put("int", "sequence of digits of arbitrary length"); + RASCAL_TYPE_KEYWORDS.put("void", "type without any values"); + RASCAL_TYPE_KEYWORDS.put("int", "sequences of digits of arbitrary length"); RASCAL_TYPE_KEYWORDS.put("real", "real numbers with arbitrary size and precision"); RASCAL_TYPE_KEYWORDS.put("num", "int/real/rat type"); RASCAL_TYPE_KEYWORDS.put("bool", "boolean type"); - RASCAL_TYPE_KEYWORDS.put("data", "user-defined type (Algebraic Data Type)."); + RASCAL_TYPE_KEYWORDS.put("data", "user-defined type (Algebraic Data Type)"); RASCAL_TYPE_KEYWORDS.put("datetime", "date/time/datetime values"); - RASCAL_TYPE_KEYWORDS.put("list", "ordered sequence of values"); + RASCAL_TYPE_KEYWORDS.put("list", "ordered sequences of values"); RASCAL_TYPE_KEYWORDS.put("lrel", "lists of tuples with relational calculus"); RASCAL_TYPE_KEYWORDS.put("loc", "source locations"); - RASCAL_TYPE_KEYWORDS.put("map", "a set of key/value pairs"); + RASCAL_TYPE_KEYWORDS.put("map", "sets of key/value pairs"); RASCAL_TYPE_KEYWORDS.put("node", "untyped trees"); - RASCAL_TYPE_KEYWORDS.put("set", "unordered sequence of values"); + RASCAL_TYPE_KEYWORDS.put("set", "unordered sequences of values"); RASCAL_TYPE_KEYWORDS.put("rel", "sets of tuples with relational calculus"); - RASCAL_TYPE_KEYWORDS.put("str", "a sequence of unicode codepoints"); - RASCAL_TYPE_KEYWORDS.put("tuple", "a sequence of elements"); - RASCAL_TYPE_KEYWORDS.put("value", "all possible values"); + RASCAL_TYPE_KEYWORDS.put("str", "sequences of unicode codepoints"); + RASCAL_TYPE_KEYWORDS.put("tuple", "sequences of elements"); + RASCAL_TYPE_KEYWORDS.put("value", "type with all possible values"); } @Override @@ -64,10 +64,10 @@ public void complete(LineReader reader, ParsedLine line, List candida var words = line.words(); if (words.size() == 1) { if ("import".startsWith(words.get(0))) { - add(candidates, "import", "statement", "import a module into the repl"); + add(candidates, "import", "statement", "import a module into the REPL"); } if ("extend".startsWith(words.get(0))) { - add(candidates, "extend", "statement", "extend a module into the repl"); + add(candidates, "extend", "statement", "extend a module into the REPL"); } } var firstWord = words.get(0); diff --git a/src/org/rascalmpl/repl/output/IBinaryOutputPrinter.java b/src/org/rascalmpl/repl/output/IBinaryOutputPrinter.java index cc9a8ad0811..84b6e573d6c 100644 --- a/src/org/rascalmpl/repl/output/IBinaryOutputPrinter.java +++ b/src/org/rascalmpl/repl/output/IBinaryOutputPrinter.java @@ -35,10 +35,10 @@ /** * Sometimes, an output produced a binary (such as an image or a executable file) - * In that case, you can return a return an overload of this type, which a renderer can add support for + * In that case, you can return an overload of this type, which a renderer can add support for * *

- * For example an output under the image/png would most likely have regular {@link IOutputPrinter#write(java.io.PrintWriter)} that prints a message saying it's a image that can't be printed as text, while the render (if it supports it) can cast it to this interface and get the actual bytes + * For example an output under the image/png would most likely have regular {@link IOutputPrinter#write(java.io.PrintWriter)} that prints a message saying it's an image that can't be printed as text, while the render (if it supports it) can cast it to this interface and get the actual bytes *

*/ public interface IBinaryOutputPrinter extends IOutputPrinter { @@ -54,7 +54,7 @@ default void write(OutputStream target) throws IOException { /** * Produce bytes that represent the output of a stream, in a streaming/pull style. Will only be called if {@linkplain #isBinary()} is true, the renderer supports it, and the renderer prefers an inputstream to copy from. - * @return an streaming representation of the bytes that makeup the output of the command + * @return a streaming representation of the bytes that makeup the output of the command */ default InputStream asInputStream() { try (var result = new ByteArrayOutputStream()) { @@ -62,7 +62,7 @@ default InputStream asInputStream() { return new ByteArrayInputStream(result.toByteArray()); } catch (IOException ex) { - throw new IllegalStateException("Write or Close should not have throw an exception", ex); + throw new IllegalStateException("Write or Close should not have thrown an exception", ex); } } diff --git a/src/org/rascalmpl/repl/output/ICommandOutput.java b/src/org/rascalmpl/repl/output/ICommandOutput.java index 968bd976a74..e3415ccc4a4 100644 --- a/src/org/rascalmpl/repl/output/ICommandOutput.java +++ b/src/org/rascalmpl/repl/output/ICommandOutput.java @@ -33,7 +33,7 @@ *

* *

- * {@link #asPlain()} should always be implemented as a fallback, although it is fine to print a message refering to the more content-rich output. For example: {@link IWebContentOutput} might print the url where the hosted content can be found. + * {@link #asPlain()} should always be implemented as a fallback, although it is fine to print a message referring to the more content-rich output. For example: {@link IWebContentOutput} might print the url where the hosted content can be found. *

*/ public interface ICommandOutput { diff --git a/src/org/rascalmpl/repl/output/IErrorCommandOutput.java b/src/org/rascalmpl/repl/output/IErrorCommandOutput.java index b29f936db55..931c7195dcf 100644 --- a/src/org/rascalmpl/repl/output/IErrorCommandOutput.java +++ b/src/org/rascalmpl/repl/output/IErrorCommandOutput.java @@ -27,7 +27,7 @@ package org.rascalmpl.repl.output; /** - * An error output, to denote that the actual responds should be printed/displayed in an error stream/box. + * An error output, to denote that the actual response should be printed/displayed in an error stream/box. */ public interface IErrorCommandOutput extends ICommandOutput { ICommandOutput getError(); diff --git a/src/org/rascalmpl/repl/output/ISourceLocationCommandOutput.java b/src/org/rascalmpl/repl/output/ISourceLocationCommandOutput.java index 7ca11f9fd81..f157d26913d 100644 --- a/src/org/rascalmpl/repl/output/ISourceLocationCommandOutput.java +++ b/src/org/rascalmpl/repl/output/ISourceLocationCommandOutput.java @@ -29,7 +29,7 @@ import io.usethesource.vallang.ISourceLocation; /** - * A binary output that can be read for a location direclty (instead of returning an {@link IBinaryOutputPrinter}) + * A binary output that can be read for a location directly (instead of returning an {@link IBinaryOutputPrinter}) */ public interface ISourceLocationCommandOutput extends ICommandOutput { ISourceLocation asLocation(); diff --git a/src/org/rascalmpl/repl/rascal/IRascalLanguageProtocol.java b/src/org/rascalmpl/repl/rascal/IRascalLanguageProtocol.java index 1f5424ad8f2..3e14ec09db0 100644 --- a/src/org/rascalmpl/repl/rascal/IRascalLanguageProtocol.java +++ b/src/org/rascalmpl/repl/rascal/IRascalLanguageProtocol.java @@ -39,7 +39,7 @@ /** - * Features that a Rascal REPL needs to behave like a rascal repl, this is extracted out so that these can be reused in a Notebook, but also so that we can have an compiler version of the REPL. + * Features that a Rascal REPL needs to behave like a rascal repl, this is extracted out so that these can be reused in a Notebook, but also so that we can have a compiler version of the REPL. */ public interface IRascalLanguageProtocol { @@ -54,8 +54,6 @@ public interface IRascalLanguageProtocol { /** * Try and parse a command, it's used for the REPL to decide if the command is complete - * @param command - * @return */ ITree parseCommand(String command); @@ -110,7 +108,6 @@ public interface IRascalLanguageProtocol { /** * which location will the rascal prompt be parsed under. This is used to detect parse errors in the input. - * @return */ ISourceLocation promptRootLocation(); } diff --git a/src/org/rascalmpl/repl/rascal/ParseErrorPrinter.java b/src/org/rascalmpl/repl/rascal/ParseErrorPrinter.java index 13093dcb716..df38ab10ce9 100644 --- a/src/org/rascalmpl/repl/rascal/ParseErrorPrinter.java +++ b/src/org/rascalmpl/repl/rascal/ParseErrorPrinter.java @@ -64,7 +64,7 @@ public class ParseErrorPrinter { */ public static IErrorCommandOutput parseErrorMaybePrompt(ParseError pe, ISourceLocation promptRoot, String input, Terminal term, int promptOffset) { if (pe.getLocation().top().equals(promptRoot) && ansiSupported(term)) { - // it's an prompt root + // it's a prompt root return buildPromptError(pe, input, term.writer(), promptOffset); } return new IErrorCommandOutput() { @@ -143,7 +143,7 @@ public void write(PrintWriter target, boolean unicodeSupported) { writeUnderLine(target, -1, "highlighted"); target.print(" text (line: "); target.print(pe.getBeginLine()); - target.print(" column: "); + target.print(", column: "); target.print(pe.getBeginColumn()); target.println(")"); @@ -177,7 +177,7 @@ private static void highlightErrorInInput(ParseError pe, String input, PrintWrit try { var lines = properSplit(input); int currentLine = lines.size(); - // first we go up untill the end of the error + // first we go up until the end of the error while (currentLine > pe.getEndLine()) { stdOut.write(Ansi.ansi().cursorUpLine().toString()); currentLine--; diff --git a/src/org/rascalmpl/repl/rascal/RascalInterpreterREPL.java b/src/org/rascalmpl/repl/rascal/RascalInterpreterREPL.java index ddf1e6c9a7c..e9dd361d5c4 100644 --- a/src/org/rascalmpl/repl/rascal/RascalInterpreterREPL.java +++ b/src/org/rascalmpl/repl/rascal/RascalInterpreterREPL.java @@ -69,7 +69,7 @@ import io.usethesource.vallang.IValueFactory; /** - * Implementation of a interpreter based Rascal REPL Service. + * Implementation of an interpreter based Rascal REPL Service. * In most cases you might want to override/extend the {@link #buildIDEService(PrintWriter, IRascalMonitor, Terminal)} and the {@link #buildEvaluator(Reader, PrintWriter, PrintWriter, IDEServices)} functions. */ public class RascalInterpreterREPL implements IRascalLanguageProtocol { @@ -109,10 +109,6 @@ public ISourceLocation promptRootLocation() { /** * Build an IDE service, in most places you want to override this function to construct a specific one for the setting you are in. - * @param err - * @param monitor - * @param term - * @return */ protected IDEServices buildIDEService(PrintWriter err, IRascalMonitor monitor, Terminal term) { return new BasicIDEServices(err, monitor, term); @@ -120,12 +116,6 @@ protected IDEServices buildIDEService(PrintWriter err, IRascalMonitor monitor, T /** * You might want to override/extend this function for different cases of where we're building a REPL (possible only extend on the result of it, by adding extra search path entries) - * @param input - * @param stdout - * @param stderr - * @param monitor - * @param services - * @return */ protected Evaluator buildEvaluator(Reader input, PrintWriter stdout, PrintWriter stderr, IDEServices services) { GlobalEnvironment heap = new GlobalEnvironment(); diff --git a/src/org/rascalmpl/repl/rascal/RascalLineParser.java b/src/org/rascalmpl/repl/rascal/RascalLineParser.java index 9b79b6724d7..11daf7e3968 100644 --- a/src/org/rascalmpl/repl/rascal/RascalLineParser.java +++ b/src/org/rascalmpl/repl/rascal/RascalLineParser.java @@ -256,7 +256,7 @@ private ParsedLine parseFullRascalCommand(String line, int cursor, boolean compl throw new EOFError(pe.getBeginLine(), pe.getBeginColumn(), "Parse error"); } catch (Throwable e) { - throw new EOFError(-1, -1, "Unexpected failure during pasing of the command: " + e.getMessage()); + throw new EOFError(-1, -1, "Unexpected failure during parsing of the command: " + e.getMessage()); } } @@ -310,11 +310,8 @@ else if (TreeAdapter.isTop(t)) { var length = loc == null ? TreeAdapter.yield(t).length() : loc.getLength(); if (isWord) { words.add(new LexedWord(line, offset, offset + length)); - return offset + length; - } - else { - return offset + length; } + return offset + length; } } diff --git a/src/org/rascalmpl/semantics/dynamic/ShellCommand.java b/src/org/rascalmpl/semantics/dynamic/ShellCommand.java index e526446702e..689fbe06747 100644 --- a/src/org/rascalmpl/semantics/dynamic/ShellCommand.java +++ b/src/org/rascalmpl/semantics/dynamic/ShellCommand.java @@ -76,7 +76,7 @@ public Result interpret(IEvaluator> __eval) { term.puts(Capability.clear_screen); } else { - __eval.getStdErr().println("There is not terminal available to clear"); + __eval.getStdErr().println("There is no terminal available to clear"); } } else { From 689b9830c341278d6053a67a6ce6283bfc86f340 Mon Sep 17 00:00:00 2001 From: Davy Landman Date: Tue, 14 Jan 2025 16:57:26 +0100 Subject: [PATCH 178/191] Process review remarks --- .../interpreter/BatchProgressMonitor.java | 2 +- src/org/rascalmpl/interpreter/Evaluator.java | 24 ++++---- .../interpreter/IEvaluatorContext.java | 3 +- src/org/rascalmpl/library/util/TermREPL.java | 8 +-- src/org/rascalmpl/repl/BaseREPL.java | 11 +++- src/org/rascalmpl/repl/IREPLService.java | 10 ++-- .../output/impl/AsciiStringOutputPrinter.java | 4 +- .../parametric/ParametricReplService.java | 17 ++---- .../repl/rascal/IRascalLanguageProtocol.java | 7 ++- .../repl/rascal/ParseErrorPrinter.java | 45 ++++++-------- .../repl/rascal/RascalInterpreterREPL.java | 16 ++--- .../repl/rascal/RascalLineParser.java | 7 ++- .../repl/rascal/RascalReplServices.java | 5 +- src/org/rascalmpl/shell/REPLRunner.java | 2 +- src/org/rascalmpl/shell/RascalShell.java | 60 +++++++++++-------- .../test/infrastructure/TestFramework.java | 1 - 16 files changed, 110 insertions(+), 112 deletions(-) diff --git a/src/org/rascalmpl/interpreter/BatchProgressMonitor.java b/src/org/rascalmpl/interpreter/BatchProgressMonitor.java index 43e3768d2c8..3da79f59810 100644 --- a/src/org/rascalmpl/interpreter/BatchProgressMonitor.java +++ b/src/org/rascalmpl/interpreter/BatchProgressMonitor.java @@ -28,7 +28,7 @@ public BatchProgressMonitor() { } public BatchProgressMonitor(PrintStream out) { - this(new PrintWriter(out)); + this(new PrintWriter(out, true)); } public BatchProgressMonitor(PrintWriter out) { diff --git a/src/org/rascalmpl/interpreter/Evaluator.java b/src/org/rascalmpl/interpreter/Evaluator.java index 2950bb1c607..e2a73260437 100755 --- a/src/org/rascalmpl/interpreter/Evaluator.java +++ b/src/org/rascalmpl/interpreter/Evaluator.java @@ -1716,7 +1716,7 @@ private void addCompletionsForModule(String qualifier, String partialIdentifier, } if (module.startsWith(qualifier)) { - addIt(result, "function", p.getFirst(), qualifier.isEmpty() ? "" : module, module.startsWith(partialModuleName) ? "" : partialIdentifier); + addCandidate(result, "function", p.getFirst(), qualifier.isEmpty() ? "" : module, module.startsWith(partialModuleName) ? "" : partialIdentifier); } } } @@ -1726,38 +1726,38 @@ private void addCompletionsForModule(String qualifier, String partialIdentifier, if (skipPrivate && env.isNamePrivate(entry.getKey())) { continue; } - addIt(result, "variable", entry.getKey(), qualifier, partialIdentifier); + addCandidate(result, "variable", entry.getKey(), qualifier, partialIdentifier); } for (Type t: env.getAbstractDatatypes()) { if (inQualifiedModule) { - addIt(result, "ADT", t.getName(), qualifier, partialIdentifier); + addCandidate(result, "ADT", t.getName(), qualifier, partialIdentifier); } } for (Type t: env.getAliases()) { - addIt(result, "alias", t.getName(), qualifier, partialIdentifier); + addCandidate(result, "alias", t.getName(), qualifier, partialIdentifier); } } if (qualifier.isEmpty()) { Map> annos = env.getAnnotations(); for (Type t: annos.keySet()) { for (String k: annos.get(t).keySet()) { - addIt(result, "annotation", k, "", partialIdentifier); + addCandidate(result, "annotation", k, "", partialIdentifier); } } } } - private static void addIt(SortedMap result, String category, String v, String qualifier, String originalTerm) { - if (v.startsWith(originalTerm) && !v.equals(originalTerm)) { - if (v.contains("-")) { - v = "\\" + v; + private static void addCandidate(SortedMap result, String category, String name, String qualifier, String originalTerm) { + if (name.startsWith(originalTerm) && !name.equals(originalTerm)) { + if (name.contains("-")) { + name = "\\" + name; } - if (!qualifier.isEmpty() && !v.startsWith(qualifier)) { - v = qualifier + "::" + v; + if (!qualifier.isEmpty() && !name.startsWith(qualifier)) { + name = qualifier + "::" + name; } - result.put(v, category); + result.put(name, category); } } diff --git a/src/org/rascalmpl/interpreter/IEvaluatorContext.java b/src/org/rascalmpl/interpreter/IEvaluatorContext.java index 25562ff4b68..9fa93b3dc77 100644 --- a/src/org/rascalmpl/interpreter/IEvaluatorContext.java +++ b/src/org/rascalmpl/interpreter/IEvaluatorContext.java @@ -74,6 +74,7 @@ public interface IEvaluatorContext extends IRascalMonitor { public Stack getAccumulators(); - /** @return identifiers and their category (variable, function, etc) */ + /** Given a (possibly empty) qualifier and a partial identifier, look in the current root environment if there are names defined that could match the partial names + * @return identifiers and their category (variable, function, etc) */ public Map completePartialIdentifier(String qualifier, String partialIdentifier); } diff --git a/src/org/rascalmpl/library/util/TermREPL.java b/src/org/rascalmpl/library/util/TermREPL.java index ae0ba830c16..35baa3e45e4 100644 --- a/src/org/rascalmpl/library/util/TermREPL.java +++ b/src/org/rascalmpl/library/util/TermREPL.java @@ -224,15 +224,15 @@ public IOutputPrinter asNotebook() { @Override public void write(PrintWriter target, boolean unicodeSupported) { target.println("