Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Opal v0.9.2 #3

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Gemfile
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
source 'https://rubygems.org'
gem 'opal', '~> 0.8.0'
gem 'opal', '~> 0.9.2'
14 changes: 8 additions & 6 deletions Gemfile.lock
Original file line number Diff line number Diff line change
@@ -1,20 +1,22 @@
GEM
remote: https://rubygems.org/
specs:
concurrent-ruby (1.0.1)
hike (1.2.3)
opal (0.8.0)
opal (0.9.2)
hike (~> 1.2)
sourcemap (~> 0.1.0)
sprockets (~> 3.1)
tilt (>= 1.4)
rack (1.6.1)
rack (1.6.4)
sourcemap (0.1.1)
sprockets (3.2.0)
rack (~> 1.0)
tilt (2.0.1)
sprockets (3.5.2)
concurrent-ruby (~> 1.0)
rack (> 1, < 3)
tilt (2.0.2)

PLATFORMS
ruby

DEPENDENCIES
opal (~> 0.8.0)
opal (~> 0.9.2)
298 changes: 4 additions & 294 deletions compiler.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,299 +2,9 @@
require "opal-source-maps"
require "opal-parser"

# MRI implement `begin/end while condition` differently
# See issue: https://github.com/opal/opal/issues/575
module SourceMap
module VLQ
def self.encode(ary)
result = []
ary.each do |n|
vlq = n < 0 ? ((-n) << 1) + 1 : n << 1
loop do
digit = vlq & VLQ_BASE_MASK
vlq >>= VLQ_BASE_SHIFT
digit |= VLQ_CONTINUATION_BIT if vlq > 0
result << BASE64_DIGITS[digit]
break unless vlq > 0
end
end
result.join
end
end
end

# FIXME
# Related issues: https://github.com/opal/opal/issues/1074
# https://github.com/opal/opal/issues/1076
class StringScanner
attr_reader :pos
attr_reader :matched

def initialize(string)
@string = string
@pos = 0
@matched = nil
@working = string
@match = []
end

attr_reader :string

def beginning_of_line?
`#@pos === 0 || #@string.charAt(#@pos - 1) === "\n"`
end

alias bol? beginning_of_line?

def scan(pattern)
pattern = anchor(pattern)

%x{
var result = pattern.exec(#@working);
if (result == null) {
return #@matched = nil;
}
else if (typeof(result) === 'object') {
#@prev_pos = #@pos;
#@pos += result[0].length;
#@working = #@working.substring(result[0].length);
#@matched = result[0];
#@match = result;
return result[0];
}
else if (typeof(result) === 'string') {
#@pos += result.length;
#@working = #@working.substring(result.length);
return result;
}
else {
return nil;
}
}
end

def scan_until(pattern)
pattern = anchor(pattern)

%x{
var pos = #@pos,
working = #@working,
result;
while (true) {
result = pattern.exec(working);
pos += 1;
working = working.substr(1);
if (result == null) {
if (working.length === 0) {
return #@matched = nil;
}
continue;
}
#@matched = #@string.substr(#@pos, pos - #@pos - 1 + result[0].length);
#@prev_pos = pos - 1;
#@pos = pos;
#@working = working.substr(result[0].length);
return #@matched;
}
}
end


def [](idx)
%x{
var match = #@match;
if (idx < 0) {
idx += match.length;
}
if (idx < 0 || idx >= match.length) {
return nil;
}
if (match[idx] == null) {
return nil;
}
return match[idx];
}
end

def check(pattern)
pattern = anchor(pattern)

%x{
var result = pattern.exec(#@working);
if (result == null) {
return #@matched = nil;
}
return #@matched = result[0];
}
end

def check_until(pattern)
%x{
var prev_pos = #@prev_pos,
pos = #@pos;
var result = #{scan_until(pattern)};
if (result !== nil) {
#@matched = result.substr(-1);
#@working = #@string.substr(pos);
}
#@prev_pos = prev_pos;
#@pos = pos;
return result;
}
end

def peek(length)
`#@working.substring(0, length)`
end

def eos?
`#@working.length === 0`
end

def exist?(pattern)
%x{
var result = pattern.exec(#@working);
if (result == null) {
return nil;
}
else if (result.index == 0) {
return 0;
}
else {
return result.index + 1;
}
}
end

def skip(pattern)
pattern = anchor(pattern)

%x{
var result = pattern.exec(#@working);
if (result == null) {
return #@matched = nil;
}
else {
var match_str = result[0];
var match_len = match_str.length;
#@matched = match_str;
#@prev_pos = #@pos;
#@pos += match_len;
#@working = #@working.substring(match_len);
return match_len;
}
}
end

def skip_until(pattern)
%x{
var result = #{scan_until(pattern)};
if (result === nil) {
return nil;
}
else {
#@matched = result.substr(-1);
return result.length;
}
}
end

def get_byte
%x{
var result = nil;
if (#@pos < #@string.length) {
#@prev_pos = #@pos;
#@pos += 1;
result = #@matched = #@working.substring(0, 1);
#@working = #@working.substring(1);
}
else {
#@matched = nil;
}
return result;
}
end

# not exactly, but for now...
alias getch get_byte

def match?(pattern)
pattern = anchor(pattern)

%x{
var result = pattern.exec(#@working);
if (result == null) {
return nil;
}
else {
#@prev_pos = #@pos;
return result[0].length;
}
}
end

def pos=(pos)
%x{
if (pos < 0) {
pos += #{@string.length};
}
}

@pos = pos
@working = `#{@string}.slice(pos)`
end

def post_match
%x{
if (#@matched === nil) {
return nil;
}
return #@string.substr(#@pos);
}
end

def pre_match
%x{
if (#@matched === nil) {
return nil;
}
return #@string.substr(0, #@prev_pos);
}
end

def reset
@working = @string
@matched = nil
@pos = 0
end

def rest
@working
end

def rest?
`#@working.length !== 0`
end

def rest_size
rest.size
end

def terminate
@match = nil
self.pos = @string.length
end

def unscan
@pos = @prev_pos
@prev_pos = nil
@match = nil

self
end

private
def anchor(pattern)
`new RegExp('^(?:' + pattern.toString().substr(1, pattern.toString().length - 2) + ')')`
# fixes https://github.com/opal/opal/issues/1400
class Pathname
def cleanpath
`return #@path`
end
end
2 changes: 1 addition & 1 deletion index.es6.js
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ export default function(source) {
var resolved = resolveFilename(this, filename);
if (resolved.match(/\.js$/)) {
prepend.push(`require('${require.resolve('imports-loader')}!${resolved}');`);
prepend.push(`Opal.mark_as_loaded(Opal.normalize_loadable_path('${filename}'));`)
prepend.push(`Opal.mark_as_loaded('${filename}');`)
} else {
prepend.push(`require('!!${currentLoader}?file=${filename}&requirable=true!${resolved}');`);
}
Expand Down
2 changes: 1 addition & 1 deletion index.js
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ exports["default"] = function (source) {
var resolved = resolveFilename(_this, filename);
if (resolved.match(/\.js$/)) {
prepend.push("require('" + require.resolve('imports-loader') + "!" + resolved + "');");
prepend.push("Opal.mark_as_loaded(Opal.normalize_loadable_path('" + filename + "'));");
prepend.push("Opal.mark_as_loaded('" + filename + "');");
} else {
prepend.push("require('!!" + currentLoader + "?file=" + filename + "&requirable=true!" + resolved + "');");
}
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "opalrb-loader",
"version": "0.0.3",
"version": "0.0.4",
"description": "Opal Ruby module loader for webpack",
"main": "index.js",
"scripts": {
Expand Down
Loading