diff --git a/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/Components.java b/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/Components.java index f87fb5ca3..b9590b24d 100644 --- a/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/Components.java +++ b/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/Components.java @@ -24,8 +24,8 @@ import org.panda_lang.language.architecture.statement.Scope; import org.panda_lang.language.architecture.module.TypeLoader; import org.panda_lang.language.interpreter.parser.expression.ExpressionParser; -import org.panda_lang.language.interpreter.parser.stage.StageController; -import org.panda_lang.language.interpreter.parser.pipeline.PipelinePath; +import org.panda_lang.language.interpreter.parser.stage.StageManager; +import org.panda_lang.language.interpreter.parser.pool.ParserPoolService; import org.panda_lang.language.interpreter.source.SourceSet; import org.panda_lang.language.interpreter.token.Snippet; import org.panda_lang.language.interpreter.token.SourceStream; @@ -48,12 +48,12 @@ public final class Components { /** * Represents the generation */ - public static final ContextComponent GENERATION = ContextComponent.of("generation", StageController.class); + public static final ContextComponent STAGE = ContextComponent.of("generation", StageManager.class); /** * Represents the pipeline path with all registered pipelines */ - public static final ContextComponent PIPELINE = ContextComponent.of("pipeline-path", PipelinePath.class); + public static final ContextComponent PIPELINE = ContextComponent.of("pipeline-path", ParserPoolService.class); /** * Represents the main expression parser with all registered subparsers diff --git a/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/Context.java b/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/Context.java index 871ff4919..a77436e32 100644 --- a/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/Context.java +++ b/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/Context.java @@ -16,32 +16,63 @@ package org.panda_lang.language.interpreter.parser; -import java.util.Map; +import org.panda_lang.language.FrameworkController; +import org.panda_lang.language.architecture.Application; +import org.panda_lang.language.architecture.Environment; +import org.panda_lang.language.architecture.Script; +import org.panda_lang.language.architecture.module.Imports; +import org.panda_lang.language.architecture.module.TypeLoader; +import org.panda_lang.language.architecture.statement.Scope; +import org.panda_lang.language.interpreter.logging.LoggerHolder; +import org.panda_lang.language.interpreter.parser.expression.ExpressionParser; +import org.panda_lang.language.interpreter.parser.pool.ParserPoolService; +import org.panda_lang.language.interpreter.parser.stage.StageService; +import org.panda_lang.language.interpreter.source.SourceSet; +import org.panda_lang.language.interpreter.token.Snippet; +import org.panda_lang.language.interpreter.token.SourceStream; /** * Component based set of data used during the interpretation process */ -public interface Context extends Contextual { +public interface Context extends Contextual, LoggerHolder { /** * Clone context to a new independent instance */ - Context fork(); + Context fork(); - /** - * @param componentName a name of the specified component - */ - Context withComponent(ContextComponent componentName, T component); + ContextCreator forkCreator(); - /*** - * @param componentName a name of the specified component - * @return selected component - */ - T getComponent(ContextComponent componentName); + T getSubject(); - /** - * @return all components stored in the current parser data - */ - Map, ? extends Object> getComponents(); + SourceStream getStream(); + + LocalChannel getChannel(); + + Snippet getSource(); + + Scope getScope(); + + Imports getImports(); + + Snippet getScriptSource(); + + Script getScript(); + + SourceSet getSourceSet(); + + Application getApplication(); + + TypeLoader getTypeLoader(); + + ExpressionParser getExpressionParser(); + + ParserPoolService getPoolService(); + + StageService getStageService(); + + Environment getEnvironment(); + + FrameworkController getFrameworkController(); } diff --git a/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/ContextCreator.java b/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/ContextCreator.java new file mode 100644 index 000000000..bc25afff0 --- /dev/null +++ b/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/ContextCreator.java @@ -0,0 +1,27 @@ +package org.panda_lang.language.interpreter.parser; + +import org.panda_lang.language.architecture.Script; +import org.panda_lang.language.architecture.module.Imports; +import org.panda_lang.language.architecture.statement.Scope; +import org.panda_lang.language.interpreter.token.Snippet; +import org.panda_lang.language.interpreter.token.SourceStream; + +public interface ContextCreator extends Contextual { + + ContextCreator fork(); + + ContextCreator withSubject(T subject); + + ContextCreator withStream(SourceStream stream); + + ContextCreator withSource(Snippet source); + + ContextCreator withScope(Scope scope); + + ContextCreator withImports(Imports imports); + + ContextCreator withScriptSource(Snippet scriptSource); + + ContextCreator withScript(Script script); + +} diff --git a/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/ContextParser.java b/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/ContextParser.java index 6298525f3..de17df809 100644 --- a/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/ContextParser.java +++ b/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/ContextParser.java @@ -16,18 +16,24 @@ package org.panda_lang.language.interpreter.parser; +import org.panda_lang.utilities.commons.function.Option; + +import java.util.concurrent.CompletableFuture; + /** * Represents parsers supported by pipelines * * @param type of result */ -public interface ContextParser extends Parser { +public interface ContextParser extends Parser { + + default void initialize(Context context) { } /** * Parse context * * @param context set of information about source and interpretation process */ - T parse(Context context); + Option> parse(Context context); } diff --git a/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/Contextual.java b/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/Contextual.java index babbcb6b7..7051e6190 100644 --- a/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/Contextual.java +++ b/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/Contextual.java @@ -16,8 +16,8 @@ package org.panda_lang.language.interpreter.parser; -public interface Contextual { +public interface Contextual { - Context toContext(); + Context toContext(); } diff --git a/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/LocalChannel.java b/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/LocalChannel.java deleted file mode 100644 index a6f88fee1..000000000 --- a/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/LocalChannel.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright (c) 2020 Dzikoysk - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.panda_lang.language.interpreter.parser; - -import java.util.Map; - -/** - * The communication channel between {@link org.panda_lang.language.interpreter.parser.pipeline.Handler} and parser. - * In some cases, it may be helpful to reuse some already processed data from handler. - */ -public interface LocalChannel { - - /** - * Put some unique data in the channel - * - * @param identifier the identifier (key) of data - * @param value the value to store - * @return the allocated instance - */ - T allocated(String identifier, T value); - - /** - * Put some data in the channel and override the previous value in case of duplicate - * - * @param identifier the identifier (key) of data - * @param value the value to store - * @param type of data - * @return the allocated instance - */ - T override(String identifier, T value); - - /** - * Check if channel contains the given value - * - * @param type the type to search for - * @return true if channel contains the requested data - */ - boolean contains(Class type); - - /** - * Check if channel contains the given value - * - * @param element the identifier to search for - * @return true if channel contains the requested data - */ - boolean contains(String element); - - /** - * Get data from the channel - * - * @param type type of value to get - * @param the type - * @return the data - */ - T get(Class type); - - /** - * Get data from the channel - * - * @param identifier the identifier of value to get - * @param the type - * @return the data - */ - T get(String identifier); - - /** - * Get data from the channel - * - * @param identifier the identifier of value to get - * @param type the class of the data - * @param the type - * @return the data - */ - T get(String identifier, Class type); - - /** - * Get data container - * - * @return the map that contains channel data - */ - Map getData(); - -} diff --git a/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/PandaContext.java b/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/PandaContext.java index da53ca8f3..586da673d 100644 --- a/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/PandaContext.java +++ b/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/PandaContext.java @@ -16,50 +16,96 @@ package org.panda_lang.language.interpreter.parser; -import java.util.HashMap; -import java.util.Map; +import org.panda_lang.language.FrameworkController; +import org.panda_lang.language.architecture.Application; +import org.panda_lang.language.architecture.Environment; +import org.panda_lang.language.architecture.Script; +import org.panda_lang.language.architecture.module.Imports; +import org.panda_lang.language.architecture.module.TypeLoader; +import org.panda_lang.language.architecture.statement.Scope; +import org.panda_lang.language.interpreter.logging.Logger; +import org.panda_lang.language.interpreter.parser.expression.ExpressionParser; +import org.panda_lang.language.interpreter.parser.pool.ParserPoolService; +import org.panda_lang.language.interpreter.parser.stage.StageService; +import org.panda_lang.language.interpreter.source.SourceSet; +import org.panda_lang.language.interpreter.token.Snippet; +import org.panda_lang.language.interpreter.token.SourceStream; -public final class PandaContext implements Context { +// @formatter:off +public class PandaContext implements Context { - private final Map, Object> components; + protected final PandaContextCreator creator; - private PandaContext(Map, Object> components) { - this.components = components; + protected PandaContext(PandaContextCreator creator) { + this.creator = creator; } - public PandaContext() { - this(new HashMap<>()); + @Override + public PandaContext fork() { + return new PandaContext(creator.fork()); } @Override - public PandaContext fork() { - return new PandaContext(new HashMap<>(components)); + public ContextCreator forkCreator() { + return creator.fork(); } @Override - public PandaContext withComponent(ContextComponent component, T value) { - this.components.put(component, value); + public Context toContext() { return this; } - /** - * @param componentName a name of the specified component - * @return selected component - */ @Override - @SuppressWarnings({ "unchecked" }) - public T getComponent(ContextComponent componentName) { - return (T) components.get(componentName); + public Logger getLogger() { + return getFrameworkController().getLogger(); } @Override - public Map, ? extends Object> getComponents() { - return new HashMap<>(components); - } + public T getSubject() { return creator.subject; } @Override - public Context toContext() { - return this; - } + public SourceStream getStream() { return creator.stream; } + + @Override + public LocalChannel getChannel() { return creator.channel; } + + @Override + public Snippet getSource() { return creator.source; } + + @Override + public Scope getScope() { return creator.scope; } + + @Override + public Imports getImports() { return creator.imports; } + + @Override + public Snippet getScriptSource() { return creator.scriptSource; } + + @Override + public Script getScript() { return creator.script; } + + @Override + public SourceSet getSourceSet() { return creator.sourceSet; } + + @Override + public Application getApplication() { return creator.application; } + + @Override + public TypeLoader getTypeLoader() { return creator.typeLoader; } + + @Override + public ExpressionParser getExpressionParser() { return creator.expressionParser; } + + @Override + public ParserPoolService getPoolService() { return creator.parserPoolService; } + + @Override + public StageService getStageService() { return creator.stageService; } + + @Override + public Environment getEnvironment() { return creator.environment; } + + @Override + public FrameworkController getFrameworkController() { return creator.frameworkController; } } diff --git a/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/PandaContextCreator.java b/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/PandaContextCreator.java new file mode 100644 index 000000000..78cced295 --- /dev/null +++ b/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/PandaContextCreator.java @@ -0,0 +1,125 @@ +package org.panda_lang.language.interpreter.parser; + +import org.panda_lang.language.FrameworkController; +import org.panda_lang.language.architecture.Application; +import org.panda_lang.language.architecture.Environment; +import org.panda_lang.language.architecture.Script; +import org.panda_lang.language.architecture.module.Imports; +import org.panda_lang.language.architecture.module.TypeLoader; +import org.panda_lang.language.architecture.statement.Scope; +import org.panda_lang.language.interpreter.parser.expression.ExpressionParser; +import org.panda_lang.language.interpreter.parser.pool.ParserPoolService; +import org.panda_lang.language.interpreter.parser.stage.StageService; +import org.panda_lang.language.interpreter.source.SourceSet; +import org.panda_lang.language.interpreter.token.Snippet; +import org.panda_lang.language.interpreter.token.SourceStream; + +public class PandaContextCreator implements ContextCreator { + + protected final FrameworkController frameworkController; + protected final Environment environment; + protected final StageService stageService; + protected final ParserPoolService parserPoolService; + protected final ExpressionParser expressionParser; + protected final TypeLoader typeLoader; + protected final Application application; + protected final SourceSet sourceSet; + protected Script script; + protected Snippet scriptSource; + protected Imports imports; + protected Scope scope; + protected Snippet source; + protected SourceStream stream; + protected T subject; + + public PandaContextCreator( + FrameworkController frameworkController, + Environment environment, + StageService stageService, + ParserPoolService parserPoolService, + ExpressionParser expressionParser, + TypeLoader typeLoader, + Application application, + SourceSet sourceSet) { + + this.frameworkController = frameworkController; + this.environment = environment; + this.stageService = stageService; + this.parserPoolService = parserPoolService; + this.expressionParser = expressionParser; + this.typeLoader = typeLoader; + this.application = application; + this.sourceSet = sourceSet; + } + + @Override + public PandaContextCreator fork() { + PandaContextCreator fork = new PandaContextCreator<>( + frameworkController, + environment, + stageService, + parserPoolService, + expressionParser, + typeLoader, + application, + sourceSet); + + fork.script = script; + fork.scriptSource = scriptSource; + fork.imports = imports; + fork.scope = scope; + fork.source = source; + fork.stream = stream; + fork.subject = subject; + + return fork; + } + + @Override + public ContextCreator withSubject(T subject) { + this.subject = subject; + return this; + } + + @Override + public ContextCreator withStream(SourceStream stream) { + this.stream = stream; + return this; + } + + @Override + public ContextCreator withSource(Snippet source) { + this.source = source; + return this; + } + + @Override + public ContextCreator withScope(Scope scope) { + this.scope = scope; + return this; + } + + @Override + public ContextCreator withImports(Imports imports) { + this.imports = imports; + return this; + } + + @Override + public ContextCreator withScriptSource(Snippet scriptSource) { + this.scriptSource = scriptSource; + return this; + } + + @Override + public ContextCreator withScript(Script script) { + this.script = script; + return this; + } + + @Override + public Context toContext() { + return new PandaContext<>(this); + } + +} diff --git a/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/Parser.java b/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/Parser.java index a0edd3480..d4dad2527 100644 --- a/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/Parser.java +++ b/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/Parser.java @@ -21,4 +21,6 @@ */ public interface Parser { -} + String getName(); + +} \ No newline at end of file diff --git a/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/pipeline/Handler.java b/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/pipeline/Handler.java deleted file mode 100644 index 709234367..000000000 --- a/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/pipeline/Handler.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (c) 2020 Dzikoysk - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.panda_lang.language.interpreter.parser.pipeline; - -import org.jetbrains.annotations.Nullable; -import org.panda_lang.language.interpreter.parser.Context; -import org.panda_lang.language.interpreter.parser.LocalChannel; -import org.panda_lang.language.interpreter.parser.Parser; -import org.panda_lang.language.interpreter.token.Snippet; - -/** - * Checkout the requested source - */ -public interface Handler { - - /** - * Handle source, possible results: - * - *
    - *
  • InterpreterFailure - that will be stored and printed if there is no matching handler
  • - *
  • Exception - that will interrupt pipeline
  • - *
  • boolean - true/false if matched or not
  • - *
  • other/null - illegal return value
  • - *
- * - * @param source source - * @return the result object - */ - @Nullable Object handle(Context context, LocalChannel channel, Snippet source); - - default PipelineComponent[] pipeline() { - throw new UnsupportedOperationException("Pipeline method not implemented"); - } - - default double priority() { - return 0; - } - -} diff --git a/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/pipeline/PandaLocalChannel.java b/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/pipeline/PandaLocalChannel.java deleted file mode 100644 index f9b6d9400..000000000 --- a/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/pipeline/PandaLocalChannel.java +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Copyright (c) 2020 Dzikoysk - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.panda_lang.language.interpreter.parser.pipeline; - -import org.panda_lang.language.interpreter.parser.LocalChannel; -import org.panda_lang.utilities.commons.ObjectUtils; -import org.panda_lang.utilities.commons.function.Option; - -import java.util.HashMap; -import java.util.Map; -import java.util.Map.Entry; -import java.util.NoSuchElementException; - -public final class PandaLocalChannel implements LocalChannel { - - private static final int DEFAULT_SIZE = 8; - - private final Map data; - - public PandaLocalChannel() { - this.data = new HashMap<>(DEFAULT_SIZE); - } - - public PandaLocalChannel(LocalChannel channel) { - this.data = new HashMap<>(channel.getData().size() + DEFAULT_SIZE); - this.data.putAll(channel.getData()); - } - - @Override - public T allocated(String identifier, T value) { - Object previous = data.put(identifier, value); - - if (previous != null) { - throw new IllegalStateException("Duplicated identifier '" + identifier + "'"); - } - - return value; - } - - @Override - public T override(String identifier, T value) { - data.put(identifier, value); - return value; - } - - @Override - public boolean contains(Class type) { - for (Entry entry : data.entrySet()) { - Object value = entry.getValue(); - - if (value != null && type.isAssignableFrom(value.getClass())) { - return true; - } - } - - return false; - } - - @Override - public boolean contains(String identifier) { - return data.containsKey(identifier); - } - - @Override - public T get(Class type) { - for (Entry entry : data.entrySet()) { - Object value = entry.getValue(); - - if (value != null && type.isAssignableFrom(value.getClass())) { - return ObjectUtils.cast(value); - } - } - - throw new NoSuchElementException("Cannot find data matching " + type.getSimpleName() + " type in current channel"); - } - - @Override - public T get(String identifier, Class type) { - return get(identifier); - } - - @Override - @SuppressWarnings("unchecked") - public T get(String identifier) { - return (T) Option.of(data.get(identifier)).orThrow(() -> { - throw new NoSuchElementException("'" + identifier + "' value not found in channel"); - }); - } - - @Override - public Map getData() { - return data; - } - -} diff --git a/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/pipeline/PandaParserRepresentation.java b/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/pipeline/PandaParserRepresentation.java deleted file mode 100644 index 3e2d4df1d..000000000 --- a/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/pipeline/PandaParserRepresentation.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright (c) 2020 Dzikoysk - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.panda_lang.language.interpreter.parser.pipeline; - -import org.panda_lang.language.interpreter.parser.Parser; -import org.panda_lang.language.interpreter.parser.ParserRepresentation; - -public final class PandaParserRepresentation

implements ParserRepresentation

{ - - private final P parser; - private final Handler handler; - private final double priority; - private int usages; - - public PandaParserRepresentation(P parser, Handler handler, double priority) { - this.parser = parser; - this.handler = handler; - this.priority = priority; - } - - @Override - public void increaseUsages() { - usages++; - } - - @Override - public int getUsages() { - return usages; - } - - @Override - public double getPriority() { - return priority; - } - - @Override - public Handler getHandler() { - return handler; - } - - @Override - public P getParser() { - return parser; - } - -} \ No newline at end of file diff --git a/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/pipeline/PandaPipeline.java b/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/pipeline/PandaPipeline.java deleted file mode 100644 index 19c644af5..000000000 --- a/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/pipeline/PandaPipeline.java +++ /dev/null @@ -1,138 +0,0 @@ -/* - * Copyright (c) 2020 Dzikoysk - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.panda_lang.language.interpreter.parser.pipeline; - -import org.panda_lang.language.Failure; -import org.panda_lang.language.PandaFrameworkException; -import org.panda_lang.language.interpreter.parser.Context; -import org.panda_lang.language.interpreter.parser.LocalChannel; -import org.panda_lang.language.interpreter.parser.Parser; -import org.panda_lang.language.interpreter.parser.ParserRepresentation; -import org.panda_lang.language.interpreter.token.Snippet; -import org.panda_lang.utilities.commons.function.Option; -import org.panda_lang.utilities.commons.function.Result; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Comparator; -import java.util.List; - -public final class PandaPipeline

implements Pipeline

{ - - private final String name; - private final Pipeline

parentPipeline; - private final List> representations; - private final Comparator comparator; - private long handleTime; - private int count; - - public PandaPipeline(String name) { - this(null, name); - } - - public PandaPipeline(Pipeline

parentPipeline, String name) { - this.name = name; - this.parentPipeline = parentPipeline; - this.representations = new ArrayList<>(); - this.comparator = new ParserRepresentationComparator(); - } - - @Override - public Result> handle(Context context, LocalChannel channel, Snippet source) { - if (count > 1000) { - count = 0; - sort(); - } - - if (parentPipeline != null) { - Result> result = handle(context, channel, source, parentPipeline.getRepresentations()); - - if (result.isOk()) { - return result; - } - } - - return handle(context, channel, source, representations); - } - - private Result> handle(Context context, LocalChannel channel, Snippet source, Collection> representations) { - long currentTime = System.nanoTime(); - Failure failure = null; - - for (ParserRepresentation

representation : representations) { - Handler handler = representation.getHandler(); - Object value = handler.handle(context, channel, source); - - if (value instanceof Failure) { - failure = (Failure) value; - continue; - } - - if (value instanceof Exception) { - Exception exception = (Exception) value; - throw new PandaFrameworkException("Handler exception: " + exception.getMessage(), exception); - } - - if (!(value instanceof Boolean) && value != null) { - throw new PandaFrameworkException("Illegal result type from handler " + handler.getClass() + ": returned " + value.getClass()); - } - - if (value == null) { - throw new PandaFrameworkException("Handler returned null value"); - } - - if ((Boolean) value) { - representation.increaseUsages(); - - long time = System.nanoTime() - currentTime; - handleTime += time; - count++; - - return Result.ok(representation.getParser()); - } - } - - handleTime += (System.nanoTime() - currentTime); - return Result.error(Option.of(failure)); - } - - protected void sort() { - representations.sort(comparator); - } - - @Override - public void register(ParserRepresentation

parserRepresentation) { - representations.add(parserRepresentation); - sort(); - } - - @Override - public long getHandleTime() { - return handleTime; - } - - @Override - public List> getRepresentations() { - return representations; - } - - @Override - public String getName() { - return name; - } - -} diff --git a/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/pipeline/ParserRepresentationComparator.java b/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/pipeline/ParserRepresentationComparator.java deleted file mode 100644 index 2a2df4322..000000000 --- a/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/pipeline/ParserRepresentationComparator.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (c) 2020 Dzikoysk - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.panda_lang.language.interpreter.parser.pipeline; - -import org.panda_lang.language.interpreter.parser.ParserRepresentation; - -import java.util.Comparator; - -public final class ParserRepresentationComparator implements Comparator { - - @Override - public int compare(ParserRepresentation parserRepresentation, ParserRepresentation parserRepresentationTo) { - int priority = Double.compare(parserRepresentation.getPriority(), parserRepresentationTo.getPriority()); - - if (priority != 0) { - return priority; - } - - return Integer.compare(parserRepresentation.getUsages(), parserRepresentationTo.getUsages()); - } - -} diff --git a/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/pipeline/Pipeline.java b/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/pipeline/Pipeline.java deleted file mode 100644 index 5fa9e7296..000000000 --- a/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/pipeline/Pipeline.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright (c) 2020 Dzikoysk - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.panda_lang.language.interpreter.parser.pipeline; - -import org.panda_lang.language.Failure; -import org.panda_lang.language.interpreter.parser.Context; -import org.panda_lang.language.interpreter.parser.LocalChannel; -import org.panda_lang.language.interpreter.parser.Parser; -import org.panda_lang.language.interpreter.parser.ParserRepresentation; -import org.panda_lang.language.interpreter.token.Snippet; -import org.panda_lang.utilities.commons.function.Option; -import org.panda_lang.utilities.commons.function.Result; - -import java.util.Collection; - -public interface Pipeline

{ - - /** - * Search for the parser through the pipeline with untouched source - * - * @param context the current context - * @param channel the channel between handler and parser - * @param source the source - * @return parser which fits to the source - */ - Result> handle(Context context, LocalChannel channel, Snippet source); - - /** - * Register the specified parser to - * - * @param parserRepresentation specified parser representation which will be registered in the pipeline - */ - void register(ParserRepresentation

parserRepresentation); - - /** - * @return a collection of registered parser - */ - Collection> getRepresentations(); - - /** - * Get total time of data handling - * - * @return total handle time in nanoseconds - */ - long getHandleTime(); - - /** - * Get name of pipeline - * - * @return the name - */ - String getName(); - -} diff --git a/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/pool/PandaParserPool.java b/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/pool/PandaParserPool.java new file mode 100644 index 000000000..e1e77f39e --- /dev/null +++ b/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/pool/PandaParserPool.java @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2020 Dzikoysk + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.panda_lang.language.interpreter.parser.pool; + +import org.panda_lang.language.interpreter.parser.Parser; +import org.panda_lang.utilities.commons.iterable.ResourcesIterable; + +import java.util.ArrayList; +import java.util.List; + +public final class PandaParserPool

implements ParserPool

{ + + private final String name; + private final ParserPool

parentPool; + private final List

parsers; + + public PandaParserPool(String name) { + this(null, name); + } + + public PandaParserPool(ParserPool

parentPool, String name) { + this.name = name; + this.parentPool = parentPool; + this.parsers = new ArrayList<>(); + } + + @Override + public void register(P parser) { + parsers.add(parser); + } + + @Override + public Iterable getParsers() { + return parentPool != null ? new ResourcesIterable<>(parentPool.getParsers(), parsers) : parsers; + } + + @Override + public String getName() { + return name; + } + +} diff --git a/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/pipeline/PandaPipelinePath.java b/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/pool/PandaParserPoolService.java similarity index 50% rename from panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/pipeline/PandaPipelinePath.java rename to panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/pool/PandaParserPoolService.java index 98345e3f0..f3e955c77 100644 --- a/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/pipeline/PandaPipelinePath.java +++ b/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/pool/PandaParserPoolService.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.panda_lang.language.interpreter.parser.pipeline; +package org.panda_lang.language.interpreter.parser.pool; import org.panda_lang.language.interpreter.parser.Parser; import org.panda_lang.utilities.commons.function.StreamUtils; @@ -24,40 +24,35 @@ import java.util.HashMap; import java.util.Map; -public final class PandaPipelinePath implements PipelinePath { +public final class PandaParserPoolService implements ParserPoolService { - private final Map, Pipeline> pipelines = new HashMap<>(3); + private final Map, ParserPool> pipelines = new HashMap<>(3); - public PandaPipelinePath() { - pipelines.put(Pipelines.ALL, new PandaPipeline<>(Pipelines.ALL.getName())); + public PandaParserPoolService() { + pipelines.put(Targets.ALL, new PandaParserPool<>(Targets.ALL.getName())); } @Override - public

Pipeline

computeIfAbsent(PipelineComponent

component) { - Pipeline

pipeline = getPipeline(component); + public

ParserPool

computeIfAbsent(Target

component) { + ParserPool

parserPool = getPool(component); - if (pipeline == null) { - pipelines.put(component, new PandaPipeline<>(pipelines.get(Pipelines.ALL), component.getName())); - pipeline = getPipeline(component); + if (parserPool == null) { + pipelines.put(component, new PandaParserPool<>(pipelines.get(Targets.ALL), component.getName())); + parserPool = getPool(component); } - return pipeline; + return parserPool; } @Override - public boolean hasPipeline(PipelineComponent component) { - return getPipeline(component) != null; + public boolean hasPool(Target component) { + return getPool(component) != null; } @Override @SuppressWarnings("unchecked") - public

Pipeline

getPipeline(PipelineComponent

component) { - return (Pipeline

) pipelines.get(component); - } - - @Override - public long getTotalHandleTime() { - return StreamUtils.sumLongs(pipelines.values(), Pipeline::getHandleTime); + public

ParserPool

getPool(Target

component) { + return (ParserPool

) pipelines.get(component); } @Override diff --git a/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/ParserRepresentation.java b/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/pool/ParserPool.java similarity index 52% rename from panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/ParserRepresentation.java rename to panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/pool/ParserPool.java index 606a03a6d..33d74440d 100644 --- a/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/ParserRepresentation.java +++ b/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/pool/ParserPool.java @@ -14,40 +14,29 @@ * limitations under the License. */ -package org.panda_lang.language.interpreter.parser; +package org.panda_lang.language.interpreter.parser.pool; -import org.panda_lang.language.interpreter.parser.pipeline.Handler; +import org.panda_lang.language.interpreter.parser.Parser; -/** - * Parser container - * - * @param

type of stored parser - */ -public interface ParserRepresentation

{ - - /** - * Add 1 to number of use. It's used to optimization process of parsing. - */ - void increaseUsages(); - - /** - * @return amount of usages - */ - int getUsages(); +public interface ParserPool

{ /** - * @return priority + * Register the specified parser to + * + * @param parser specified parser representation which will be registered in the pipeline */ - double getPriority(); + void register(P parser); /** - * @return associated handler + * @return a collection of registered parser */ - Handler getHandler(); + Iterable getParsers(); /** - * @return associated parser + * Get name of pipeline + * + * @return the name */ - P getParser(); + String getName(); } diff --git a/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/pipeline/PipelinePath.java b/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/pool/ParserPoolService.java similarity index 76% rename from panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/pipeline/PipelinePath.java rename to panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/pool/ParserPoolService.java index 0b85ad096..984308881 100644 --- a/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/pipeline/PipelinePath.java +++ b/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/pool/ParserPoolService.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.panda_lang.language.interpreter.parser.pipeline; +package org.panda_lang.language.interpreter.parser.pool; import org.panda_lang.language.interpreter.parser.Parser; @@ -23,7 +23,7 @@ /** * Container of pipelines */ -public interface PipelinePath { +public interface ParserPoolService { /** * Create a new pipeline based on the given component @@ -32,7 +32,7 @@ public interface PipelinePath { * @param

type of parsers represented by pipeline * @return a new pipeline */ -

Pipeline

computeIfAbsent(PipelineComponent

component); +

ParserPool

computeIfAbsent(Target

component); /** * Check if path contains the given pipeline @@ -40,7 +40,7 @@ public interface PipelinePath { * @param component the identifier of pipeline to search for * @return true if pipeline exists in the path, otherwise false */ - boolean hasPipeline(PipelineComponent component); + boolean hasPool(Target component); /** * Get pipeline using the given component @@ -49,14 +49,7 @@ public interface PipelinePath { * @param

the type of represented parsers by requested pipeline * @return the found pipeline */ -

Pipeline

getPipeline(PipelineComponent

component); - - /** - * Get sum of handle times stored by pipelines in the path - * - * @return a sum of handle times - */ - long getTotalHandleTime(); +

ParserPool

getPool(Target

component); /** * Collect names of pipelines diff --git a/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/pipeline/PipelineParser.java b/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/pool/PoolParser.java similarity index 70% rename from panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/pipeline/PipelineParser.java rename to panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/pool/PoolParser.java index 89de30a30..30026d014 100644 --- a/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/pipeline/PipelineParser.java +++ b/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/pool/PoolParser.java @@ -14,24 +14,23 @@ * limitations under the License. */ -package org.panda_lang.language.interpreter.parser.pipeline; +package org.panda_lang.language.interpreter.parser.pool; import org.panda_lang.language.interpreter.parser.Components; import org.panda_lang.language.interpreter.parser.Context; import org.panda_lang.language.interpreter.parser.ContextParser; -import org.panda_lang.language.interpreter.parser.LocalChannel; import org.panda_lang.language.interpreter.parser.PandaParserFailure; import org.panda_lang.language.interpreter.parser.Parser; import org.panda_lang.language.interpreter.token.Snippet; import org.panda_lang.language.interpreter.token.SourceStream; import org.panda_lang.language.resource.syntax.separator.Separators; -public final class PipelineParser> implements Parser { +public final class PoolParser> implements Parser { - private final PipelineComponent pipelineComponent; + private final Target target; - public PipelineParser(PipelineComponent component) { - this.pipelineComponent = component; + public PoolParser(Target component) { + this.target = component; } /** @@ -42,18 +41,17 @@ public PipelineParser(PipelineComponent component) { * @return returns always null */ public boolean parse(Context context, SourceStream stream) { - Pipeline pipeline = context.getComponent(Components.PIPELINE).getPipeline(pipelineComponent); + ParserPool parserPool = context.getPoolService().getPool(target); while (stream.hasUnreadSource()) { - LocalChannel channel = new PandaLocalChannel(); Snippet source = stream.toSnippet(); - Context delegatedContext = context.fork() - .withComponent(Components.CURRENT_SOURCE, source) - .withComponent(Components.CHANNEL, channel) - .withComponent(Components.STREAM, stream); + Context delegatedContext = context.forkCreator() + .withSource(source) + .withStream(stream) + .toContext(); - ContextParser parser = pipeline.handle(context, channel, source).orElseThrow(failure -> failure + ContextParser parser = parserPool.handle(context, channel, source).orElseThrow(failure -> failure .map(exception -> (RuntimeException) exception) .orElseGet(() -> new PandaParserFailure(delegatedContext, source, "Unrecognized syntax")) ); @@ -73,4 +71,9 @@ public boolean parse(Context context, SourceStream stream) { return true; } + @Override + public String getName() { + return "pool"; + } + } diff --git a/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/pipeline/PipelineComponent.java b/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/pool/Target.java similarity index 66% rename from panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/pipeline/PipelineComponent.java rename to panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/pool/Target.java index 0d1477e21..d45b64d15 100644 --- a/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/pipeline/PipelineComponent.java +++ b/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/pool/Target.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.panda_lang.language.interpreter.parser.pipeline; +package org.panda_lang.language.interpreter.parser.pool; import org.panda_lang.language.interpreter.parser.Parser; import org.panda_lang.utilities.commons.collection.Component; @@ -28,11 +28,11 @@ * * @param

pipeline parser type */ -public final class PipelineComponent

extends Component

{ +public final class Target

extends Component

{ - private static final Map> COMPONENTS = new HashMap<>(); + private static final Map> COMPONENTS = new HashMap<>(); - private PipelineComponent(String name, Class

type) { + private Target(String name, Class

type) { super(name, type, 0); } @@ -45,8 +45,8 @@ private PipelineComponent(String name, Class

type) { * @return a new component */ @SuppressWarnings("unchecked") - public static PipelineComponent of(String name, Class type) { - return (PipelineComponent) ofComponents(COMPONENTS, name, () -> new PipelineComponent<>(name, type)); + public static Target of(String name, Class type) { + return (Target) ofComponents(COMPONENTS, name, () -> new Target<>(name, type)); } /** @@ -56,10 +56,10 @@ public static PipelineComponent of(String name, Class t * @return a found component */ @SuppressWarnings("unchecked") - public static Option> get(String name) { - for (Map.Entry> entry : COMPONENTS.entrySet()) { + public static Option> get(String name) { + for (Map.Entry> entry : COMPONENTS.entrySet()) { if (entry.getKey().equals(name)) { - return Option.of((PipelineComponent) entry.getValue()); + return Option.of((Target) entry.getValue()); } } diff --git a/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/pipeline/Pipelines.java b/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/pool/Targets.java similarity index 61% rename from panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/pipeline/Pipelines.java rename to panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/pool/Targets.java index d5e049c5d..3c876646a 100644 --- a/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/pipeline/Pipelines.java +++ b/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/pool/Targets.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.panda_lang.language.interpreter.parser.pipeline; +package org.panda_lang.language.interpreter.parser.pool; import org.panda_lang.language.interpreter.parser.ContextParser; @@ -24,50 +24,50 @@ /** * Default pipelines used by the framework */ -public final class Pipelines { +public final class Targets { /** - * Text representation of {@link Pipelines#ALL} + * Text representation of {@link Targets#ALL} */ public static final String ALL_LABEL = "all"; /** * All pipelines */ - public static final PipelineComponent ALL = PipelineComponent.of(ALL_LABEL, ContextParser.class); + public static final Target ALL = Target.of(ALL_LABEL, ContextParser.class); /** - * Text representation of {@link Pipelines#HEAD} + * Text representation of {@link Targets#HEAD} */ public static final String HEAD_LABEL = "head"; /** * Head pipeline */ - public static final PipelineComponent HEAD = PipelineComponent.of(HEAD_LABEL, ContextParser.class); + public static final Target HEAD = Target.of(HEAD_LABEL, ContextParser.class); /** - * Text representation of {@link Pipelines#TYPE} + * Text representation of {@link Targets#TYPE} */ public static final String TYPE_LABEL = "type"; /** * Class type parsers, used by type parser */ - public static final PipelineComponent TYPE = PipelineComponent.of(TYPE_LABEL, ContextParser.class); + public static final Target TYPE = Target.of(TYPE_LABEL, ContextParser.class); /** - * Text representation of {@link Pipelines#SCOPE} + * Text representation of {@link Targets#SCOPE} */ public static final String SCOPE_LABEL = "scope"; /** * Scope parsers */ - public static final PipelineComponent SCOPE = PipelineComponent.of(SCOPE_LABEL, ContextParser.class); + public static final Target SCOPE = Target.of(SCOPE_LABEL, ContextParser.class); /** * Get collection of all components * * @return the collection of components */ - public static Collection> getPipelineComponents() { + public static Collection> getPipelineComponents() { return Arrays.asList(ALL, HEAD, TYPE, SCOPE); } diff --git a/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/stage/DelegatedTask.java b/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/stage/Layer.java similarity index 62% rename from panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/stage/DelegatedTask.java rename to panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/stage/Layer.java index ad3f1a901..7c87044b8 100644 --- a/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/stage/DelegatedTask.java +++ b/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/stage/Layer.java @@ -16,24 +16,24 @@ package org.panda_lang.language.interpreter.parser.stage; -import org.panda_lang.language.interpreter.parser.Context; +public enum Layer { -final class DelegatedTask { + CURRENT_BEFORE(1), + CURRENT_DEFAULT(2), + CURRENT_AFTER(3), - private final StageTask task; - private final Context delegated; + NEXT_BEFORE(4), + NEXT_DEFAULT(5), + NEXT_AFTER(6); - DelegatedTask(StageTask task, Context delegated) { - this.task = task; - this.delegated = delegated; - } + private final int priority; - public Context getDelegated() { - return delegated; + Layer(int priority) { + this.priority = priority; } - public StageTask getTask() { - return task; + public int getPriority() { + return priority; } -} +} \ No newline at end of file diff --git a/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/stage/PandaStage.java b/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/stage/PandaStage.java deleted file mode 100644 index 6647363c9..000000000 --- a/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/stage/PandaStage.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright (c) 2020 Dzikoysk - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.panda_lang.language.interpreter.parser.stage; - -public final class PandaStage implements Stage { - - private final String name; - private final StageController stageController; - private StagePhase currentPhase; - private StagePhase nextPhase; - - public PandaStage(StageController controller, String name) { - this.name = name; - this.stageController = controller; - this.currentPhase = new PandaStagePhase(this); - this.nextPhase = new PandaStagePhase(this); - } - - @Override - public boolean execute() { - while (true) { - currentPhase.callTasks(); - - if (currentPhase.countTasks() > 0) { - continue; - } - - if (nextPhase.countTasks() == 0) { - break; - } - - currentPhase = nextPhase; - nextPhase = new PandaStagePhase(this); - - if (stageController.countTasks(this) > 0) { - return false; - } - } - - return true; - } - - @Override - public int countTasks() { - return currentPhase.countTasks() + nextPhase.countTasks(); - } - - @Override - public StagePhase currentPhase() { - return currentPhase; - } - - @Override - public StagePhase nextPhase() { - return nextPhase; - } - - @Override - public StageController stage() { - return stageController; - } - - @Override - public String name() { - return name; - } - - @Override - public String toString() { - return "GenerationCycle#" + name + " { currentPhase: " + currentPhase + ", nextPhase: " + nextPhase + " }"; - } - -} diff --git a/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/stage/PandaStageLayer.java b/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/stage/PandaStageLayer.java new file mode 100644 index 000000000..12f1070ad --- /dev/null +++ b/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/stage/PandaStageLayer.java @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2020 Dzikoysk + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.panda_lang.language.interpreter.parser.stage; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; +import java.util.concurrent.atomic.AtomicInteger; + +public final class PandaStageLayer implements StageLayer { + + private static final AtomicInteger ID = new AtomicInteger(); + + private final int id; + private final StagePhase cycle; + private final Map> tasks = new HashMap<>(); + + public PandaStageLayer(StagePhase cycle) { + this.id = ID.getAndIncrement(); + this.cycle = cycle; + } + + @Override + public void callTasks() { + Map> unitsMap = new TreeMap<>(tasks); + tasks.clear(); + + for (List units : unitsMap.values()) { + for (StageTask unit : units) { + unit.call(cycle); + } + } + } + + @Override + public StageLayer delegate(StageOrder priority, StageTask task) { + tasks.computeIfAbsent(priority, (key) -> new ArrayList<>(2)).add(task); + return this; + } + + @Override + public int countTasks() { + return tasks.size(); + } + + @Override + public String toString() { + return "Stage Layer " + id + ": " + countTasks() + " tasks"; + } + +} diff --git a/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/stage/PandaStageController.java b/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/stage/PandaStageManager.java similarity index 71% rename from panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/stage/PandaStageController.java rename to panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/stage/PandaStageManager.java index e9991733a..19b21dbef 100644 --- a/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/stage/PandaStageController.java +++ b/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/stage/PandaStageManager.java @@ -24,16 +24,16 @@ import java.util.List; import java.util.Map; -public final class PandaStageController implements StageController { +public final class PandaStageManager implements StageManager { - private final Map cycles = new LinkedHashMap<>(); - private Stage currentCycle; + private final Map cycles = new LinkedHashMap<>(); + private StagePhase currentCycle; - public PandaStageController initialize(List types) { + public PandaStageManager initialize(List types) { Collections.sort(types); - for (StageType type : types) { - cycles.put(type.getName(), new PandaStage(this, type.getName())); + for (Phase type : types) { + cycles.put(type.getName(), new PandaStagePhase(this, type.getName())); } return this; @@ -47,7 +47,7 @@ public void launch() { } private void executeOnce() { - for (Stage cycle : cycles.values()) { + for (StagePhase cycle : cycles.values()) { currentCycle = cycle; if (!cycle.execute()) { @@ -59,10 +59,10 @@ private void executeOnce() { } @Override - public int countTasks(@Nullable Stage to) { + public int countTasks(@Nullable StagePhase to) { int count = 0; - for (Stage cycle : cycles.values()) { + for (StagePhase cycle : cycles.values()) { count += cycle.countTasks(); if (cycle.equals(to)) { @@ -79,18 +79,18 @@ public int countTasks() { } @Override - public Option getCurrentCycle() { + public Option getCurrentCycle() { return Option.of(currentCycle); } @Override - public Stage getCycle(StageType type) { - return getCycle(type.getName()); + public StagePhase getPhase(Phase type) { + return getPhase(type.getName()); } @Override - public Stage getCycle(String name) { - Stage cycle = cycles.get(name); + public StagePhase getPhase(String name) { + StagePhase cycle = cycles.get(name); if (cycle == null) { throw new IllegalArgumentException("Cycle " + name + " does not exist"); diff --git a/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/stage/PandaStagePhase.java b/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/stage/PandaStagePhase.java index a64f19a39..33b5b5247 100644 --- a/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/stage/PandaStagePhase.java +++ b/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/stage/PandaStagePhase.java @@ -16,62 +16,72 @@ package org.panda_lang.language.interpreter.parser.stage; -import org.panda_lang.language.interpreter.parser.Context; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.TreeMap; -import java.util.concurrent.atomic.AtomicInteger; - public final class PandaStagePhase implements StagePhase { - private static final AtomicInteger ID = new AtomicInteger(); - - private final int id; - private final Stage cycle; - private final Map> tasks = new HashMap<>(); - private DelegatedTask currentUnit; + private final String name; + private final StageManager stageManager; + private StageLayer currentPhase; + private StageLayer nextPhase; - public PandaStagePhase(Stage cycle) { - this.id = ID.getAndIncrement(); - this.cycle = cycle; + public PandaStagePhase(StageManager controller, String name) { + this.name = name; + this.stageManager = controller; + this.currentPhase = new PandaStageLayer(this); + this.nextPhase = new PandaStageLayer(this); } @Override - public void callTasks() { - Map> unitsMap = new TreeMap<>(tasks); - tasks.clear(); - - for (List units : unitsMap.values()) { - for (DelegatedTask unit : units) { - currentUnit = unit; - unit.getTask().call(cycle, unit.getDelegated()); + public boolean execute() { + while (true) { + currentPhase.callTasks(); + + if (currentPhase.countTasks() > 0) { + continue; + } + + if (nextPhase.countTasks() == 0) { + break; + } + + currentPhase = nextPhase; + nextPhase = new PandaStageLayer(this); + + if (stageManager.countTasks(this) > 0) { + return false; } } - currentUnit = null; + return true; } @Override - public StagePhase delegate(StageOrder priority, StageTask task, Context delegated) { - tasks.computeIfAbsent(priority, (key) -> new ArrayList<>(2)).add(new DelegatedTask(task, delegated)); - return this; + public int countTasks() { + return currentPhase.countTasks() + nextPhase.countTasks(); } @Override - public int countTasks() { - return tasks.size(); + public StageLayer currentPhase() { + return currentPhase; + } + + @Override + public StageLayer nextPhase() { + return nextPhase; } - public DelegatedTask getCurrentUnit() { - return currentUnit; + @Override + public StageManager stage() { + return stageManager; + } + + @Override + public String name() { + return name; } @Override public String toString() { - return "GenerationPhase " + id + ": " + countTasks() + " tasks"; + return "GenerationCycle#" + name + " { currentPhase: " + currentPhase + ", nextPhase: " + nextPhase + " }"; } } diff --git a/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/stage/StageType.java b/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/stage/Phase.java similarity index 89% rename from panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/stage/StageType.java rename to panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/stage/Phase.java index cd3aebfcf..41dd5b897 100644 --- a/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/stage/StageType.java +++ b/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/stage/Phase.java @@ -19,7 +19,7 @@ /** * Comparable type of cycle, required to create a new cycle */ -public final class StageType implements Comparable { +public final class Phase implements Comparable { private final String name; private final double priority; @@ -30,13 +30,13 @@ public final class StageType implements Comparable { * @param name the name of cycle * @param priority the priority */ - public StageType(String name, double priority) { + public Phase(String name, double priority) { this.name = name; this.priority = priority; } @Override - public int compareTo(StageType to) { + public int compareTo(Phase to) { return Double.compare(priority, to.priority); } diff --git a/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/stage/Phases.java b/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/stage/Phases.java index 3c42e4c83..c02dd6b5e 100644 --- a/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/stage/Phases.java +++ b/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/stage/Phases.java @@ -16,26 +16,30 @@ package org.panda_lang.language.interpreter.parser.stage; -public enum Phases { +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; - IMMEDIATELY(0), +import static org.panda_lang.utilities.commons.collection.Lists.add; - CURRENT_BEFORE(1), - CURRENT_DEFAULT(2), - CURRENT_AFTER(3), +public final class Phases { - NEXT_BEFORE(4), - NEXT_DEFAULT(5), - NEXT_AFTER(6); + private static final Collection VALUES = new ArrayList<>(); - private final int priority; + public static final Phase SYNTAX = add(VALUES, new Phase("SYNTAX", 1.0)); - Phases(int priority) { - this.priority = priority; - } + public static final Phase PREPROCESSOR = add(VALUES, new Phase("PREPROCESSOR", 2.0)); + + public static final Phase TYPES = add(VALUES, new Phase("TYPES", 2.0)); + + public static final Phase DEFAULT = add(VALUES, new Phase("DEFAULT", 3.0)); + + public static final Phase CONTENT = add(VALUES, new Phase("CONTENT", 4.0)); + + private Phases() { } - public int getPriority() { - return priority; + public static List getValues() { + return new ArrayList<>(VALUES); } -} \ No newline at end of file +} diff --git a/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/stage/Stage.java b/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/stage/Stage.java deleted file mode 100644 index c052ed86e..000000000 --- a/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/stage/Stage.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright (c) 2020 Dzikoysk - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.panda_lang.language.interpreter.parser.stage; - -/** - * Cycle represents following continuously pair of phases identified by the specific {@link StageType} - */ -public interface Stage { - - /** - * Launch cycle - * - * @return true if all tasks was called - */ - boolean execute(); - - /** - * @return amount of tasks - */ - int countTasks(); - - /** - * Get next phase - * - * @return the next phase - */ - StagePhase nextPhase(); - - /** - * Get current phase - * - * @return the current phase - */ - StagePhase currentPhase(); - - /** - * Get generation - * - * @return the generation - */ - StageController stage(); - - /** - * Get name of cycle - * - * @return the name - */ - String name(); - -} diff --git a/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/stage/StageLayer.java b/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/stage/StageLayer.java new file mode 100644 index 000000000..f634756f7 --- /dev/null +++ b/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/stage/StageLayer.java @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2020 Dzikoysk + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.panda_lang.language.interpreter.parser.stage; + +/** + * Represents a group of tasks delegated to the same phase (layer) in the cycle + */ +public interface StageLayer { + + /** + * Call all tasks delegated to the phase + */ + void callTasks(); + + /** + * Delegate task + * + * @param priority the priority of task (the lowest is called first) + * @param task the task to delegate + * @return current phase + */ + StageLayer delegate(StageOrder priority, StageTask task); + + /** + * Delegate task using {@link StageOrder#DEFAULT} + * + * @see #delegate(StageOrder, StageTask) + */ + default StageLayer delegate(StageTask task) { + return delegate(StageOrder.DEFAULT, task); + } + + /** + * Delegate task using {@link StageOrder#BEFORE} + * + * @see #delegate(StageOrder, StageTask) + */ + default StageLayer delegateBefore(StageTask task) { + return delegate(StageOrder.BEFORE, task); + } + + /** + * Delegate task using {@link StageOrder#AFTER} + * + * @see #delegate(StageOrder, StageTask) + */ + default StageLayer delegateAfter(StageTask task) { + return delegate(StageOrder.AFTER, task); + } + + /*** + * @return the amount of delegated tasks + */ + int countTasks(); + +} diff --git a/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/stage/StageController.java b/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/stage/StageManager.java similarity index 88% rename from panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/stage/StageController.java rename to panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/stage/StageManager.java index 2eb14dcb1..fcb2c95fd 100644 --- a/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/stage/StageController.java +++ b/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/stage/StageManager.java @@ -21,7 +21,7 @@ /** * Generation is the multilayer task manager divided into cycles and phases. */ -public interface StageController { +public interface StageManager { /** * Launch cycles @@ -34,7 +34,7 @@ public interface StageController { * @param to the cycle to which it count * @return the amount of tasks */ - int countTasks(Stage to); + int countTasks(StagePhase to); /** * Get amount of all tasks @@ -46,7 +46,7 @@ public interface StageController { /** * @return current cycle */ - Option getCurrentCycle(); + Option getCurrentCycle(); /** * Get cycle @@ -54,7 +54,7 @@ public interface StageController { * @param name the name of cycle * @return the cycle */ - Stage getCycle(String name); + StagePhase getPhase(String name); /** * Get cycle @@ -62,6 +62,6 @@ public interface StageController { * @param type the type of cycle * @return the cycle */ - Stage getCycle(StageType type); + StagePhase getPhase(Phase type); } diff --git a/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/stage/StagePhase.java b/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/stage/StagePhase.java index a7f5dd386..f4aa9d5e5 100644 --- a/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/stage/StagePhase.java +++ b/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/stage/StagePhase.java @@ -16,58 +16,42 @@ package org.panda_lang.language.interpreter.parser.stage; -import org.panda_lang.language.interpreter.parser.Context; - /** - * Represents a group of tasks delegated to the same phase (layer) in the cycle + * Cycle represents following continuously pair of phases identified by the specific {@link Phase} */ public interface StagePhase { /** - * Call all tasks delegated to the phase + * Launch cycle + * + * @return true if all tasks was called */ - void callTasks(); + boolean execute(); /** - * Delegate task + * Get next phase * - * @param priority the priority of task (the lowest is called first) - * @param task the task to delegate - * @param delegated the data to associate with task - * @return current phase + * @return the next phase */ - StagePhase delegate(StageOrder priority, StageTask task, Context delegated); + StageLayer nextPhase(); /** - * Delegate task using {@link StageOrder#DEFAULT} + * Get current phase * - * @see #delegate(StageOrder, StageTask, org.panda_lang.language.interpreter.parser.Context) + * @return the current phase */ - default StagePhase delegate(StageTask task, Context delegated) { - return delegate(StageOrder.DEFAULT, task, delegated); - } + StageLayer currentPhase(); /** - * Delegate task using {@link StageOrder#BEFORE} - * - * @see #delegate(StageOrder, StageTask, org.panda_lang.language.interpreter.parser.Context) + * @return amount of tasks */ - default StagePhase delegateBefore(StageTask task, Context delegated) { - return delegate(StageOrder.BEFORE, task, delegated); - } + int countTasks(); /** - * Delegate task using {@link StageOrder#AFTER} + * Get name of cycle * - * @see #delegate(StageOrder, StageTask, org.panda_lang.language.interpreter.parser.Context) + * @return the name */ - default StagePhase delegateAfter(StageTask task, Context delegated) { - return delegate(StageOrder.AFTER, task, delegated); - } - - /*** - * @return the amount of delegated tasks - */ - int countTasks(); + String name(); } diff --git a/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/stage/StageService.java b/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/stage/StageService.java new file mode 100644 index 000000000..95894c39d --- /dev/null +++ b/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/stage/StageService.java @@ -0,0 +1,40 @@ +package org.panda_lang.language.interpreter.parser.stage; + +import org.panda_lang.language.interpreter.parser.PandaParserException; + +public class StageService { + + private final StageManager stageManager; + + public StageService(StageManager stageManager) { + this.stageManager = stageManager; + } + + public void delegate(String id, Phase phase, Layer layer, StageTask task) { + StagePhase selectedPhase = stageManager.getPhase(phase); + + switch (layer) { + case CURRENT_BEFORE: + selectedPhase.currentPhase().delegateBefore(task); + break; + case CURRENT_DEFAULT: + selectedPhase.currentPhase().delegate(task); + break; + case CURRENT_AFTER: + selectedPhase.currentPhase().delegateAfter(task); + break; + case NEXT_BEFORE: + selectedPhase.nextPhase().delegateBefore(task); + break; + case NEXT_DEFAULT: + selectedPhase.nextPhase().delegate(task); + break; + case NEXT_AFTER: + selectedPhase.nextPhase().delegateAfter(task); + break; + default: + throw new PandaParserException("Unknown layer: " + layer); + } + } + +} diff --git a/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/stage/StageTask.java b/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/stage/StageTask.java index 9674fcc64..3ae2cb817 100644 --- a/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/stage/StageTask.java +++ b/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/stage/StageTask.java @@ -16,23 +16,16 @@ package org.panda_lang.language.interpreter.parser.stage; -import org.jetbrains.annotations.Nullable; -import org.panda_lang.language.interpreter.parser.Context; - /** * Task that can be delegated to the generation - * - * @param type of result */ -public interface StageTask { +public interface StageTask { /** * Call task * - * @param cycle current cycle - * @param context data assigned to task - * @return task value + * @param layer current cycle */ - @Nullable T call(Stage cycle, Context context); + void call(StagePhase layer); } diff --git a/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/stage/Stages.java b/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/stage/Stages.java deleted file mode 100644 index b86670905..000000000 --- a/panda-framework/src/main/java/org/panda_lang/language/interpreter/parser/stage/Stages.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright (c) 2020 Dzikoysk - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.panda_lang.language.interpreter.parser.stage; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; - -import static org.panda_lang.utilities.commons.collection.Lists.add; - -public final class Stages { - - private static final Collection VALUES = new ArrayList<>(); - - public static final String SYNTAX_LABEL = "SYNTAX"; - public static final StageType SYNTAX = add(VALUES, new StageType(SYNTAX_LABEL, 1.0)); - - public static final String PREPROCESSOR_LABEL = "PREPROCESSOR"; - public static final StageType PREPROCESSOR = add(VALUES, new StageType(PREPROCESSOR_LABEL, 2.0)); - - public static final String TYPES_LABEL = "TYPES"; - public static final StageType TYPES = add(VALUES, new StageType(TYPES_LABEL, 2.0)); - - public static final String DEFAULT_LABEL = "DEFAULT"; - public static final StageType DEFAULT = add(VALUES, new StageType(DEFAULT_LABEL, 3.0)); - - public static final String CONTENT_LABEL = "CONTENT"; - public static final StageType CONTENT = add(VALUES, new StageType(CONTENT_LABEL, 4.0)); - - private Stages() { } - - public static List getValues() { - return new ArrayList<>(VALUES); - } - -} diff --git a/panda-framework/src/main/java/org/panda_lang/language/resource/PandaResources.java b/panda-framework/src/main/java/org/panda_lang/language/resource/PandaResources.java index b468a6aa4..c9ac75c2c 100644 --- a/panda-framework/src/main/java/org/panda_lang/language/resource/PandaResources.java +++ b/panda-framework/src/main/java/org/panda_lang/language/resource/PandaResources.java @@ -17,8 +17,8 @@ package org.panda_lang.language.resource; import org.panda_lang.language.interpreter.parser.expression.ExpressionSubparsers; -import org.panda_lang.language.interpreter.parser.pipeline.PandaPipelinePath; -import org.panda_lang.language.interpreter.parser.pipeline.PipelinePath; +import org.panda_lang.language.interpreter.parser.pool.PandaParserPoolService; +import org.panda_lang.language.interpreter.parser.pool.ParserPoolService; public final class PandaResources implements Resources { @@ -34,8 +34,8 @@ public ExpressionSubparsers getExpressionSubparsers() { } @Override - public PipelinePath getPipelinePath() { - return builder.pipelinePath; + public ParserPoolService getPipelinePath() { + return builder.parserPoolService; } public static PandaResourcesBuilder builder() { @@ -44,13 +44,13 @@ public static PandaResourcesBuilder builder() { public static final class PandaResourcesBuilder { - public PipelinePath pipelinePath; + public ParserPoolService parserPoolService; public ExpressionSubparsers expressionSubparsers; private PandaResourcesBuilder() { } - public PandaResourcesBuilder withPipelinePath(PipelinePath pipelinePath) { - this.pipelinePath = pipelinePath; + public PandaResourcesBuilder withPipelinePath(ParserPoolService parserPoolService) { + this.parserPoolService = parserPoolService; return this; } @@ -60,8 +60,8 @@ public PandaResourcesBuilder withExpressionSubparsers(ExpressionSubparsers expre } public PandaResources build() { - if (pipelinePath == null) { - this.pipelinePath = new PandaPipelinePath(); + if (parserPoolService == null) { + this.parserPoolService = new PandaParserPoolService(); } return new PandaResources(this); diff --git a/panda-framework/src/main/java/org/panda_lang/language/resource/Resources.java b/panda-framework/src/main/java/org/panda_lang/language/resource/Resources.java index a416bb7d8..b25437b9f 100644 --- a/panda-framework/src/main/java/org/panda_lang/language/resource/Resources.java +++ b/panda-framework/src/main/java/org/panda_lang/language/resource/Resources.java @@ -17,7 +17,7 @@ package org.panda_lang.language.resource; import org.panda_lang.language.interpreter.parser.expression.ExpressionSubparsers; -import org.panda_lang.language.interpreter.parser.pipeline.PipelinePath; +import org.panda_lang.language.interpreter.parser.pool.ParserPoolService; /** * Set of resources used by the language @@ -36,6 +36,6 @@ public interface Resources { * * @return the pipeline path */ - PipelinePath getPipelinePath(); + ParserPoolService getPipelinePath(); } diff --git a/panda-framework/src/test/java/org/panda_lang/language/interpreter/parser/pipeline/PandaPipelinePathTest.java b/panda-framework/src/test/java/org/panda_lang/language/interpreter/parser/pool/PandaParserPoolServiceTest.java similarity index 69% rename from panda-framework/src/test/java/org/panda_lang/language/interpreter/parser/pipeline/PandaPipelinePathTest.java rename to panda-framework/src/test/java/org/panda_lang/language/interpreter/parser/pool/PandaParserPoolServiceTest.java index 01d534f0d..48c1e8f1b 100644 --- a/panda-framework/src/test/java/org/panda_lang/language/interpreter/parser/pipeline/PandaPipelinePathTest.java +++ b/panda-framework/src/test/java/org/panda_lang/language/interpreter/parser/pool/PandaParserPoolServiceTest.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.panda_lang.language.interpreter.parser.pipeline; +package org.panda_lang.language.interpreter.parser.pool; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -27,16 +27,16 @@ import static org.junit.jupiter.api.Assertions.*; -class PandaPipelinePathTest { +class PandaParserPoolServiceTest { - private static final PipelineComponent TEST_COMPONENT = PipelineComponent.of("test", Parser.class); - private static final PipelineComponent ANOTHER_TEST_COMPONENT = PipelineComponent.of("another-test", Parser.class); + private static final Target TEST_COMPONENT = Target.of("test", Parser.class); + private static final Target ANOTHER_TEST_COMPONENT = Target.of("another-test", Parser.class); - private PipelinePath defaultPath; + private ParserPoolService defaultPath; @BeforeEach void prepareDefaultPipelinePath() { - this.defaultPath = new PandaPipelinePath(); + this.defaultPath = new PandaParserPoolService(); defaultPath.computeIfAbsent(TEST_COMPONENT); } @@ -47,19 +47,19 @@ void createPipeline() { @Test void hasPipeline() { - assertTrue(defaultPath.hasPipeline(TEST_COMPONENT)); - assertFalse(defaultPath.hasPipeline(ANOTHER_TEST_COMPONENT)); + assertTrue(defaultPath.hasPool(TEST_COMPONENT)); + assertFalse(defaultPath.hasPool(ANOTHER_TEST_COMPONENT)); } @Test void getPipeline() { - assertNotNull(defaultPath.getPipeline(TEST_COMPONENT)); - assertNull(defaultPath.getPipeline(ANOTHER_TEST_COMPONENT)); + assertNotNull(defaultPath.getPool(TEST_COMPONENT)); + assertNull(defaultPath.getPool(ANOTHER_TEST_COMPONENT)); } @Test void getTotalHandleTime() { - assertTrue(defaultPath.getPipeline(TEST_COMPONENT) + assertTrue(defaultPath.getPool(TEST_COMPONENT) .handle(new PandaContext(), new PandaLocalChannel(), PandaTokenInfo.of(TokenTypes.UNKNOWN, "test").toSnippet()) .isErr()); diff --git a/panda-framework/src/test/java/org/panda_lang/language/interpreter/parser/stage/pipeline/StagePhaseControllerTest.java b/panda-framework/src/test/java/org/panda_lang/language/interpreter/parser/stage/pipeline/PhasesLayerLayerControllerTest.java similarity index 59% rename from panda-framework/src/test/java/org/panda_lang/language/interpreter/parser/stage/pipeline/StagePhaseControllerTest.java rename to panda-framework/src/test/java/org/panda_lang/language/interpreter/parser/stage/pipeline/PhasesLayerLayerControllerTest.java index b1fde5048..2814f39ad 100644 --- a/panda-framework/src/test/java/org/panda_lang/language/interpreter/parser/stage/pipeline/StagePhaseControllerTest.java +++ b/panda-framework/src/test/java/org/panda_lang/language/interpreter/parser/stage/pipeline/PhasesLayerLayerControllerTest.java @@ -19,21 +19,21 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; -import org.panda_lang.language.interpreter.parser.stage.StageType; -import org.panda_lang.language.interpreter.parser.stage.PandaStageController; +import org.panda_lang.language.interpreter.parser.stage.Phase; +import org.panda_lang.language.interpreter.parser.stage.PandaStageManager; import java.util.Arrays; -class StagePhaseControllerTest { +class PhasesLayerLayerControllerTest { - private static final PandaStageController generation = new PandaStageController(); + private static final PandaStageManager STAGE_CONTROLLER = new PandaStageManager(); @BeforeAll public static void createPipelines() { - generation.initialize(Arrays.asList( - new StageType("b", 2.0), - new StageType("a", 1.0), - new StageType("c", 3.0)) + STAGE_CONTROLLER.initialize(Arrays.asList( + new Phase("b", 2.0), + new Phase("a", 1.0), + new Phase("c", 3.0)) ); } @@ -41,15 +41,15 @@ public static void createPipelines() { public void testPipelineGeneration() { StringBuilder outputBuilder = new StringBuilder(); - generation.getCycle("b").nextPhase().delegate((pipeline, context) -> outputBuilder.append("b "), null); - generation.getCycle("a").nextPhase().delegate((pipeline, context) -> outputBuilder.append("a "), null); - generation.getCycle("c").nextPhase().delegate((pipeline, context) -> outputBuilder.append("c "), null); + STAGE_CONTROLLER.getPhase("b").nextPhase().delegate((pipeline, context) -> outputBuilder.append("b "), null); + STAGE_CONTROLLER.getPhase("a").nextPhase().delegate((pipeline, context) -> outputBuilder.append("a "), null); + STAGE_CONTROLLER.getPhase("c").nextPhase().delegate((pipeline, context) -> outputBuilder.append("c "), null); - generation.getCycle("b").nextPhase().delegate((pipeline, delegatedContext) -> { + STAGE_CONTROLLER.getPhase("b").nextPhase().delegate((pipeline, delegatedContext) -> { outputBuilder.append("b2 "); pipeline.nextPhase().delegate((pipeline1, delegatedContext1) -> { - pipeline1.stage().getCycle("a").nextPhase().delegate((pipeline2, delegatedContext2) -> outputBuilder.append("a2 "), delegatedContext1); + STAGE_CONTROLLER.getPhase("a").nextPhase().delegate((pipeline2, delegatedContext2) -> outputBuilder.append("a2 "), delegatedContext1); outputBuilder.append("b3 "); return null; }, delegatedContext); @@ -57,11 +57,11 @@ public void testPipelineGeneration() { return null; }, null); - generation.launch(); + STAGE_CONTROLLER.launch(); Assertions.assertEquals("a b b2 b3 a2 c", outputBuilder.toString().trim()); outputBuilder.setLength(0); - generation.launch(); + STAGE_CONTROLLER.launch(); Assertions.assertEquals("", outputBuilder.toString()); } diff --git a/panda-utilities/src/main/java/org/panda_lang/utilities/commons/iterable/ResourcesIterable.java b/panda-utilities/src/main/java/org/panda_lang/utilities/commons/iterable/ResourcesIterable.java index 55d00bcf0..626afe04b 100644 --- a/panda-utilities/src/main/java/org/panda_lang/utilities/commons/iterable/ResourcesIterable.java +++ b/panda-utilities/src/main/java/org/panda_lang/utilities/commons/iterable/ResourcesIterable.java @@ -22,10 +22,10 @@ public final class ResourcesIterable implements Iterable { - private final Iterable[] iterables; + private final Iterable[] iterables; @SafeVarargs - public ResourcesIterable(Iterable... iterables) { + public ResourcesIterable(Iterable... iterables) { if (iterables.length == 0) { throw new IllegalArgumentException("ResourcesIterable requires at least one resource"); } @@ -40,9 +40,9 @@ public Iterator iterator() { final class ResourceIterator implements Iterator { - private final Iterator[] iterators = Arrays.stream(iterables) + private final Iterator[] iterators = Arrays.stream(iterables) .map(Iterable::iterator) - .toArray((IntFunction[]>) Iterator[]::new); + .toArray((IntFunction[]>) Iterator[]::new); private int selected; @@ -68,7 +68,7 @@ public T next() { private void selectNext() { for (int i = selected; i < iterators.length; i++) { - Iterator iterator = iterators[i]; + Iterator iterator = iterators[i]; if (iterator.hasNext()) { selected = i; diff --git a/panda/src/main/java/org/panda_lang/panda/bootstrap/ParsersInitializer.java b/panda/src/main/java/org/panda_lang/panda/bootstrap/ParsersInitializer.java index b00093900..97b2ac76d 100644 --- a/panda/src/main/java/org/panda_lang/panda/bootstrap/ParsersInitializer.java +++ b/panda/src/main/java/org/panda_lang/panda/bootstrap/ParsersInitializer.java @@ -79,11 +79,11 @@ public final ParsersInitializer loadParsers(Parser... parsers) { * @return the initializer instance */ public ParsersInitializer loadParsers(Collection parsers) { - if (bootstrap.resources.pipelinePath == null) { + if (bootstrap.resources.parserPoolService == null) { throw new BootstrapException("Cannot load parsers because pipeline was not initialized"); } - registrationLoader.loadParsers(bootstrap.resources.pipelinePath, parsers); + registrationLoader.loadParsers(bootstrap.resources.parserPoolService, parsers); return this; } diff --git a/panda/src/main/java/org/panda_lang/panda/bootstrap/PipelinesInitializer.java b/panda/src/main/java/org/panda_lang/panda/bootstrap/PipelinesInitializer.java index 3bc72d451..af47a083b 100644 --- a/panda/src/main/java/org/panda_lang/panda/bootstrap/PipelinesInitializer.java +++ b/panda/src/main/java/org/panda_lang/panda/bootstrap/PipelinesInitializer.java @@ -16,19 +16,19 @@ package org.panda_lang.panda.bootstrap; -import org.panda_lang.language.interpreter.parser.pipeline.PipelineComponent; -import org.panda_lang.language.interpreter.parser.pipeline.PipelinePath; -import org.panda_lang.language.interpreter.parser.pipeline.PandaPipelinePath; +import org.panda_lang.language.interpreter.parser.pool.Target; +import org.panda_lang.language.interpreter.parser.pool.ParserPoolService; +import org.panda_lang.language.interpreter.parser.pool.PandaParserPoolService; import java.util.Collection; /** - * {@link org.panda_lang.language.interpreter.parser.pipeline.PipelinePath} initializer + * {@link org.panda_lang.language.interpreter.parser.pool.ParserPoolService} initializer */ public final class PipelinesInitializer implements Initializer { private final PandaBootstrap bootstrap; - private final PipelinePath path = new PandaPipelinePath(); + private final ParserPoolService path = new PandaParserPoolService(); PipelinesInitializer(PandaBootstrap bootstrap) { this.bootstrap = bootstrap; @@ -41,9 +41,9 @@ public final class PipelinesInitializer implements Initializer { * @return the initializer */ @SafeVarargs - public final PipelinesInitializer usePipelines(Collection>... componentsCollections) { - for (Collection> components : componentsCollections) { - for (PipelineComponent component : components) { + public final PipelinesInitializer usePipelines(Collection>... componentsCollections) { + for (Collection> components : componentsCollections) { + for (Target component : components) { path.computeIfAbsent(component); } } diff --git a/panda/src/main/java/org/panda_lang/panda/language/interpreter/PandaInterpreter.java b/panda/src/main/java/org/panda_lang/panda/language/interpreter/PandaInterpreter.java index 56aedac6d..56f343e2a 100644 --- a/panda/src/main/java/org/panda_lang/panda/language/interpreter/PandaInterpreter.java +++ b/panda/src/main/java/org/panda_lang/panda/language/interpreter/PandaInterpreter.java @@ -27,11 +27,10 @@ import org.panda_lang.language.interpreter.parser.Context; import org.panda_lang.language.interpreter.parser.PandaContext; import org.panda_lang.language.interpreter.parser.expression.PandaExpressionParser; -import org.panda_lang.language.interpreter.parser.pipeline.PandaLocalChannel; -import org.panda_lang.language.interpreter.parser.pipeline.PipelineParser; -import org.panda_lang.language.interpreter.parser.pipeline.Pipelines; -import org.panda_lang.language.interpreter.parser.stage.PandaStageController; -import org.panda_lang.language.interpreter.parser.stage.Stages; +import org.panda_lang.language.interpreter.parser.pool.PoolParser; +import org.panda_lang.language.interpreter.parser.pool.Targets; +import org.panda_lang.language.interpreter.parser.stage.PandaStageManager; +import org.panda_lang.language.interpreter.parser.stage.Phases; import org.panda_lang.language.interpreter.source.PandaSourceSet; import org.panda_lang.language.interpreter.source.Source; import org.panda_lang.language.interpreter.source.SourceSet; @@ -41,7 +40,6 @@ import org.panda_lang.language.resource.Resources; import org.panda_lang.panda.language.architecture.PandaApplication; import org.panda_lang.panda.language.architecture.PandaScript; -import org.panda_lang.panda.language.interpreter.parser.PandaComponents; import org.panda_lang.utilities.commons.TimeUtils; import org.panda_lang.utilities.commons.function.Result; @@ -60,8 +58,8 @@ public Result interpret(Source source) { Resources resources = environment.getController().getResources(); PandaApplication application = new PandaApplication(environment); - PandaStageController stageController = new PandaStageController(); - stageController.initialize(Stages.getValues()); + PandaStageManager stageController = new PandaStageManager(); + stageController.initialize(Phases.getValues()); SourceSet sources = new PandaSourceSet(); sources.addSource(source); @@ -74,13 +72,13 @@ public Result interpret(Source source) { .withComponent(Components.CONTROLLER, environment.getController()) .withComponent(Components.APPLICATION, application) .withComponent(Components.ENVIRONMENT, environment) - .withComponent(Components.GENERATION, stageController) + .withComponent(Components.STAGE, stageController) .withComponent(Components.TYPE_LOADER, environment.getTypeLoader()) .withComponent(Components.PIPELINE, resources.getPipelinePath()) .withComponent(Components.EXPRESSION, resources.getExpressionSubparsers().toParser()) .withComponent(Components.SOURCES, sources); - PipelineParser headParser = new PipelineParser<>(Pipelines.HEAD); + PoolParser headParser = new PoolParser<>(Targets.HEAD); try { for (Source current : sources) { @@ -95,7 +93,6 @@ public Result interpret(Source source) { imports.importModule("panda"); Context delegatedContext = context.fork() - .withComponent(PandaComponents.PANDA_SCRIPT, script) .withComponent(Components.SCRIPT, script) .withComponent(Components.IMPORTS, imports) .withComponent(Components.SOURCE, snippet) diff --git a/panda/src/main/java/org/panda_lang/panda/language/interpreter/parser/PandaComponents.java b/panda/src/main/java/org/panda_lang/panda/language/interpreter/parser/PandaComponents.java deleted file mode 100644 index b511d90d0..000000000 --- a/panda/src/main/java/org/panda_lang/panda/language/interpreter/parser/PandaComponents.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (c) 2020 Dzikoysk - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.panda_lang.panda.language.interpreter.parser; - -import org.panda_lang.language.interpreter.parser.ContextComponent; -import org.panda_lang.panda.Panda; -import org.panda_lang.panda.language.architecture.PandaScript; - -/** - * Default list of names used by {@link org.panda_lang.language.interpreter.parser.Context} for components - */ -public final class PandaComponents { - - public static final ContextComponent PANDA = ContextComponent.of("panda", Panda.class); - - public static final ContextComponent PANDA_SCRIPT = ContextComponent.of("panda-script", PandaScript.class); - - private PandaComponents() { } - -} diff --git a/panda/src/main/java/org/panda_lang/panda/language/interpreter/parser/PandaContextUtils.java b/panda/src/main/java/org/panda_lang/panda/language/interpreter/parser/PandaContextUtils.java index d80a58775..2870bce84 100644 --- a/panda/src/main/java/org/panda_lang/panda/language/interpreter/parser/PandaContextUtils.java +++ b/panda/src/main/java/org/panda_lang/panda/language/interpreter/parser/PandaContextUtils.java @@ -29,8 +29,8 @@ import org.panda_lang.language.interpreter.parser.PandaContext; import org.panda_lang.language.interpreter.parser.expression.PandaExpressionParser; import org.panda_lang.language.interpreter.parser.expression.PandaExpressionSubparsers; -import org.panda_lang.language.interpreter.parser.stage.Stages; -import org.panda_lang.language.interpreter.parser.stage.PandaStageController; +import org.panda_lang.language.interpreter.parser.stage.Phases; +import org.panda_lang.language.interpreter.parser.stage.PandaStageManager; import org.panda_lang.panda.language.architecture.PandaEnvironment; import org.panda_lang.panda.language.architecture.PandaScript; import org.panda_lang.panda.language.resource.ResourcesLoader; @@ -69,7 +69,7 @@ public static Context createStubContext(FrameworkController frameworkController) .withComponent(Components.TYPE_LOADER, loader) .withComponent(Components.IMPORTS, imports) .withComponent(Components.PIPELINE, frameworkController.getResources().getPipelinePath()) - .withComponent(Components.GENERATION, new PandaStageController().initialize(Stages.getValues())); + .withComponent(Components.STAGE, new PandaStageManager().initialize(Phases.getValues())); } } diff --git a/panda/src/main/java/org/panda_lang/panda/language/interpreter/parser/PandaPipeline.java b/panda/src/main/java/org/panda_lang/panda/language/interpreter/parser/PandaPipeline.java index e5313f728..d8250ba03 100644 --- a/panda/src/main/java/org/panda_lang/panda/language/interpreter/parser/PandaPipeline.java +++ b/panda/src/main/java/org/panda_lang/panda/language/interpreter/parser/PandaPipeline.java @@ -16,7 +16,7 @@ package org.panda_lang.panda.language.interpreter.parser; -import org.panda_lang.language.interpreter.parser.pipeline.PipelineComponent; +import org.panda_lang.language.interpreter.parser.pool.Target; import org.panda_lang.panda.language.interpreter.parser.block.BlockSubparser; import org.panda_lang.panda.language.resource.syntax.expressions.subparsers.assignation.AssignationSubparser; @@ -32,7 +32,7 @@ public final class PandaPipeline { /** * Class type parsers, used by {@link org.panda_lang.panda.language.interpreter.parser.block.BlockParser} */ - public static final PipelineComponent BLOCK = PipelineComponent.of(BLOCK_LABEL, BlockSubparser.class); + public static final Target BLOCK = Target.of(BLOCK_LABEL, BlockSubparser.class); /** * Text representation of {@link PandaPipeline#ASSIGNER} @@ -41,14 +41,14 @@ public final class PandaPipeline { /** * Assigner parsers, used by {@link org.panda_lang.panda.language.resource.syntax.expressions.subparsers.assignation.AssignationExpressionSubparser} */ - public static final PipelineComponent ASSIGNER = PipelineComponent.of(ASSIGNER_LABEL, AssignationSubparser.class); + public static final Target ASSIGNER = Target.of(ASSIGNER_LABEL, AssignationSubparser.class); /** * Get collection of all components * * @return the collection of components */ - public static Collection> getPipelineComponents() { + public static Collection> getPipelineComponents() { return Arrays.asList(BLOCK, ASSIGNER); } diff --git a/panda/src/main/java/org/panda_lang/panda/language/interpreter/parser/ParsersLoader.java b/panda/src/main/java/org/panda_lang/panda/language/interpreter/parser/ParsersLoader.java index ff5b148ae..667c2a30e 100644 --- a/panda/src/main/java/org/panda_lang/panda/language/interpreter/parser/ParsersLoader.java +++ b/panda/src/main/java/org/panda_lang/panda/language/interpreter/parser/ParsersLoader.java @@ -17,21 +17,19 @@ package org.panda_lang.panda.language.interpreter.parser; import org.panda_lang.language.interpreter.parser.Parser; -import org.panda_lang.language.interpreter.parser.pipeline.Handler; -import org.panda_lang.language.interpreter.parser.pipeline.PipelineComponent; -import org.panda_lang.language.interpreter.parser.pipeline.PipelinePath; -import org.panda_lang.language.interpreter.parser.pipeline.PandaParserRepresentation; +import org.panda_lang.language.interpreter.parser.pool.Target; +import org.panda_lang.language.interpreter.parser.pool.ParserPoolService; import org.panda_lang.utilities.commons.ObjectUtils; import java.util.Collection; public final class ParsersLoader { - public PipelinePath loadParsers(PipelinePath path, Collection parsers) { + public ParserPoolService loadParsers(ParserPoolService path, Collection parsers) { for (Parser parser : parsers) { Handler handler = (Handler) parser; - for (PipelineComponent pipeline : handler.pipeline()) { + for (Target pipeline : handler.pipeline()) { path.computeIfAbsent(pipeline).register(ObjectUtils.cast(new PandaParserRepresentation<>(parser, handler, handler.priority()))); } } diff --git a/panda/src/main/java/org/panda_lang/panda/language/interpreter/parser/ScopeParser.java b/panda/src/main/java/org/panda_lang/panda/language/interpreter/parser/ScopeParser.java index 9527df5f6..6609a936f 100644 --- a/panda/src/main/java/org/panda_lang/panda/language/interpreter/parser/ScopeParser.java +++ b/panda/src/main/java/org/panda_lang/panda/language/interpreter/parser/ScopeParser.java @@ -20,14 +20,14 @@ import org.panda_lang.language.interpreter.parser.Components; import org.panda_lang.language.interpreter.parser.Context; import org.panda_lang.language.interpreter.parser.Parser; -import org.panda_lang.language.interpreter.parser.pipeline.Pipelines; +import org.panda_lang.language.interpreter.parser.pool.Targets; import org.panda_lang.language.interpreter.token.Snippet; -import org.panda_lang.language.interpreter.parser.pipeline.PipelineParser; +import org.panda_lang.language.interpreter.parser.pool.PoolParser; import org.panda_lang.language.interpreter.token.PandaSourceStream; public final class ScopeParser implements Parser { - private static final PipelineParser SCOPE_PIPELINE_PARSER = new PipelineParser<>(Pipelines.SCOPE); + private static final PoolParser SCOPE_PIPELINE_PARSER = new PoolParser<>(Targets.SCOPE); public Scope parse(Context context, Scope scope, Snippet body) { PandaSourceStream stream = new PandaSourceStream(body); diff --git a/panda/src/main/java/org/panda_lang/panda/language/interpreter/parser/autowired/AutowiredMethod.java b/panda/src/main/java/org/panda_lang/panda/language/interpreter/parser/autowired/AutowiredMethod.java index f5c9a9242..b1b8961e5 100644 --- a/panda/src/main/java/org/panda_lang/panda/language/interpreter/parser/autowired/AutowiredMethod.java +++ b/panda/src/main/java/org/panda_lang/panda/language/interpreter/parser/autowired/AutowiredMethod.java @@ -16,7 +16,7 @@ package org.panda_lang.panda.language.interpreter.parser.autowired; -import org.panda_lang.language.interpreter.parser.stage.Phases; +import org.panda_lang.language.interpreter.parser.stage.Layer; import org.panda_lang.panda.language.interpreter.parser.autowired.annotations.Autowired; import org.panda_lang.utilities.inject.GeneratedMethodInjector; @@ -34,7 +34,7 @@ final class AutowiredMethod { } } - protected Phases getDelegation() { + protected Layer getDelegation() { return autowired.phase(); } diff --git a/panda/src/main/java/org/panda_lang/panda/language/interpreter/parser/autowired/TaskScheduler.java b/panda/src/main/java/org/panda_lang/panda/language/interpreter/parser/autowired/TaskScheduler.java index 597bd61b5..df6c216f4 100644 --- a/panda/src/main/java/org/panda_lang/panda/language/interpreter/parser/autowired/TaskScheduler.java +++ b/panda/src/main/java/org/panda_lang/panda/language/interpreter/parser/autowired/TaskScheduler.java @@ -19,9 +19,9 @@ import org.jetbrains.annotations.Nullable; import org.panda_lang.language.interpreter.parser.Components; import org.panda_lang.language.interpreter.parser.Context; -import org.panda_lang.language.interpreter.parser.stage.StageController; -import org.panda_lang.language.interpreter.parser.stage.Stage; +import org.panda_lang.language.interpreter.parser.stage.StageManager; import org.panda_lang.language.interpreter.parser.stage.StagePhase; +import org.panda_lang.language.interpreter.parser.stage.StageLayer; import org.panda_lang.language.interpreter.parser.stage.StageTask; import org.panda_lang.utilities.commons.UnsafeUtils; @@ -82,11 +82,11 @@ private T delegateNext(Context context, AutowiredMethod method, boolean last) { } private @Nullable T delegateMethod(Context context, StageTask callback, AutowiredMethod method) { - StageController stageController = context.getComponent(Components.GENERATION); + StageManager stageManager = context.getComponent(Components.STAGE); - Stage cycle = stageController.getCycle(method.getCycle()); - StagePhase phase = cycle.currentPhase(); - StagePhase nextPhase = cycle.nextPhase(); + StagePhase cycle = stageManager.getPhase(method.getCycle()); + StageLayer phase = cycle.currentPhase(); + StageLayer nextPhase = cycle.nextPhase(); switch (method.getDelegation()) { case IMMEDIATELY: diff --git a/panda/src/main/java/org/panda_lang/panda/language/interpreter/parser/autowired/annotations/Autowired.java b/panda/src/main/java/org/panda_lang/panda/language/interpreter/parser/autowired/annotations/Autowired.java index 030b40319..7db8b1328 100644 --- a/panda/src/main/java/org/panda_lang/panda/language/interpreter/parser/autowired/annotations/Autowired.java +++ b/panda/src/main/java/org/panda_lang/panda/language/interpreter/parser/autowired/annotations/Autowired.java @@ -16,8 +16,8 @@ package org.panda_lang.panda.language.interpreter.parser.autowired.annotations; -import org.panda_lang.language.interpreter.parser.stage.Stages; import org.panda_lang.language.interpreter.parser.stage.Phases; +import org.panda_lang.language.interpreter.parser.stage.Layer; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; @@ -28,10 +28,10 @@ @Retention(RetentionPolicy.RUNTIME) public @interface Autowired { - Phases phase() default Phases.IMMEDIATELY; + Layer phase() default Layer.IMMEDIATELY; int order(); - String stage() default Stages.DEFAULT_LABEL; + String stage() default Phases.DEFAULT_LABEL; } diff --git a/panda/src/main/java/org/panda_lang/panda/language/interpreter/parser/block/BlockParser.java b/panda/src/main/java/org/panda_lang/panda/language/interpreter/parser/block/BlockParser.java index 9530ba67e..a33be84ec 100644 --- a/panda/src/main/java/org/panda_lang/panda/language/interpreter/parser/block/BlockParser.java +++ b/panda/src/main/java/org/panda_lang/panda/language/interpreter/parser/block/BlockParser.java @@ -23,14 +23,11 @@ import org.panda_lang.language.architecture.statement.Statement; import org.panda_lang.language.interpreter.parser.Components; import org.panda_lang.language.interpreter.parser.Context; -import org.panda_lang.language.interpreter.parser.LocalChannel; import org.panda_lang.language.interpreter.parser.PandaParserFailure; import org.panda_lang.language.interpreter.parser.Parser; -import org.panda_lang.language.interpreter.parser.pipeline.Handler; -import org.panda_lang.language.interpreter.parser.pipeline.PandaLocalChannel; -import org.panda_lang.language.interpreter.parser.pipeline.Pipeline; -import org.panda_lang.language.interpreter.parser.pipeline.PipelineComponent; -import org.panda_lang.language.interpreter.parser.pipeline.Pipelines; +import org.panda_lang.language.interpreter.parser.pool.ParserPool; +import org.panda_lang.language.interpreter.parser.pool.Target; +import org.panda_lang.language.interpreter.parser.pool.Targets; import org.panda_lang.language.interpreter.token.Snippet; import org.panda_lang.language.resource.syntax.separator.Separators; import org.panda_lang.panda.language.interpreter.parser.PandaPipeline; @@ -49,11 +46,11 @@ public final class BlockParser extends AutowiredParser { private static final ScopeParser SCOPE_PARSER = new ScopeParser(); - private Pipeline pipeline; + private ParserPool parserPool; @Override - public PipelineComponent[] pipeline() { - return ArrayUtils.of(Pipelines.SCOPE); + public Target[] pipeline() { + return ArrayUtils.of(Targets.SCOPE); } @Override @@ -63,7 +60,7 @@ public double priority() { @Override protected AutowiredInitializer initialize(Context context, AutowiredInitializer initializer) { - this.pipeline = context.getComponent(Components.PIPELINE).getPipeline(PandaPipeline.BLOCK); + this.parserPool = context.getComponent(Components.PIPELINE).getPipeline(PandaPipeline.BLOCK); return initializer.functional(builder -> builder .contentBefore("declaration", Separators.BRACE_LEFT) @@ -72,7 +69,7 @@ protected AutowiredInitializer initialize(Context context, AutowiredInitia @Override protected Boolean customHandle(Handler handler, Context context, LocalChannel channel, Snippet source) { - Result> result = pipeline.handle(context, channel, source); + Result> result = parserPool.handle(context, channel, source); result.peek(parser -> channel.allocated("subparser", parser)); return result.isOk(); } diff --git a/panda/src/main/java/org/panda_lang/panda/language/interpreter/parser/block/BlockSubparser.java b/panda/src/main/java/org/panda_lang/panda/language/interpreter/parser/block/BlockSubparser.java index 44c1c7757..758af34c4 100644 --- a/panda/src/main/java/org/panda_lang/panda/language/interpreter/parser/block/BlockSubparser.java +++ b/panda/src/main/java/org/panda_lang/panda/language/interpreter/parser/block/BlockSubparser.java @@ -18,7 +18,6 @@ import org.panda_lang.language.interpreter.parser.Context; import org.panda_lang.language.interpreter.parser.Parser; -import org.panda_lang.language.interpreter.parser.pipeline.Handler; import org.panda_lang.language.interpreter.token.Snippet; public interface BlockSubparser extends Parser, Handler { diff --git a/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/expressions/subparsers/assignation/AssignationExpressionSubparser.java b/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/expressions/subparsers/assignation/AssignationExpressionSubparser.java index 7d1522457..55eeced6f 100644 --- a/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/expressions/subparsers/assignation/AssignationExpressionSubparser.java +++ b/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/expressions/subparsers/assignation/AssignationExpressionSubparser.java @@ -28,7 +28,6 @@ import org.panda_lang.language.interpreter.parser.expression.ExpressionSubparserType; import org.panda_lang.language.interpreter.parser.expression.ExpressionSubparserWorker; import org.panda_lang.language.interpreter.parser.expression.ExpressionTransaction; -import org.panda_lang.language.interpreter.parser.pipeline.PandaLocalChannel; import org.panda_lang.language.interpreter.token.PandaSourceStream; import org.panda_lang.language.interpreter.token.Snippet; import org.panda_lang.language.interpreter.token.SourceStream; diff --git a/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/expressions/subparsers/assignation/array/ArrayValueAssignationSubparser.java b/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/expressions/subparsers/assignation/array/ArrayValueAssignationSubparser.java index 46ea49433..4e7847425 100644 --- a/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/expressions/subparsers/assignation/array/ArrayValueAssignationSubparser.java +++ b/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/expressions/subparsers/assignation/array/ArrayValueAssignationSubparser.java @@ -21,12 +21,10 @@ import org.panda_lang.language.architecture.expression.ExpressionUtils; import org.panda_lang.language.interpreter.parser.Components; import org.panda_lang.language.interpreter.parser.Context; -import org.panda_lang.language.interpreter.parser.LocalChannel; import org.panda_lang.language.interpreter.parser.Parser; import org.panda_lang.language.interpreter.parser.expression.ExpressionResult; import org.panda_lang.language.interpreter.parser.expression.ExpressionTransaction; -import org.panda_lang.language.interpreter.parser.pipeline.Handler; -import org.panda_lang.language.interpreter.parser.pipeline.PipelineComponent; +import org.panda_lang.language.interpreter.parser.pool.Target; import org.panda_lang.language.interpreter.token.Snippet; import org.panda_lang.language.interpreter.token.SourceStream; import org.panda_lang.language.interpreter.token.TokenInfo; @@ -51,7 +49,7 @@ public final class ArrayValueAssignationSubparser extends AutowiredAssignationPa private static final ArrayValueAccessorParser PARSER = new ArrayValueAccessorParser(); @Override - public PipelineComponent[] pipeline() { + public Target[] pipeline() { return ArrayUtils.of(PandaPipeline.ASSIGNER); } diff --git a/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/expressions/subparsers/assignation/variable/VariableAssignationSubparser.java b/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/expressions/subparsers/assignation/variable/VariableAssignationSubparser.java index 196ddcc91..83209bb96 100644 --- a/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/expressions/subparsers/assignation/variable/VariableAssignationSubparser.java +++ b/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/expressions/subparsers/assignation/variable/VariableAssignationSubparser.java @@ -21,13 +21,11 @@ import org.panda_lang.language.architecture.statement.Scope; import org.panda_lang.language.interpreter.parser.Components; import org.panda_lang.language.interpreter.parser.Context; -import org.panda_lang.language.interpreter.parser.LocalChannel; import org.panda_lang.language.interpreter.parser.Parser; import org.panda_lang.language.interpreter.parser.expression.ExpressionParser; import org.panda_lang.language.interpreter.parser.expression.ExpressionResult; import org.panda_lang.language.interpreter.parser.expression.ExpressionTransaction; -import org.panda_lang.language.interpreter.parser.pipeline.Handler; -import org.panda_lang.language.interpreter.parser.pipeline.PipelineComponent; +import org.panda_lang.language.interpreter.parser.pool.Target; import org.panda_lang.language.interpreter.source.Location; import org.panda_lang.language.interpreter.token.Snippet; import org.panda_lang.language.interpreter.token.SourceStream; @@ -50,7 +48,7 @@ public final class VariableAssignationSubparser extends AutowiredAssignationParser { @Override - public PipelineComponent[] pipeline() { + public Target[] pipeline() { return ArrayUtils.of(PandaPipeline.ASSIGNER); } diff --git a/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/expressions/subparsers/assignation/variable/VariableDeclarationSubparser.java b/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/expressions/subparsers/assignation/variable/VariableDeclarationSubparser.java index 2126f5830..c9f63a95c 100644 --- a/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/expressions/subparsers/assignation/variable/VariableDeclarationSubparser.java +++ b/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/expressions/subparsers/assignation/variable/VariableDeclarationSubparser.java @@ -24,12 +24,10 @@ import org.panda_lang.language.architecture.statement.VariableData; import org.panda_lang.language.interpreter.parser.Components; import org.panda_lang.language.interpreter.parser.Context; -import org.panda_lang.language.interpreter.parser.LocalChannel; import org.panda_lang.language.interpreter.parser.Parser; import org.panda_lang.language.interpreter.parser.expression.ExpressionContext; import org.panda_lang.language.interpreter.parser.expression.ExpressionResult; -import org.panda_lang.language.interpreter.parser.pipeline.Handler; -import org.panda_lang.language.interpreter.parser.pipeline.PipelineComponent; +import org.panda_lang.language.interpreter.parser.pool.Target; import org.panda_lang.language.interpreter.source.Location; import org.panda_lang.language.interpreter.token.Snippet; import org.panda_lang.language.interpreter.token.TokenInfo; @@ -56,7 +54,7 @@ public final class VariableDeclarationSubparser extends AutowiredAssignationParser { @Override - public PipelineComponent[] pipeline() { + public Target[] pipeline() { return ArrayUtils.of(PandaPipeline.ASSIGNER); } diff --git a/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/head/CommentParser.java b/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/head/CommentParser.java index 73bd1d150..260c4636c 100644 --- a/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/head/CommentParser.java +++ b/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/head/CommentParser.java @@ -19,11 +19,9 @@ import org.panda_lang.language.interpreter.parser.Components; import org.panda_lang.language.interpreter.parser.Context; import org.panda_lang.language.interpreter.parser.ContextParser; -import org.panda_lang.language.interpreter.parser.LocalChannel; import org.panda_lang.language.interpreter.parser.Parser; -import org.panda_lang.language.interpreter.parser.pipeline.Handler; -import org.panda_lang.language.interpreter.parser.pipeline.PipelineComponent; -import org.panda_lang.language.interpreter.parser.pipeline.Pipelines; +import org.panda_lang.language.interpreter.parser.pool.Target; +import org.panda_lang.language.interpreter.parser.pool.Targets; import org.panda_lang.language.interpreter.token.Snippet; import org.panda_lang.language.resource.syntax.sequence.SequencesUtils; import org.panda_lang.utilities.commons.ArrayUtils; @@ -31,8 +29,8 @@ public final class CommentParser implements ContextParser, Handler { @Override - public PipelineComponent[] pipeline() { - return ArrayUtils.of(Pipelines.ALL); + public Target[] pipeline() { + return ArrayUtils.of(Targets.ALL); } @Override diff --git a/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/head/ExportParser.java b/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/head/ExportParser.java index 5814c5e72..3600f49e9 100644 --- a/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/head/ExportParser.java +++ b/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/head/ExportParser.java @@ -18,8 +18,8 @@ import org.panda_lang.language.interpreter.parser.Context; import org.panda_lang.language.interpreter.parser.Parser; -import org.panda_lang.language.interpreter.parser.pipeline.PipelineComponent; -import org.panda_lang.language.interpreter.parser.pipeline.Pipelines; +import org.panda_lang.language.interpreter.parser.pool.Target; +import org.panda_lang.language.interpreter.parser.pool.Targets; import org.panda_lang.language.interpreter.token.Snippet; import org.panda_lang.language.interpreter.pattern.functional.elements.QualifierElement; import org.panda_lang.language.resource.syntax.keyword.Keywords; @@ -35,8 +35,8 @@ public final class ExportParser extends AutowiredParser { @Override - public PipelineComponent[] pipeline() { - return ArrayUtils.of(Pipelines.HEAD); + public Target[] pipeline() { + return ArrayUtils.of(Targets.HEAD); } @Override diff --git a/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/head/ImportParser.java b/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/head/ImportParser.java index 378c1ae88..239ea7b9b 100644 --- a/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/head/ImportParser.java +++ b/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/head/ImportParser.java @@ -19,8 +19,8 @@ import org.panda_lang.language.architecture.module.Imports; import org.panda_lang.language.interpreter.parser.Context; import org.panda_lang.language.interpreter.parser.Parser; -import org.panda_lang.language.interpreter.parser.pipeline.PipelineComponent; -import org.panda_lang.language.interpreter.parser.pipeline.Pipelines; +import org.panda_lang.language.interpreter.parser.pool.Target; +import org.panda_lang.language.interpreter.parser.pool.Targets; import org.panda_lang.language.interpreter.token.Snippet; import org.panda_lang.language.interpreter.pattern.functional.elements.QualifierElement; import org.panda_lang.language.resource.syntax.keyword.Keywords; @@ -35,8 +35,8 @@ public final class ImportParser extends AutowiredParser { @Override - public PipelineComponent[] pipeline() { - return ArrayUtils.of(Pipelines.HEAD); + public Target[] pipeline() { + return ArrayUtils.of(Targets.HEAD); } @Override diff --git a/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/head/MainParser.java b/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/head/MainParser.java index 8b78546fb..c3c6c0bc8 100644 --- a/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/head/MainParser.java +++ b/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/head/MainParser.java @@ -19,16 +19,15 @@ import org.jetbrains.annotations.Nullable; import org.panda_lang.language.architecture.Script; import org.panda_lang.language.interpreter.parser.Context; -import org.panda_lang.language.interpreter.parser.LocalChannel; import org.panda_lang.language.interpreter.parser.Parser; -import org.panda_lang.language.interpreter.parser.pipeline.PipelineComponent; -import org.panda_lang.language.interpreter.parser.pipeline.Pipelines; +import org.panda_lang.language.interpreter.parser.pool.Target; +import org.panda_lang.language.interpreter.parser.pool.Targets; import org.panda_lang.language.interpreter.source.Location; import org.panda_lang.language.interpreter.token.Snippet; import org.panda_lang.language.resource.syntax.keyword.Keywords; import org.panda_lang.panda.language.interpreter.parser.ScopeParser; import org.panda_lang.panda.language.interpreter.parser.autowired.AutowiredInitializer; -import org.panda_lang.language.interpreter.parser.stage.Phases; +import org.panda_lang.language.interpreter.parser.stage.Layer; import org.panda_lang.panda.language.interpreter.parser.autowired.AutowiredParser; import org.panda_lang.panda.language.interpreter.parser.autowired.annotations.Autowired; import org.panda_lang.panda.language.interpreter.parser.autowired.annotations.Channel; @@ -42,8 +41,8 @@ public final class MainParser extends AutowiredParser { private static final ScopeParser SCOPE_PARSER = new ScopeParser(); @Override - public PipelineComponent[] pipeline() { - return ArrayUtils.of(Pipelines.HEAD); + public Target[] pipeline() { + return ArrayUtils.of(Targets.HEAD); } @Override @@ -53,12 +52,12 @@ protected AutowiredInitializer initialize(Context context, AutowiredInitia .linear("main body:{~}"); } - @Autowired(order = 1, phase = Phases.NEXT_DEFAULT) + @Autowired(order = 1, phase = Layer.NEXT_DEFAULT) public void createScope(LocalChannel channel, @Ctx Script script, @Channel Location location) { script.addStatement(channel.allocated("main", new MainScope(location))); } - @Autowired(order = 2, phase = Phases.NEXT_AFTER) + @Autowired(order = 2, phase = Layer.NEXT_AFTER) public void parseScope(Context context, @Channel MainScope main, @Src("body") @Nullable Snippet body) { SCOPE_PARSER.parse(context.fork(), main, body); } diff --git a/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/head/ModuleParser.java b/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/head/ModuleParser.java index de99ce393..9f1a463f1 100644 --- a/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/head/ModuleParser.java +++ b/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/head/ModuleParser.java @@ -21,12 +21,12 @@ import org.panda_lang.language.architecture.module.Module; import org.panda_lang.language.interpreter.parser.Context; import org.panda_lang.language.interpreter.parser.Parser; -import org.panda_lang.language.interpreter.parser.pipeline.PipelineComponent; -import org.panda_lang.language.interpreter.parser.pipeline.Pipelines; +import org.panda_lang.language.interpreter.parser.pool.Target; +import org.panda_lang.language.interpreter.parser.pool.Targets; import org.panda_lang.language.interpreter.source.Location; import org.panda_lang.language.interpreter.token.Snippet; import org.panda_lang.language.interpreter.parser.PandaParserException; -import org.panda_lang.language.interpreter.parser.stage.Stages; +import org.panda_lang.language.interpreter.parser.stage.Phases; import org.panda_lang.language.interpreter.pattern.functional.elements.QualifierElement; import org.panda_lang.language.resource.syntax.keyword.Keywords; import org.panda_lang.panda.language.architecture.PandaScript; @@ -42,8 +42,8 @@ public final class ModuleParser extends AutowiredParser { @Override - public PipelineComponent[] pipeline() { - return ArrayUtils.of(Pipelines.HEAD); + public Target[] pipeline() { + return ArrayUtils.of(Targets.HEAD); } @Override @@ -53,7 +53,7 @@ protected AutowiredInitializer initialize(Context context, AutowiredInitia .functional(builder -> builder.token(Keywords.MODULE).qualifier("module").consume(QualifierElement::pandaModule)); } - @Autowired(order = 1, stage = Stages.TYPES_LABEL) + @Autowired(order = 1, stage = Phases.TYPES_LABEL) public void parse(@Ctx Environment environment, @Ctx Imports imports, @Ctx PandaScript script, @Channel Location location, @Src("module") Snippet source) { if (script.select(ModuleStatement.class).size() > 0) { throw new PandaParserException("Script contains more than one declaration of the group"); diff --git a/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/head/RequireParser.java b/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/head/RequireParser.java index 6a385faf1..c2a5bdc6f 100644 --- a/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/head/RequireParser.java +++ b/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/head/RequireParser.java @@ -24,9 +24,9 @@ import org.panda_lang.language.interpreter.parser.Context; import org.panda_lang.language.interpreter.parser.PandaParserFailure; import org.panda_lang.language.interpreter.parser.Parser; -import org.panda_lang.language.interpreter.parser.pipeline.PipelineComponent; -import org.panda_lang.language.interpreter.parser.pipeline.Pipelines; -import org.panda_lang.language.interpreter.parser.stage.Stages; +import org.panda_lang.language.interpreter.parser.pool.Target; +import org.panda_lang.language.interpreter.parser.pool.Targets; +import org.panda_lang.language.interpreter.parser.stage.Phases; import org.panda_lang.language.interpreter.pattern.functional.elements.QualifierElement; import org.panda_lang.language.interpreter.pattern.functional.elements.WildcardElement; import org.panda_lang.language.interpreter.pattern.functional.verifiers.TokenTypeVerifier; @@ -53,8 +53,8 @@ public final class RequireParser extends AutowiredParser { @Override - public PipelineComponent[] pipeline() { - return ArrayUtils.of(Pipelines.HEAD); + public Target[] pipeline() { + return ArrayUtils.of(Targets.HEAD); } @Override @@ -69,7 +69,7 @@ protected AutowiredInitializer initialize(Context context, AutowiredInitia ))); } - @Autowired(order = 1, stage = Stages.TYPES_LABEL) + @Autowired(order = 1, stage = Phases.TYPES_LABEL) public void parse(Context context, @Ctx Imports imports, @Src("required") @Nullable Snippetable require, @Src("requiredFile") @Nullable TokenInfo requiredFile) { if (require != null) { parseModule(context, imports, require.toSnippet()); diff --git a/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/scope/LateDeclarationParser.java b/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/scope/LateDeclarationParser.java index 20a61e547..9d1ee6ff6 100644 --- a/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/scope/LateDeclarationParser.java +++ b/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/scope/LateDeclarationParser.java @@ -20,8 +20,8 @@ import org.panda_lang.language.architecture.statement.VariableData; import org.panda_lang.language.interpreter.parser.Context; import org.panda_lang.language.interpreter.parser.Parser; -import org.panda_lang.language.interpreter.parser.pipeline.PipelineComponent; -import org.panda_lang.language.interpreter.parser.pipeline.Pipelines; +import org.panda_lang.language.interpreter.parser.pool.Target; +import org.panda_lang.language.interpreter.parser.pool.Targets; import org.panda_lang.language.interpreter.token.Snippetable; import org.panda_lang.language.architecture.statement.PandaVariableDataInitializer; import org.panda_lang.language.interpreter.pattern.Mappings; @@ -40,8 +40,8 @@ public final class LateDeclarationParser extends AutowiredParser { @Override - public PipelineComponent[] pipeline() { - return ArrayUtils.of(Pipelines.SCOPE); + public Target[] pipeline() { + return ArrayUtils.of(Targets.SCOPE); } @Override diff --git a/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/scope/LogParser.java b/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/scope/LogParser.java index cfb77ec95..d7155e689 100644 --- a/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/scope/LogParser.java +++ b/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/scope/LogParser.java @@ -19,13 +19,12 @@ import org.panda_lang.language.architecture.expression.Expression; import org.panda_lang.language.architecture.statement.Scope; import org.panda_lang.language.interpreter.logging.Logger; -import org.panda_lang.language.interpreter.parser.Components; import org.panda_lang.language.interpreter.parser.Context; import org.panda_lang.language.interpreter.parser.Parser; import org.panda_lang.language.interpreter.parser.expression.ExpressionParser; import org.panda_lang.language.interpreter.parser.expression.ExpressionTransaction; -import org.panda_lang.language.interpreter.parser.pipeline.PipelineComponent; -import org.panda_lang.language.interpreter.parser.pipeline.Pipelines; +import org.panda_lang.language.interpreter.parser.pool.Target; +import org.panda_lang.language.interpreter.parser.pool.Targets; import org.panda_lang.language.interpreter.source.Location; import org.panda_lang.language.resource.syntax.keyword.Keywords; import org.panda_lang.panda.language.interpreter.parser.autowired.AutowiredInitializer; @@ -42,8 +41,8 @@ public final class LogParser extends AutowiredParser { @Override - public PipelineComponent[] pipeline() { - return ArrayUtils.of(Pipelines.SCOPE); + public Target[] pipeline() { + return ArrayUtils.of(Targets.SCOPE); } @Override @@ -59,7 +58,7 @@ public void parse(Context context, @Ctx ExpressionParser parser, @Ctx Scope scop .map(ExpressionTransaction::getExpression) .toArray(Expression[]::new); - Logger logger = context.getComponent(Components.ENVIRONMENT).getLogger(); + Logger logger = context.getLogger(); scope.addStatement(new LogStatement(location, logger, expressions)); } diff --git a/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/scope/StandaloneExpressionParser.java b/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/scope/StandaloneExpressionParser.java index f1badc7bb..a1e7ede87 100644 --- a/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/scope/StandaloneExpressionParser.java +++ b/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/scope/StandaloneExpressionParser.java @@ -20,14 +20,12 @@ import org.panda_lang.language.architecture.statement.Scope; import org.panda_lang.language.interpreter.parser.Components; import org.panda_lang.language.interpreter.parser.Context; -import org.panda_lang.language.interpreter.parser.LocalChannel; import org.panda_lang.language.interpreter.parser.PandaParserFailure; import org.panda_lang.language.interpreter.parser.Parser; import org.panda_lang.language.interpreter.parser.expression.ExpressionParser; import org.panda_lang.language.interpreter.parser.expression.ExpressionParserSettings; -import org.panda_lang.language.interpreter.parser.pipeline.Handler; -import org.panda_lang.language.interpreter.parser.pipeline.PipelineComponent; -import org.panda_lang.language.interpreter.parser.pipeline.Pipelines; +import org.panda_lang.language.interpreter.parser.pool.Target; +import org.panda_lang.language.interpreter.parser.pool.Targets; import org.panda_lang.language.interpreter.source.Location; import org.panda_lang.language.interpreter.token.Snippet; import org.panda_lang.language.interpreter.token.SourceStream; @@ -49,8 +47,8 @@ public final class StandaloneExpressionParser extends AutowiredParser { private ExpressionParser expressionParser; @Override - public PipelineComponent[] pipeline() { - return ArrayUtils.of(Pipelines.SCOPE); + public Target[] pipeline() { + return ArrayUtils.of(Targets.SCOPE); } @Override diff --git a/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/scope/TryCatchParser.java b/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/scope/TryCatchParser.java index 8cd58790a..b4d010817 100644 --- a/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/scope/TryCatchParser.java +++ b/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/scope/TryCatchParser.java @@ -21,10 +21,9 @@ import org.panda_lang.language.architecture.statement.VariableData; import org.panda_lang.language.architecture.type.DynamicClass; import org.panda_lang.language.interpreter.parser.Context; -import org.panda_lang.language.interpreter.parser.LocalChannel; import org.panda_lang.language.interpreter.parser.Parser; -import org.panda_lang.language.interpreter.parser.pipeline.PipelineComponent; -import org.panda_lang.language.interpreter.parser.pipeline.Pipelines; +import org.panda_lang.language.interpreter.parser.pool.Target; +import org.panda_lang.language.interpreter.parser.pool.Targets; import org.panda_lang.language.interpreter.source.Location; import org.panda_lang.language.interpreter.token.Snippet; import org.panda_lang.language.architecture.statement.PandaBlock; @@ -45,8 +44,8 @@ public final class TryCatchParser extends AutowiredParser { private static final ScopeParser SCOPE_PARSER = new ScopeParser(); @Override - public PipelineComponent[] pipeline() { - return ArrayUtils.of(Pipelines.SCOPE); + public Target[] pipeline() { + return ArrayUtils.of(Targets.SCOPE); } @Override diff --git a/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/scope/block/conditional/ConditionalBlockParser.java b/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/scope/block/conditional/ConditionalBlockParser.java index 63940b492..b4b47a73c 100644 --- a/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/scope/block/conditional/ConditionalBlockParser.java +++ b/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/scope/block/conditional/ConditionalBlockParser.java @@ -23,7 +23,7 @@ import org.panda_lang.language.interpreter.parser.Context; import org.panda_lang.language.interpreter.parser.Parser; import org.panda_lang.language.interpreter.parser.expression.ExpressionTransaction; -import org.panda_lang.language.interpreter.parser.pipeline.PipelineComponent; +import org.panda_lang.language.interpreter.parser.pool.Target; import org.panda_lang.language.interpreter.source.Location; import org.panda_lang.language.architecture.expression.PandaExpression; import org.panda_lang.language.interpreter.parser.PandaParserFailure; @@ -46,7 +46,7 @@ public final class ConditionalBlockParser extends AutowiredBlockParser { @Override - public PipelineComponent[] pipeline() { + public Target[] pipeline() { return ArrayUtils.of(PandaPipeline.BLOCK); } diff --git a/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/scope/block/looping/ForEachParser.java b/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/scope/block/looping/ForEachParser.java index 74e49af05..97999d426 100644 --- a/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/scope/block/looping/ForEachParser.java +++ b/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/scope/block/looping/ForEachParser.java @@ -24,7 +24,7 @@ import org.panda_lang.language.interpreter.parser.Context; import org.panda_lang.language.interpreter.parser.Parser; import org.panda_lang.language.interpreter.parser.expression.ExpressionParser; -import org.panda_lang.language.interpreter.parser.pipeline.PipelineComponent; +import org.panda_lang.language.interpreter.parser.pool.Target; import org.panda_lang.language.interpreter.token.Snippet; import org.panda_lang.language.runtime.ProcessStack; import org.panda_lang.language.architecture.expression.PandaDynamicExpression; @@ -48,7 +48,7 @@ public final class ForEachParser extends AutowiredBlockParser { @Override - public PipelineComponent[] pipeline() { + public Target[] pipeline() { return ArrayUtils.of(PandaPipeline.BLOCK); } diff --git a/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/scope/block/looping/ForParser.java b/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/scope/block/looping/ForParser.java index 4ba9955b7..b5ff28e26 100644 --- a/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/scope/block/looping/ForParser.java +++ b/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/scope/block/looping/ForParser.java @@ -23,7 +23,7 @@ import org.panda_lang.language.interpreter.parser.Context; import org.panda_lang.language.interpreter.parser.Parser; import org.panda_lang.language.interpreter.parser.expression.ExpressionParser; -import org.panda_lang.language.interpreter.parser.pipeline.PipelineComponent; +import org.panda_lang.language.interpreter.parser.pool.Target; import org.panda_lang.language.interpreter.source.Location; import org.panda_lang.language.interpreter.token.Snippet; import org.panda_lang.language.architecture.expression.PandaExpression; @@ -47,7 +47,7 @@ public final class ForParser extends AutowiredBlockParser { private Expression defaultCondition; @Override - public PipelineComponent[] pipeline() { + public Target[] pipeline() { return ArrayUtils.of(PandaPipeline.BLOCK); } diff --git a/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/scope/block/looping/LoopParser.java b/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/scope/block/looping/LoopParser.java index 5addc2bfb..27bfb3713 100644 --- a/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/scope/block/looping/LoopParser.java +++ b/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/scope/block/looping/LoopParser.java @@ -20,7 +20,7 @@ import org.panda_lang.language.architecture.statement.Scope; import org.panda_lang.language.interpreter.parser.Context; import org.panda_lang.language.interpreter.parser.Parser; -import org.panda_lang.language.interpreter.parser.pipeline.PipelineComponent; +import org.panda_lang.language.interpreter.parser.pool.Target; import org.panda_lang.language.interpreter.source.Location; import org.panda_lang.language.interpreter.parser.PandaParserException; import org.panda_lang.language.resource.syntax.keyword.Keywords; @@ -38,7 +38,7 @@ public final class LoopParser extends AutowiredBlockParser { @Override - public PipelineComponent[] pipeline() { + public Target[] pipeline() { return ArrayUtils.of(PandaPipeline.BLOCK); } diff --git a/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/scope/block/looping/WhileParser.java b/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/scope/block/looping/WhileParser.java index c7982d02c..c1c7f8536 100644 --- a/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/scope/block/looping/WhileParser.java +++ b/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/scope/block/looping/WhileParser.java @@ -20,7 +20,7 @@ import org.panda_lang.language.architecture.statement.Scope; import org.panda_lang.language.interpreter.parser.Context; import org.panda_lang.language.interpreter.parser.Parser; -import org.panda_lang.language.interpreter.parser.pipeline.PipelineComponent; +import org.panda_lang.language.interpreter.parser.pool.Target; import org.panda_lang.language.interpreter.pattern.Mappings; import org.panda_lang.language.interpreter.source.Location; import org.panda_lang.language.interpreter.parser.PandaParserFailure; @@ -39,7 +39,7 @@ public final class WhileParser extends AutowiredBlockParser { @Override - public PipelineComponent[] pipeline() { + public Target[] pipeline() { return ArrayUtils.of(PandaPipeline.BLOCK); } diff --git a/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/scope/branching/BreakParser.java b/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/scope/branching/BreakParser.java index a51e80cb2..95e898522 100644 --- a/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/scope/branching/BreakParser.java +++ b/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/scope/branching/BreakParser.java @@ -21,8 +21,8 @@ import org.panda_lang.language.architecture.statement.ScopeUtils; import org.panda_lang.language.interpreter.parser.Context; import org.panda_lang.language.interpreter.parser.Parser; -import org.panda_lang.language.interpreter.parser.pipeline.PipelineComponent; -import org.panda_lang.language.interpreter.parser.pipeline.Pipelines; +import org.panda_lang.language.interpreter.parser.pool.Target; +import org.panda_lang.language.interpreter.parser.pool.Targets; import org.panda_lang.language.interpreter.source.Location; import org.panda_lang.language.interpreter.token.Snippet; import org.panda_lang.language.interpreter.parser.PandaParserFailure; @@ -38,8 +38,8 @@ public final class BreakParser extends AutowiredParser { @Override - public PipelineComponent[] pipeline() { - return ArrayUtils.of(Pipelines.SCOPE); + public Target[] pipeline() { + return ArrayUtils.of(Targets.SCOPE); } @Override diff --git a/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/scope/branching/ContinueParser.java b/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/scope/branching/ContinueParser.java index eef50d70d..8f78af6e8 100644 --- a/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/scope/branching/ContinueParser.java +++ b/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/scope/branching/ContinueParser.java @@ -21,8 +21,8 @@ import org.panda_lang.language.architecture.statement.ScopeUtils; import org.panda_lang.language.interpreter.parser.Context; import org.panda_lang.language.interpreter.parser.Parser; -import org.panda_lang.language.interpreter.parser.pipeline.PipelineComponent; -import org.panda_lang.language.interpreter.parser.pipeline.Pipelines; +import org.panda_lang.language.interpreter.parser.pool.Target; +import org.panda_lang.language.interpreter.parser.pool.Targets; import org.panda_lang.language.interpreter.source.Location; import org.panda_lang.language.interpreter.token.Snippet; import org.panda_lang.language.interpreter.parser.PandaParserFailure; @@ -38,8 +38,8 @@ public final class ContinueParser extends AutowiredParser { @Override - public PipelineComponent[] pipeline() { - return ArrayUtils.of(Pipelines.SCOPE); + public Target[] pipeline() { + return ArrayUtils.of(Targets.SCOPE); } @Override diff --git a/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/scope/branching/ReturnParser.java b/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/scope/branching/ReturnParser.java index 930021dca..36c60a052 100644 --- a/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/scope/branching/ReturnParser.java +++ b/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/scope/branching/ReturnParser.java @@ -21,8 +21,8 @@ import org.panda_lang.language.architecture.statement.Scope; import org.panda_lang.language.interpreter.parser.Context; import org.panda_lang.language.interpreter.parser.Parser; -import org.panda_lang.language.interpreter.parser.pipeline.PipelineComponent; -import org.panda_lang.language.interpreter.parser.pipeline.Pipelines; +import org.panda_lang.language.interpreter.parser.pool.Target; +import org.panda_lang.language.interpreter.parser.pool.Targets; import org.panda_lang.language.interpreter.source.Location; import org.panda_lang.language.resource.syntax.keyword.Keywords; import org.panda_lang.panda.language.interpreter.parser.autowired.AutowiredInitializer; @@ -37,8 +37,8 @@ public final class ReturnParser extends AutowiredParser { @Override - public PipelineComponent[] pipeline() { - return ArrayUtils.of(Pipelines.SCOPE); + public Target[] pipeline() { + return ArrayUtils.of(Targets.SCOPE); } @Override diff --git a/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/scope/branching/ThrowParser.java b/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/scope/branching/ThrowParser.java index 69685ea98..fab5a0629 100644 --- a/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/scope/branching/ThrowParser.java +++ b/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/scope/branching/ThrowParser.java @@ -20,8 +20,8 @@ import org.panda_lang.language.architecture.statement.Scope; import org.panda_lang.language.interpreter.parser.Context; import org.panda_lang.language.interpreter.parser.Parser; -import org.panda_lang.language.interpreter.parser.pipeline.PipelineComponent; -import org.panda_lang.language.interpreter.parser.pipeline.Pipelines; +import org.panda_lang.language.interpreter.parser.pool.Target; +import org.panda_lang.language.interpreter.parser.pool.Targets; import org.panda_lang.language.interpreter.source.Location; import org.panda_lang.language.resource.syntax.keyword.Keywords; import org.panda_lang.panda.language.interpreter.parser.autowired.AutowiredInitializer; @@ -36,8 +36,8 @@ public final class ThrowParser extends AutowiredParser { @Override - public PipelineComponent[] pipeline() { - return ArrayUtils.of(Pipelines.SCOPE); + public Target[] pipeline() { + return ArrayUtils.of(Targets.SCOPE); } @Override diff --git a/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/type/BaseCallParser.java b/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/type/BaseCallParser.java index 5cd6e31c8..8339105df 100644 --- a/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/type/BaseCallParser.java +++ b/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/type/BaseCallParser.java @@ -21,8 +21,8 @@ import org.panda_lang.language.architecture.type.Type; import org.panda_lang.language.interpreter.parser.Context; import org.panda_lang.language.interpreter.parser.Parser; -import org.panda_lang.language.interpreter.parser.pipeline.PipelineComponent; -import org.panda_lang.language.interpreter.parser.pipeline.Pipelines; +import org.panda_lang.language.interpreter.parser.pool.Target; +import org.panda_lang.language.interpreter.parser.pool.Targets; import org.panda_lang.language.interpreter.source.Location; import org.panda_lang.language.interpreter.token.Snippet; import org.panda_lang.language.architecture.type.member.constructor.BaseCall; @@ -44,8 +44,8 @@ public final class BaseCallParser extends AutowiredParser { private static final ArgumentsParser ARGUMENTS_PARSER = new ArgumentsParser(); @Override - public PipelineComponent[] pipeline() { - return ArrayUtils.of(Pipelines.SCOPE); + public Target[] pipeline() { + return ArrayUtils.of(Targets.SCOPE); } @Override diff --git a/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/type/ConstructorParser.java b/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/type/ConstructorParser.java index 96ecba7d4..02d1edeae 100644 --- a/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/type/ConstructorParser.java +++ b/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/type/ConstructorParser.java @@ -21,10 +21,9 @@ import org.panda_lang.language.architecture.type.Type; import org.panda_lang.language.architecture.type.member.constructor.TypeConstructor; import org.panda_lang.language.interpreter.parser.Context; -import org.panda_lang.language.interpreter.parser.LocalChannel; import org.panda_lang.language.interpreter.parser.Parser; -import org.panda_lang.language.interpreter.parser.pipeline.PipelineComponent; -import org.panda_lang.language.interpreter.parser.pipeline.Pipelines; +import org.panda_lang.language.interpreter.parser.pool.Target; +import org.panda_lang.language.interpreter.parser.pool.Targets; import org.panda_lang.language.interpreter.source.Location; import org.panda_lang.language.interpreter.token.Snippet; import org.panda_lang.language.architecture.type.member.constructor.ConstructorScope; @@ -36,7 +35,7 @@ import org.panda_lang.language.resource.syntax.keyword.Keywords; import org.panda_lang.panda.language.interpreter.parser.ScopeParser; import org.panda_lang.panda.language.interpreter.parser.autowired.AutowiredInitializer; -import org.panda_lang.language.interpreter.parser.stage.Phases; +import org.panda_lang.language.interpreter.parser.stage.Layer; import org.panda_lang.panda.language.interpreter.parser.autowired.AutowiredParser; import org.panda_lang.panda.language.interpreter.parser.autowired.annotations.Autowired; import org.panda_lang.panda.language.interpreter.parser.autowired.annotations.Channel; @@ -53,8 +52,8 @@ public final class ConstructorParser extends AutowiredParser { private static final ScopeParser SCOPE_PARSER = new ScopeParser(); @Override - public PipelineComponent[] pipeline() { - return ArrayUtils.of(Pipelines.TYPE); + public Target[] pipeline() { + return ArrayUtils.of(Targets.TYPE); } @Override @@ -89,7 +88,7 @@ public void parse(Context context, LocalChannel channel, @Channel Location locat typeScope.getType().getConstructors().declare(constructor); } - @Autowired(order = 2, phase = Phases.NEXT_DEFAULT) + @Autowired(order = 2, phase = Layer.NEXT_DEFAULT) public void parse(Context context, @Ctx TypeScope typeScope, @Channel ConstructorScope scope, @Channel TypeConstructor constructor, @Channel Snippet src, @Src("body") @Nullable Snippet body) { SCOPE_PARSER.parse(context, scope, body); diff --git a/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/type/FieldParser.java b/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/type/FieldParser.java index fa36b3a69..4193eebfc 100644 --- a/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/type/FieldParser.java +++ b/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/type/FieldParser.java @@ -23,11 +23,10 @@ import org.panda_lang.language.architecture.type.member.field.TypeField; import org.panda_lang.language.architecture.type.Visibility; import org.panda_lang.language.interpreter.parser.Context; -import org.panda_lang.language.interpreter.parser.LocalChannel; import org.panda_lang.language.interpreter.parser.Parser; import org.panda_lang.language.interpreter.parser.expression.ExpressionTransaction; -import org.panda_lang.language.interpreter.parser.pipeline.PipelineComponent; -import org.panda_lang.language.interpreter.parser.pipeline.Pipelines; +import org.panda_lang.language.interpreter.parser.pool.Target; +import org.panda_lang.language.interpreter.parser.pool.Targets; import org.panda_lang.language.interpreter.source.Location; import org.panda_lang.language.interpreter.token.Snippet; import org.panda_lang.language.interpreter.token.TokenInfo; @@ -35,7 +34,7 @@ import org.panda_lang.language.architecture.type.member.field.PandaField; import org.panda_lang.language.architecture.type.TypeComponents; import org.panda_lang.language.interpreter.parser.PandaParserFailure; -import org.panda_lang.language.interpreter.parser.stage.Stages; +import org.panda_lang.language.interpreter.parser.stage.Phases; import org.panda_lang.language.interpreter.pattern.Mappings; import org.panda_lang.language.resource.syntax.TokenTypes; import org.panda_lang.language.resource.syntax.keyword.Keywords; @@ -50,8 +49,8 @@ public final class FieldParser extends AutowiredParser { @Override - public PipelineComponent[] pipeline() { - return ArrayUtils.of(Pipelines.TYPE); + public Target[] pipeline() { + return ArrayUtils.of(Targets.TYPE); } @Override @@ -74,7 +73,7 @@ protected AutowiredInitializer initialize(Context context, AutowiredInitia ).optional()); } - @Autowired(order = 1, stage = Stages.TYPES_LABEL) + @Autowired(order = 1, stage = Phases.TYPES_LABEL) public void parse(Context context, LocalChannel channel, @Channel Mappings mappings, @Channel Location location, @Src("type") Snippet typeName, @Src("name") TokenInfo name) { Type returnType = PandaImportsUtils.getTypeOrThrow(context, typeName.asSource(), typeName); Visibility visibility = Visibility.valueOf(mappings.get("visibility").get().toString().toUpperCase()); @@ -98,7 +97,7 @@ public void parse(Context context, LocalChannel channel, @Channel Mappings mappi channel.allocated("field", field); } - @Autowired(order = 2, stage = Stages.CONTENT_LABEL) + @Autowired(order = 2, stage = Phases.CONTENT_LABEL) public void parseAssignation(Context context, @Channel Snippet source, @Channel TypeField field, @Src("assignation") @Nullable Expression assignationValue) { if (assignationValue == null) { //throw new PandaParserFailure("Cannot parse expression '" + assignationValue + "'", context, name); diff --git a/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/type/MethodParser.java b/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/type/MethodParser.java index a69643652..1ea1e964b 100644 --- a/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/type/MethodParser.java +++ b/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/type/MethodParser.java @@ -28,13 +28,12 @@ import org.panda_lang.language.architecture.type.TypedUtils; import org.panda_lang.language.interpreter.parser.Components; import org.panda_lang.language.interpreter.parser.Context; -import org.panda_lang.language.interpreter.parser.LocalChannel; import org.panda_lang.language.interpreter.parser.PandaParserFailure; import org.panda_lang.language.interpreter.parser.Parser; -import org.panda_lang.language.interpreter.parser.pipeline.PipelineComponent; -import org.panda_lang.language.interpreter.parser.pipeline.Pipelines; +import org.panda_lang.language.interpreter.parser.pool.Target; +import org.panda_lang.language.interpreter.parser.pool.Targets; +import org.panda_lang.language.interpreter.parser.stage.Layer; import org.panda_lang.language.interpreter.parser.stage.Phases; -import org.panda_lang.language.interpreter.parser.stage.Stages; import org.panda_lang.language.interpreter.pattern.Mappings; import org.panda_lang.language.interpreter.pattern.functional.elements.TypeElement; import org.panda_lang.language.interpreter.pattern.functional.elements.UnitElement; @@ -67,8 +66,8 @@ public final class MethodParser extends AutowiredParser { private static final ScopeParser SCOPE_PARSER = new ScopeParser(); @Override - public PipelineComponent[] pipeline() { - return ArrayUtils.of(Pipelines.TYPE); + public Target[] pipeline() { + return ArrayUtils.of(Targets.TYPE); } @Override @@ -94,7 +93,7 @@ protected AutowiredInitializer initialize(Context context, AutowiredInitia .section("body", Separators.BRACE_LEFT).optional()); } - @Autowired(order = 1, stage = Stages.TYPES_LABEL) + @Autowired(order = 1, stage = Phases.TYPES_LABEL) public void parseReturnType(Context context, LocalChannel channel, @Ctx Type type, @Src("type") @Nullable Snippetable returnTypeNameSource) { Snippet returnTypeName = returnTypeNameSource != null ? returnTypeNameSource.toSnippet() : null; @@ -112,14 +111,14 @@ public void parseReturnType(Context context, LocalChannel channel, @Ctx Type typ .peek(returnType -> channel.allocated("type", returnType)); } - @Autowired(order = 2, stage = Stages.TYPES_LABEL) + @Autowired(order = 2, stage = Phases.TYPES_LABEL) public void parseParameters(Context context, LocalChannel channel, @Src("name") TokenInfo name, @Src("parameters") Snippet parametersSource) { List parameters = PARAMETER_PARSER.parse(context, parametersSource); MethodScope methodScope = new MethodScope(name.getLocation(), parameters); channel.allocated("scope", methodScope); } - @Autowired(order = 3, stage = Stages.TYPES_LABEL) + @Autowired(order = 3, stage = Phases.TYPES_LABEL) public void verifyData( Context context, LocalChannel channel, @@ -169,7 +168,7 @@ public void verifyData( }); } - @Autowired(order = 4, stage = Stages.TYPES_LABEL) + @Autowired(order = 4, stage = Phases.TYPES_LABEL) public void declareMethod(LocalChannel channel, @Ctx Type type, @Channel Mappings mappings, @Src("name") TokenInfo name, @Channel Type returnType, @Channel MethodScope scope, @Src("body") Snippet body) { TypeMethod method = PandaMethod.builder() .type(type) @@ -188,7 +187,7 @@ public void declareMethod(LocalChannel channel, @Ctx Type type, @Channel Mapping channel.allocated("method", method); } - @Autowired(order = 5, phase = Phases.NEXT_DEFAULT) + @Autowired(order = 5, phase = Layer.NEXT_DEFAULT) public void parse(Context context, @Ctx Type type, @Channel Mappings mappings, @Channel MethodScope methodScope, @Channel TypeMethod method, @Nullable @Src("body") Snippet body) { if (!SnippetUtils.isEmpty(body)) { SCOPE_PARSER.parse(context, methodScope, body); diff --git a/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/type/SelfConstructorParser.java b/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/type/SelfConstructorParser.java index 848469ffc..c58b6739c 100644 --- a/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/type/SelfConstructorParser.java +++ b/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/type/SelfConstructorParser.java @@ -19,11 +19,9 @@ import org.panda_lang.language.architecture.statement.Scope; import org.panda_lang.language.architecture.type.Type; import org.panda_lang.language.interpreter.parser.Context; -import org.panda_lang.language.interpreter.parser.LocalChannel; import org.panda_lang.language.interpreter.parser.Parser; -import org.panda_lang.language.interpreter.parser.pipeline.Handler; -import org.panda_lang.language.interpreter.parser.pipeline.PipelineComponent; -import org.panda_lang.language.interpreter.parser.pipeline.Pipelines; +import org.panda_lang.language.interpreter.parser.pool.Target; +import org.panda_lang.language.interpreter.parser.pool.Targets; import org.panda_lang.language.interpreter.source.Location; import org.panda_lang.language.interpreter.token.Snippet; import org.panda_lang.language.architecture.type.member.constructor.ConstructorScope; @@ -44,8 +42,8 @@ public final class SelfConstructorParser extends AutowiredParser { private static final ArgumentsParser ARGUMENTS_PARSER = new ArgumentsParser(); @Override - public PipelineComponent[] pipeline() { - return ArrayUtils.of(Pipelines.SCOPE); + public Target[] pipeline() { + return ArrayUtils.of(Targets.SCOPE); } @Override diff --git a/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/type/TypeParser.java b/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/type/TypeParser.java index 1e8dbea3c..558fc5b94 100644 --- a/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/type/TypeParser.java +++ b/panda/src/main/java/org/panda_lang/panda/language/resource/syntax/type/TypeParser.java @@ -31,23 +31,22 @@ import org.panda_lang.language.architecture.type.member.method.TypeMethod; import org.panda_lang.language.interpreter.parser.Components; import org.panda_lang.language.interpreter.parser.Context; +import org.panda_lang.language.interpreter.parser.ContextParser; import org.panda_lang.language.interpreter.parser.PandaParserFailure; import org.panda_lang.language.interpreter.parser.Parser; -import org.panda_lang.language.interpreter.parser.pipeline.PipelineComponent; -import org.panda_lang.language.interpreter.parser.pipeline.PipelineParser; -import org.panda_lang.language.interpreter.parser.pipeline.Pipelines; +import org.panda_lang.language.interpreter.parser.pool.Target; +import org.panda_lang.language.interpreter.parser.pool.PoolParser; +import org.panda_lang.language.interpreter.parser.pool.Targets; +import org.panda_lang.language.interpreter.parser.stage.Layer; import org.panda_lang.language.interpreter.parser.stage.Phases; -import org.panda_lang.language.interpreter.parser.stage.Stages; import org.panda_lang.language.interpreter.pattern.Mappings; import org.panda_lang.language.interpreter.pattern.functional.elements.GenericsElement; -import org.panda_lang.language.interpreter.pattern.functional.verifiers.TokenVerifier; import org.panda_lang.language.interpreter.source.Location; import org.panda_lang.language.interpreter.token.PandaSourceStream; import org.panda_lang.language.interpreter.token.Snippet; import org.panda_lang.language.interpreter.token.Snippetable; import org.panda_lang.language.resource.syntax.TokenTypes; import org.panda_lang.language.resource.syntax.keyword.Keywords; -import org.panda_lang.language.resource.syntax.operator.Operators; import org.panda_lang.language.resource.syntax.separator.Separators; import org.panda_lang.panda.language.interpreter.parser.autowired.AutowiredInitializer; import org.panda_lang.panda.language.interpreter.parser.autowired.AutowiredParser; @@ -60,13 +59,13 @@ import java.util.Collection; -public final class TypeParser extends AutowiredParser { +public final class TypeParser extends ContextParser { - private static final PipelineParser TYPE_PIPELINE_PARSER = new PipelineParser<>(Pipelines.TYPE); + private static final PoolParser TYPE_PIPELINE_PARSER = new PoolParser<>(Targets.TYPE); @Override - public PipelineComponent[] pipeline() { - return ArrayUtils.of(Pipelines.HEAD); + public Target[] pipeline() { + return ArrayUtils.of(Targets.HEAD); } @Override @@ -83,7 +82,7 @@ protected AutowiredInitializer initialize(Context context, AutowiredInitia .section("body", Separators.BRACE_LEFT)); } - @Autowired(order = 0, stage = Stages.TYPES_LABEL) + @Autowired(order = 0, stage = Phases.TYPES_LABEL) public void parse(Context context, @Channel Location location, @Channel Mappings mappings, @Ctx Script script, @Src("model") String model, @Src("name") String name) { Visibility visibility = mappings.get("visibility") .map(Visibility::of) @@ -110,7 +109,7 @@ public void parse(Context context, @Channel Location location, @Channel Mappings .withComponent(TypeComponents.PROTOTYPE, type); } - @Autowired(order = 1, stage = Stages.TYPES_LABEL, phase = Phases.CURRENT_AFTER) + @Autowired(order = 1, stage = Phases.TYPES_LABEL, phase = Layer.CURRENT_AFTER) public void parseDeclaration(Context context, @Ctx Type type, @Ctx TypeLoader loader, @Nullable @Src("inherited") Collection inherited) { if (inherited != null) { inherited.forEach(typeSource -> TypeParserUtils.appendExtended(context, type, typeSource)); @@ -121,12 +120,12 @@ public void parseDeclaration(Context context, @Ctx Type type, @Ctx TypeLoader lo } } - @Autowired(order = 2, stage = Stages.TYPES_LABEL, phase = Phases.NEXT_BEFORE) + @Autowired(order = 2, stage = Phases.TYPES_LABEL, phase = Layer.NEXT_BEFORE) public Object parseBody(Context context, @Ctx Type type, @Src("body") Snippet body) { return TYPE_PIPELINE_PARSER.parse(context, new PandaSourceStream(body)); } - @Autowired(order = 3, stage = Stages.TYPES_LABEL, phase = Phases.CURRENT_AFTER) + @Autowired(order = 3, stage = Phases.TYPES_LABEL, phase = Layer.CURRENT_AFTER) public void verifyProperties(Context context, @Ctx Type type, @Ctx TypeScope scope) { if (type.getState() != State.ABSTRACT) { type.getBases().stream() @@ -160,7 +159,7 @@ public void verifyProperties(Context context, @Ctx Type type, @Ctx TypeScope sco } } - @Autowired(order = 4, stage = Stages.CONTENT_LABEL, phase = Phases.CURRENT_AFTER) + @Autowired(order = 4, stage = Phases.CONTENT_LABEL, phase = Layer.CURRENT_AFTER) public void verifyContent(Context context, @Ctx Type type) { for (TypeField field : type.getFields().getDeclaredProperties()) { if (!field.isInitialized() && !(field.isNillable() && field.isMutable())) { diff --git a/panda/src/main/java/org/panda_lang/panda/shell/repl/Repl.java b/panda/src/main/java/org/panda_lang/panda/shell/repl/Repl.java index 3ac426efb..1297eb8e6 100644 --- a/panda/src/main/java/org/panda_lang/panda/shell/repl/Repl.java +++ b/panda/src/main/java/org/panda_lang/panda/shell/repl/Repl.java @@ -25,7 +25,6 @@ import org.panda_lang.language.interpreter.parser.Components; import org.panda_lang.language.interpreter.parser.Context; import org.panda_lang.language.interpreter.parser.expression.ExpressionParser; -import org.panda_lang.language.interpreter.parser.pipeline.PandaLocalChannel; import org.panda_lang.language.interpreter.source.Location; import org.panda_lang.language.interpreter.source.PandaSource; import org.panda_lang.language.interpreter.token.PandaLocation; diff --git a/pom.xml b/pom.xml index bb2228e94..7e96d0cef 100644 --- a/pom.xml +++ b/pom.xml @@ -112,34 +112,40 @@ org.jetbrains annotations - 20.0.0 + 20.1.0 org.openjdk.jmh jmh-core - 1.25.1 + 1.25.2 test org.openjdk.jmh jmh-generator-annprocess - 1.25.1 + 1.25.2 test + + org.codehaus.groovy + groovy + 3.0.6 + test + org.junit.jupiter junit-jupiter-api - 5.6.2 + 5.7.0 test org.junit.jupiter junit-jupiter-engine - 5.6.2 + 5.7.0 test @@ -163,6 +169,12 @@ clean install + org.eluder.coveralls coveralls-maven-plugin @@ -171,19 +183,17 @@ org.jacoco jacoco-maven-plugin - org.apache.maven.plugins - maven-compiler-plugin + maven-surefire-plugin org.apache.maven.plugins - maven-surefire-plugin + maven-compiler-plugin @@ -194,11 +204,10 @@ coveralls-maven-plugin 4.3.0 - org.jacoco jacoco-maven-plugin - 0.8.5 + 0.8.6 @@ -220,6 +229,20 @@ + + org.codehaus.gmavenplus + gmavenplus-plugin + 1.10.1 + + + + compile + compileTests + + + + + org.apache.maven.plugins maven-compiler-plugin @@ -230,7 +253,6 @@ -parameters -