-
-
Notifications
You must be signed in to change notification settings - Fork 925
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[Truffle] Lazily initialised, shared string literals.
- 9.4.12.0
- 9.4.11.0
- 9.4.10.0
- 9.4.9.0
- 9.4.8.0
- 9.4.7.0
- 9.4.6.0
- 9.4.5.0
- 9.4.4.0
- 9.4.3.0
- 9.4.2.0
- 9.4.1.0
- 9.4.0.0
- 9.3.15.0
- 9.3.14.0
- 9.3.13.0
- 9.3.12.0
- 9.3.11.0
- 9.3.10.0
- 9.3.9.0
- 9.3.8.0
- 9.3.7.0
- 9.3.6.0
- 9.3.5.0
- 9.3.4.0
- 9.3.3.0
- 9.3.2.0
- 9.3.1.0
- 9.3.0.0
- 9.2.21.0
- 9.2.20.1
- 9.2.20.0
- 9.2.19.0
- 9.2.18.0
- 9.2.17.0
- 9.2.16.0
- 9.2.15.0
- 9.2.14.0
- 9.2.13.0
- 9.2.12.0
- 9.2.11.1
- 9.2.11.0
- 9.2.10.0
- 9.2.9.0
- 9.2.8.0
- 9.2.7.0
- 9.2.6.0
- 9.2.5.0
- 9.2.4.1
- 9.2.4.0
- 9.2.3.0
- 9.2.2.0
- 9.2.1.0
- 9.2.0.0
- 9.1.17.0
- 9.1.16.0
- 9.1.15.0
- 9.1.14.0
- 9.1.13.0
- 9.1.12.0
- 9.1.11.0
- 9.1.10.0
- 9.1.9.0
- 9.1.8.0
- 9.1.7.0
- 9.1.6.0
- 9.1.5.0
- 9.1.4.0
- 9.1.3.0
- 9.1.2.0
- 9.1.1.0
- 9.1.0.0
1 parent
6ee231d
commit 36c437e
Showing
5 changed files
with
104 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
67 changes: 67 additions & 0 deletions
67
truffle/src/main/java/org/jruby/truffle/core/string/StringLiteral.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
/* | ||
* Copyright (c) 2016 Oracle and/or its affiliates. All rights reserved. This | ||
* code is released under a tri EPL/GPL/LGPL license. You can use it, | ||
* redistribute it and/or modify it under the terms of the: | ||
* | ||
* Eclipse Public License version 1.0 | ||
* GNU General Public License version 2 | ||
* GNU Lesser General Public License version 2.1 | ||
*/ | ||
package org.jruby.truffle.core.string; | ||
|
||
import com.oracle.truffle.api.CompilerDirectives; | ||
import com.oracle.truffle.api.CompilerDirectives.CompilationFinal; | ||
import com.oracle.truffle.api.object.DynamicObject; | ||
import org.jcodings.specific.USASCIIEncoding; | ||
import org.jruby.truffle.RubyContext; | ||
import org.jruby.truffle.core.rope.CodeRange; | ||
import org.jruby.truffle.core.rope.Rope; | ||
|
||
import java.nio.charset.StandardCharsets; | ||
|
||
public class StringLiteral { | ||
|
||
private final RubyContext context; | ||
private final String literal; | ||
|
||
@CompilationFinal private volatile Rope rope; | ||
|
||
public StringLiteral(RubyContext context, String literal) { | ||
assert is7Bit(literal); | ||
this.context = context; | ||
this.literal = literal; | ||
} | ||
|
||
public Rope getRope() { | ||
if (rope == null) { | ||
CompilerDirectives.transferToInterpreterAndInvalidate(); | ||
rope = createRope(); | ||
} | ||
|
||
return rope; | ||
} | ||
|
||
public DynamicObject getString() { | ||
return StringOperations.createString(context, getRope()); | ||
} | ||
|
||
private Rope createRope() { | ||
// getRope is fully synchronised and returns identically the same object for the same parameters | ||
|
||
return context.getRopeTable().getRope( | ||
literal.getBytes(StandardCharsets.US_ASCII), | ||
USASCIIEncoding.INSTANCE, | ||
CodeRange.CR_7BIT); | ||
} | ||
|
||
private static boolean is7Bit(String literal) { | ||
for (int n = 0; n < literal.length(); n++) { | ||
if (literal.charAt(n) > 0b1111111) { | ||
return false; | ||
} | ||
} | ||
|
||
return true; | ||
} | ||
|
||
} |
25 changes: 25 additions & 0 deletions
25
truffle/src/main/java/org/jruby/truffle/core/string/StringLiterals.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
/* | ||
* Copyright (c) 2016 Oracle and/or its affiliates. All rights reserved. This | ||
* code is released under a tri EPL/GPL/LGPL license. You can use it, | ||
* redistribute it and/or modify it under the terms of the: | ||
* | ||
* Eclipse Public License version 1.0 | ||
* GNU General Public License version 2 | ||
* GNU Lesser General Public License version 2.1 | ||
*/ | ||
package org.jruby.truffle.core.string; | ||
|
||
import org.jruby.truffle.RubyContext; | ||
|
||
public class StringLiterals { | ||
|
||
private final RubyContext context; | ||
|
||
public final StringLiteral NIL; | ||
|
||
public StringLiterals(RubyContext context) { | ||
this.context = context; | ||
NIL = new StringLiteral(context, "nil"); | ||
} | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters