Changeset 13445


Ignore:
Timestamp:
Sep 11, 2019 9:55:48 AM (3 months ago)
Author:
Christian Andersson
Message:

Minor refactoring for the evaluator. Related to ticket:5837

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/dev-cw-evaluator/Compiler/ModelicaFrontEnd/src/java/org/jmodelica/common/evaluation/ExternalProcessCacheImpl.java

    r13440 r13445  
    8888    }
    8989   
    90     public boolean canUseEvaluator(E ext) {
     90    private ArrayList<String> builtinExternalFunctions = new ArrayList<String>() {{
     91        add("ModelicaStrings_substring");
     92        add("ModelicaStrings_length");
     93        add("item3");
     94    }};
     95   
     96    public boolean canUseEvaluator(E ext, ArrayList<String> arguments) {
     97        if (!(ext.myOptions().getBooleanOption("enable_external_evaluator"))) {
     98            return false;
     99        }
     100       
     101        /* External objects not supported at the moment */
    91102        for (K eo : ext.externalObjectsToSerialize()) {
    92103            return false;
    93104        }
    94105       
    95         if (!(ext.myOptions().getBooleanOption("enable_external_evaluator"))) {
    96             return false;
    97         }
     106        String sharedLibrary = getSharedLibrary(ext);
     107        String functionName  = ext.getName();
     108        String outputArguments = getOutputArguments(ext);
     109        String inputArguments  = getInputArguments(ext);
     110       
     111       
     112        if (sharedLibrary.equals("")) {
     113            if (builtinExternalFunctions.contains(functionName)) {
     114                sharedLibrary = "NoSharedLibrary";
     115            } else {
     116                /* Not a built in and not found any shared libraries */
     117                return false;
     118            }
     119        }
     120       
     121        arguments.add(sharedLibrary);
     122        arguments.add(functionName);
     123        arguments.add(outputArguments);
     124        arguments.add(inputArguments);
    98125        /* TODO:
    99          * Verify that the library used is a shared library, not static. */
    100         /* Builtins, such as Modelica functions should be accepted
    101            Verify that the actual inputs/outputs are supported */
     126         * Verify that the actual inputs/outputs are supported
     127         */
    102128       
    103129        return true;
     
    114140                long time = System.currentTimeMillis();
    115141                String executable = null;
    116                 ArrayList<String> arguments = null;
    117                 if (canUseEvaluator(ext)) {
     142                ArrayList<String> arguments = new ArrayList<String>();
     143                if (canUseEvaluator(ext, arguments)) {
    118144                    String jmHome = System.getenv("JMODELICA_HOME");
    119145                    String platform = CCompilerDelegator.reduceBits(EnvironmentUtils.getJavaPlatform(),mc.getCCompiler().getTargetPlatforms());
     
    121147                    executable = jmHome + File.separator + "bin" + bits + File.separator + "jmi_evaluator" + SystemUtil.executableExtension();
    122148                   
    123                     String sharedLibrary = getSharedLibrary(ext);
    124                     if (sharedLibrary.equals("")) { sharedLibrary = "NoSharedLibrary"; }
    125                    
    126                     arguments = new ArrayList<String>();
    127                     arguments.add(executable);
    128                     arguments.add(sharedLibrary);
    129                     arguments.add(ext.getName());
    130                     arguments.add(getOutputArguments(ext));
    131                     arguments.add(getInputArguments(ext));
     149                    arguments.add(0, executable); /* Needs to be first */
    132150                   
    133151                    mc.log().debug("Using pre-compiled evaluator for outputs: '" + getOutputArguments(ext) + "' and inputs: '" + getInputArguments(ext));
     
    135153                    executable = mc.compileExternal(ext);
    136154                }
     155                arguments = arguments.size() == 0 ? null : arguments; /* Can likely be made better...*/
    137156                if (ext.shouldCacheProcess()) {
    138157                    ef = new MappedExternalFunction(ext, executable, arguments);
Note: See TracChangeset for help on using the changeset viewer.