From 4270163f8d3650c2ff1b67ead8c04c0776c35637 Mon Sep 17 00:00:00 2001 From: Michael Haupt <michael.haupt@oracle.com> Date: Tue, 28 Jan 2014 11:34:12 +0100 Subject: [PATCH] make RContext instantiation more safe (private constructor, safety check) --- .../src/com/oracle/truffle/r/engine/REngine.java | 3 +-- .../src/com/oracle/truffle/r/runtime/RContext.java | 11 +++++++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/REngine.java b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/REngine.java index 73345654c9..114953b6d8 100644 --- a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/REngine.java +++ b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/REngine.java @@ -51,9 +51,8 @@ public final class REngine { private REngine(String[] commandArgs, ConsoleHandler consoleHandler) { RDefaultPackages defaultPackages = RDefaultPackages.getInstance(); - this.context = new RContext(defaultPackages, commandArgs, consoleHandler); + this.context = RContext.instantiate(defaultPackages, commandArgs, consoleHandler); defaultPackages.load(context); - } /** diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RContext.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RContext.java index 88f6b4cca6..dd5d71c1db 100644 --- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RContext.java +++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RContext.java @@ -99,13 +99,20 @@ public final class RContext { return singleton; } - public RContext(RBuiltinLookup lookup, String[] commandArgs, ConsoleHandler consoleHandler) { + public static RContext instantiate(RBuiltinLookup lookup, String[] commandArgs, ConsoleHandler consoleHandler) { + if (singleton != null) { + throw new IllegalStateException("RContext already instantiated."); + } + singleton = new RContext(lookup, commandArgs, consoleHandler); + return singleton; + } + + private RContext(RBuiltinLookup lookup, String[] commandArgs, ConsoleHandler consoleHandler) { this.sourceManager = new SourceManager(); this.lookup = lookup; this.commandArgs = commandArgs; this.consoleHandler = consoleHandler; this.evalWarnings = null; - singleton = this; } public RBuiltinLookup getLookup() { -- GitLab