Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Merge remote branch 'origin/master' into mls/kill-events-in-ehqueue

Conflicts:
	src/ops/core_ops.c
  • Loading branch information...
commit 3c927aced47b8ee3e4dad6980aef87c15508d254 2 parents c116c0f + 777824a
@mlschroe mlschroe authored
View
2  CREDITS
@@ -107,7 +107,7 @@ E: yDNA@cpan.org
N: Andrew Whitworth
D: Internals development
D: Documentation
-D: Release manager for 0.8.2, 1.3.0, 1.5.0, 2.4.0, 2.11.0 and 3.3.0
+D: Release manager for 0.8.2, 1.3.0, 1.5.0, 2.4.0, 2.11.0, 3.3.0 and 3.10.0
E: wknight8111@gmail.com
U: Whiteknight
View
12 ChangeLog
@@ -6,11 +6,21 @@
+ A set_random method was added to the Integer PMC, so random numbers can
be generated without needing to load math dynops
+ A new implementation of green threads was added to Parrot, in preparation
- for a robust hybrid threading system
+ for a robust hybrid threading system. Green threads are currently
+ not available on Windows.
- Languages
+ + Winxed
+ - 'multi' modifier improved
+ - throw "string" now emits throw instead of die
+ - several optimizations in generated code
+ - improved some error dianostics
- Community
+ + Parrot Foundation was accepted to Google Code-In 2011. We could always use more volunteers.
+ Task ideas are on the wiki:
+ https://github.com/parrot/parrot/wiki/Google-Code-In-Task-Ideas
- Documentation
- Tests
+ + Added tests for recently-fixed bugs using return :flat and ResizableStringArrays.
2011-10-18 release 3.9.0
- Core
View
4 MANIFEST.generated
@@ -1,11 +1,11 @@
# See tools/dev/install_files.pl for documentation on the
# format of this file.
# Please re-sort this file after *EVERY* modification
-blib/lib/libparrot.3.9.0.dylib [main]lib
+blib/lib/libparrot.3.10.0.dylib [main]lib
blib/lib/libparrot.a [main]lib
blib/lib/libparrot.dylib [main]lib
blib/lib/libparrot.so [main]lib
-blib/lib/libparrot.so.3.9.0 [main]lib
+blib/lib/libparrot.so.3.10.0 [main]lib
compilers/data_json/data_json.pbc [data_json]
config/gen/call_list/opengl.in []
docs/ops/bit.pod [doc]
View
2  README
@@ -1,4 +1,4 @@
-This is Parrot, version 3.9.0
+This is Parrot, version 3.10.0
------------------------------
Parrot is Copyright (C) 2001-2011, Parrot Foundation.
View
2  VERSION
@@ -1 +1 @@
-3.9.0
+3.10.0
View
2  compilers/opsc/src/Ops/Compiler/Actions.pm
@@ -520,7 +520,7 @@ method term:sym<str> ($/) {
method term:sym<float_constant_long> ($/) { # longer to work-around lack of LTM
make PAST::Val.new(
- :value(~$/),
+ :value(~$/[0]),
:returns<float>
);
}
View
25 compilers/opsc/src/Ops/Compiler/Grammar.pm
@@ -183,7 +183,7 @@ token statement {
token label {
[
- | 'case' <.ws> [ <integer> | <identifier> ] ':'
+ | 'case' <.ws> [ <integer> | <identifier> | "'" <alnum> "'" ] ':'
| 'default:'
| <identifier> ':'
]
@@ -198,24 +198,23 @@ rule statement_control:sym<if> {
}
rule statement_control:sym<while> {
- <sym> '(' <condition=.EXPR> ')'
+ <sym> '(' ~ ')' <condition=.EXPR>
<statement_list=.statement_or_block>
}
rule statement_control:sym<for> {
- <sym> '(' <init=.EXPR>? ';' <test=.EXPR>? ';' <step=.EXPR>? ')'
+ <sym> '(' ~ ')' [ <init=.EXPR>? ';' <test=.EXPR>? ';' <step=.EXPR>? ]
<statement_list=.statement_or_block>
}
rule statement_control:sym<do-while> {
- 'do' <blockoid> 'while' '(' <condition=.EXPR> ')'
+ 'do' <blockoid> 'while' '(' ~ ')' <condition=.EXPR>
}
# Not real "C" switch. Just close enough
rule statement_control:sym<switch> {
- <sym> '(' <test=.EXPR> ')' '{'
+ <sym> '(' <test=.EXPR> ')' '{' ~ '}'
<statement_list>
- '}'
}
rule statement_control:sym<break> { <sym> }
@@ -232,16 +231,17 @@ token term:sym<concatenate_strings> { # Long-long name as LTM workaround
}
token term:sym<call> {
- <identifier> <.ws> '(' <arglist> ')'
+ <identifier> <.ws> '(' ~ ')' <arglist>
}
token term:sym<int> { <integer> ('u'|'U'|'l'|'L')* }
token term:sym<str> { <quote> }
token term:sym<float_constant_long> { # longer to work-around lack of LTM
- [
+ (
| \d+ '.' \d*
| \d* '.' \d+
- ]
+ )
+ <[fF]>?
}
token term:sym<reg> {
@@ -350,7 +350,7 @@ token prefix:sym<~> { <sym> <O('%symbolic_unary :pirop<~>')> }
token prefix:sym<return> { <sym> <O('%symbolic_unary :pirop<return>')> }
rule blockoid {
- '{' <mixed_content> '}'
+ '{' ~ '}' <mixed_content>
}
rule mixed_content {
@@ -371,17 +371,18 @@ rule pointer { <star> 'const'? }
token star { '*' }
rule pointerless_type {
- 'struct'? 'const'? <identifier>
+ 'struct'? 'const'? 'unsigned'? <identifier>
}
rule type_declarator {
- 'struct'? 'const'? <identifier> <pointer>*
+ 'struct'? 'const'? 'unsigned'? <identifier> <pointer>*
}
token eat_terminator {
| ';'
| <?MARKED('endstmt')>
| $
+ | <.panic('Statement not properly terminated')>
}
token pod_ws {
View
1  docs/parrothist.pod
@@ -133,5 +133,6 @@ Starred release numbers indicate supported releases.
coke 3.7.0 2011-Aug-16 "Wanda"
soh_cah_toa 3.8.0 2011-Sep-20 "Magrathea"
dukeleto 3.9.0 * 2011-Oct-18 "Archaeopteryx"
+ Whiteknight 3.10.0 2011-Nov-15 "Apple Pi"
=cut
View
1  docs/project/release_manager_guide.pod
@@ -513,7 +513,6 @@ L<http://www.google.com/calendar/render?cid=ldhctdamsgfg5a1cord52po9h8@group.cal
Versions with an asterisk (*) are supported releases:
- - Nov 15, 2011 - 3.10.0 - Whiteknight
- Dec 20, 2011 - 3.11.0 - cotto
- Jan 17, 2012 - 4.0.0 - ??
- Feb 21, 2012 - 4.1.0 - ??
View
24,386 ext/winxed/compiler.pir
9,947 additions, 14,439 deletions not shown
View
204 ext/winxed/driver.pir
@@ -1,7 +1,6 @@
# THIS IS A GENERATED FILE! DO NOT EDIT!
# Begin generated code
-
.sub initial_load_bytecode :anon :load :init
load_bytecode 'Getopt/Obj.pbc'
.end
@@ -11,11 +10,8 @@
.sub 'WinxedDriverOptions' :method
.param pmc __ARG_1
-# Body
-# {
.annotate 'file', 'winxed_installed.winxed'
.annotate 'line', 19
-# var options: $P1
root_new $P1, ['parrot';'ResizablePMCArray']
assign $P1, 12
.annotate 'line', 20
@@ -124,7 +120,6 @@
.annotate 'line', 38
$P4 = self.'get_options'(__ARG_1)
setattribute self, 'opts', $P4
-# }
.annotate 'line', 39
.end # WinxedDriverOptions
@@ -132,17 +127,13 @@
.sub 'getbool' :method
.param string __ARG_1
-# Body
-# {
.annotate 'line', 42
-# var value: $P1
getattribute $P2, self, 'opts'
$P1 = $P2[__ARG_1]
.annotate 'line', 43
isnull $I1, $P1
not $I1
.return($I1)
-# }
.annotate 'line', 44
.end # getbool
@@ -150,14 +141,10 @@
.sub 'getstring' :method
.param string __ARG_1
-# Body
-# {
.annotate 'line', 47
-# var value: $P1
getattribute $P2, self, 'opts'
$P1 = $P2[__ARG_1]
.annotate 'line', 48
-# result: $S1
null $S1
.annotate 'line', 49
if_null $P1, __label_1
@@ -166,32 +153,24 @@
__label_1: # endif
.annotate 'line', 51
.return($S1)
-# }
.annotate 'line', 52
.end # getstring
.sub 'showhelp' :method
-# Body
-# {
.annotate 'line', 55
getattribute $P2, self, 'name'
-# builtin say
print 'Usage: '
print $P2
say ' [options] [program] [args]'
-# builtin say
.annotate 'line', 56
say ' Available options:'
.annotate 'line', 57
-# l: $I1
null $I1
.annotate 'line', 58
-# i: $I2
null $I2
.annotate 'line', 59
-# var o: $P1
null $P1
.annotate 'line', 60
getattribute $P2, self, 'options'
@@ -201,18 +180,15 @@
__label_1: # for iteration
unless $P3 goto __label_2
shift $P1, $P3
-# {
.annotate 'line', 61
$P4 = $P1[0]
set $S2, $P4
-# builtin length
length $I3, $S2
add $I2, $I3, 4
.annotate 'line', 62
le $I2, $I1, __label_3
set $I1, $I2
__label_3: # endif
-# }
goto __label_1
__label_2: # endfor
.annotate 'line', 64
@@ -223,16 +199,12 @@
__label_4: # for iteration
unless $P5 goto __label_5
shift $P1, $P5
-# {
.annotate 'line', 65
-# s: $S1
$S1 = $P1[0]
.annotate 'line', 66
-# builtin length
length $I4, $S1
isgt $I3, $I4, 1
unless $I3 goto __label_8
-# builtin substr
substr $S2, $S1, 1, 1
isne $I3, $S2, '='
__label_8:
@@ -247,22 +219,18 @@
set $S1, $S4
__label_7: # endif
.annotate 'line', 70
-# builtin length
length $I3, $S1
sub $I2, $I1, $I3
.annotate 'line', 71
repeat $S2, ' ', $I2
$P2 = $P1[1]
-# builtin say
print ' '
print $S1
print $S2
print '-> '
say $P2
-# }
goto __label_4
__label_5: # endfor
-# }
.annotate 'line', 73
.end # showhelp
@@ -285,10 +253,7 @@
.param pmc __ARG_1
.param string __ARG_2
.param int __ARG_3
-# Body
-# {
.annotate 'line', 79
-# value: $S1
$P3 = __ARG_1.'getstring'(__ARG_2)
null $S1
if_null $P3, __label_1
@@ -296,20 +261,14 @@
__label_1:
.annotate 'line', 80
if_null $S1, __label_2
-# {
.annotate 'line', 81
-# var lpaths: $P1
-# builtin getinterp
getinterp $P3
$P1 = $P3[9]
.annotate 'line', 82
-# var pathlib: $P2
$P2 = $P1[__ARG_3]
.annotate 'line', 83
$P2.'push'($S1)
-# }
__label_2: # endif
-# }
.annotate 'line', 85
.end # path_option
@@ -318,26 +277,19 @@
.sub 'extname' :subid('WSubId_3') :anon
.param string __ARG_1
.param string __ARG_2
-# Body
-# {
.annotate 'line', 91
-# newname: $S1
null $S1
.annotate 'line', 92
-# l: $I1
-# builtin length
length $I1, __ARG_1
.annotate 'line', 93
isgt $I2, $I1, 7
unless $I2 goto __label_3
-# builtin substr
substr $S2, __ARG_1, -7
iseq $I2, $S2, '.winxed'
__label_3:
unless $I2 goto __label_1
.annotate 'line', 94
sub $I3, $I1, 7
-# builtin substr
substr $S3, __ARG_1, 0, $I3
concat $S4, $S3, __ARG_2
set $S1, $S4
@@ -349,50 +301,36 @@
__label_2: # endif
.annotate 'line', 97
.return($S1)
-# }
.annotate 'line', 98
.end # extname
.sub 'getcompiler' :subid('WSubId_1') :anon
-# Body
-# {
.annotate 'line', 102
-# var compiler: $P1
null $P1
.annotate 'line', 103
-# try: create handler
new $P2, 'ExceptionHandler'
set_label $P2, __label_1
push_eh $P2
-# try: begin
.annotate 'line', 104
-# builtin load_language
load_language 'winxed'
compreg $P1, 'winxed'
-# try: end
pop_eh
goto __label_2
-.annotate 'line', 103
-# catch
__label_1:
+.annotate 'line', 103
.get_results($P3)
finalize $P3
pop_eh
-# catch end
__label_2:
.annotate 'line', 106
unless_null $P1, __label_3
-# {
-# builtin die
.annotate 'line', 114
die "winxed: Cannot load language"
-# }
__label_3: # endif
.annotate 'line', 116
.return($P1)
-# }
.annotate 'line', 117
.end # getcompiler
@@ -403,79 +341,60 @@
.const 'Sub' WSubId_1 = "WSubId_1"
.const 'Sub' WSubId_2 = "WSubId_2"
.const 'Sub' WSubId_3 = "WSubId_3"
-# Body
-# {
.annotate 'line', 121
-# var optionset: $P1
new $P1, [ 'WinxedDriverOptions' ]
$P1.'WinxedDriverOptions'(__ARG_1)
.annotate 'line', 123
$P12 = $P1.'getbool'('version')
if_null $P12, __label_1
unless $P12 goto __label_1
-# {
.annotate 'line', 124
-# var compiler: $P2
$P2 = WSubId_1()
.annotate 'line', 125
$P12 = $P2.'version_string'()
-# builtin say
say $P12
-# builtin exit
.annotate 'line', 126
exit 0
-# }
__label_1: # endif
.annotate 'line', 129
-# help: $I1
$P12 = $P1.'getbool'('help')
set $I1, $P12
.annotate 'line', 130
-# compileonly: $I2
$P12 = $P1.'getbool'('c')
set $I2, $P12
.annotate 'line', 131
-# target: $S1
$P12 = $P1.'getstring'('target')
null $S1
if_null $P12, __label_2
set $S1, $P12
__label_2:
.annotate 'line', 132
-# eval: $S2
$P12 = $P1.'getstring'('e')
null $S2
if_null $P12, __label_3
set $S2, $P12
__label_3:
.annotate 'line', 133
-# objectname: $S3
$P12 = $P1.'getstring'('o')
null $S3
if_null $P12, __label_4
set $S3, $P12
__label_4:
.annotate 'line', 134
-# debug: $I3
$P12 = $P1.'getbool'('debug')
set $I3, $P12
.annotate 'line', 135
-# nowarn: $I4
$P12 = $P1.'getbool'('nowarn')
set $I4, $P12
.annotate 'line', 136
-# noan: $I5
$P12 = $P1.'getbool'('noan')
set $I5, $P12
.annotate 'line', 138
unless $I1 goto __label_5
-# {
.annotate 'line', 139
$P1.'showhelp'()
-# builtin exit
.annotate 'line', 140
exit 0
-# }
__label_5: # endif
.annotate 'line', 143
WSubId_2($P1, 'L', 1)
@@ -484,7 +403,6 @@
.annotate 'line', 145
WSubId_2($P1, 'X', 2)
.annotate 'line', 147
-# var compileoptions: $P3
root_new $P3, ['parrot';'Hash']
.annotate 'line', 148
$P3["debug"] = $I3
@@ -494,35 +412,25 @@
$P3["nowarn"] = $I4
.annotate 'line', 152
unless $I2 goto __label_6
-# {
.annotate 'line', 153
if_null $S1, __label_8
-# builtin die
.annotate 'line', 154
die "options -c and --target can't be used together"
__label_8: # endif
.annotate 'line', 155
$P3["target"] = "pir"
-# }
goto __label_7
__label_6: # else
-# {
.annotate 'line', 158
unless_null $S1, __label_9
.annotate 'line', 159
set $S1, ''
__label_9: # endif
-# switch
.annotate 'line', 160
- set $S7, $S1
- set $S8, ''
- if $S7 == $S8 goto __label_12
- set $S8, 'run'
- if $S7 == $S8 goto __label_13
- set $S8, 'pir'
- if $S7 == $S8 goto __label_14
- set $S8, 'include'
- if $S7 == $S8 goto __label_15
+ if $S1 == '' goto __label_12
+ if $S1 == 'run' goto __label_13
+ if $S1 == 'pir' goto __label_14
+ if $S1 == 'include' goto __label_15
goto __label_11
__label_12: # case
__label_13: # case
@@ -536,12 +444,10 @@
goto __label_10 # break
__label_11: # default
.annotate 'line', 170
- concat $S9, "Invalid target '", $S1
- concat $S9, $S9, "'"
-# builtin die
- die $S9
+ concat $S8, "Invalid target '", $S1
+ concat $S8, $S8, "'"
+ die $S8
__label_10: # switch end
-# }
__label_7: # endif
.annotate 'line', 174
isnull $I8, $S3
@@ -550,47 +456,33 @@
not $I8, $I2
__label_17:
unless $I8 goto __label_16
-# builtin die
.annotate 'line', 175
die '-o without -c or --target is not supported yet'
__label_16: # endif
.annotate 'line', 177
-# var compiler: $P4
$P4 = WSubId_1()
.annotate 'line', 179
-# var code: $P5
null $P5
.annotate 'line', 180
-# outfilename: $S4
null $S4
.annotate 'line', 181
-# try: create handler
new $P12, 'ExceptionHandler'
set_label $P12, __label_18
$P12.'handle_types'(567)
push_eh $P12
-# try: begin
-# {
.annotate 'line', 182
unless_null $S2, __label_20
-# {
.annotate 'line', 183
-# builtin elements
elements $I8, __ARG_1
ge $I8, 1, __label_22
-# {
-# builtin say
.annotate 'line', 184
say "ERROR: No program specified"
.annotate 'line', 185
$P1.'showhelp'()
-# builtin exit
.annotate 'line', 186
exit 1
-# }
__label_22: # endif
.annotate 'line', 188
-# srcfilename: $S5
$S5 = __ARG_1[0]
.annotate 'line', 189
set $I8, $I2
@@ -604,19 +496,14 @@
__label_23: # endif
.annotate 'line', 191
$P5 = $P4.'compile_from_file'($S5, $P3 :flat :named)
-# }
goto __label_21
__label_20: # else
-# {
.annotate 'line', 195
-# var output: $P6
null $P6
.annotate 'line', 196
-# var outfile: $P7
null $P7
.annotate 'line', 197
unless $I2 goto __label_25
-# {
.annotate 'line', 198
unless_null $S4, __label_26
.annotate 'line', 199
@@ -629,26 +516,20 @@
isne $I8, $S4, "-"
__label_29:
unless $I8 goto __label_27
-# {
.annotate 'line', 201
-# builtin open
root_new $P7, ['parrot';'FileHandle']
$P7.'open'($S4,'w')
.annotate 'line', 202
set $P6, $P7
-# }
goto __label_28
__label_27: # else
.annotate 'line', 205
-# builtin getstdout
getstdout $P6
__label_28: # endif
.annotate 'line', 206
$P3['output'] = $P6
-# }
__label_25: # endif
.annotate 'line', 208
-# expr: $S6
concat $S7, 'function main[main](argv){', $S2
concat $S7, $S7, ';}'
set $S6, $S7
@@ -656,36 +537,27 @@
$P5 = $P4.'compile'($S6, $P3 :flat :named)
.annotate 'line', 211
unless $I2 goto __label_30
-# {
.annotate 'line', 212
if_null $P7, __label_32
.annotate 'line', 213
$P7.'close'()
__label_32: # endif
-# builtin exit
.annotate 'line', 214
exit 0
-# }
goto __label_31
__label_30: # else
.annotate 'line', 217
__ARG_1.'unshift'('__EVAL__')
__label_31: # endif
-# }
__label_21: # endif
-# }
-# try: end
pop_eh
goto __label_19
-.annotate 'line', 181
-# catch
__label_18:
+.annotate 'line', 181
.get_results($P8)
finalize $P8
pop_eh
-# {
.annotate 'line', 221
-# var payload: $P9
$P9 = $P8["payload"]
.annotate 'line', 222
if_null $P9, __label_33
@@ -693,7 +565,6 @@
getattribute $P12, $P9, 'filename'
getattribute $P13, $P9, 'line'
getattribute $P14, $P9, 'message'
-# builtin cry
getstderr $P0
print $P0, $P12
print $P0, ':'
@@ -701,45 +572,38 @@
print $P0, ': '
print $P0, $P14
print $P0, "\n"
+
goto __label_34
__label_33: # else
.annotate 'line', 225
$P15 = $P8["message"]
-# builtin cry
getstderr $P0
print $P0, $P15
print $P0, "\n"
+
__label_34: # endif
-# builtin exit
.annotate 'line', 226
exit 1
-# }
-# catch end
__label_19:
.annotate 'line', 229
unless $I2 goto __label_35
-# {
.annotate 'line', 230
unless_null $S4, __label_36
.annotate 'line', 231
set $S4, $S3
__label_36: # endif
.annotate 'line', 232
-# create: $I6
isnull $I6, $S4
not $I6
unless $I6 goto __label_37
isne $I6, $S4, "-"
__label_37:
.annotate 'line', 233
-# var outfile: $P10
unless $I6 goto __label_39
-# builtin open
root_new $P10, ['parrot';'FileHandle']
$P10.'open'($S4,'w')
goto __label_38
__label_39:
-# builtin getstdout
getstdout $P12
set $P10, $P12
__label_38:
@@ -750,40 +614,27 @@
.annotate 'line', 236
$P10.'close'()
__label_40: # endif
-# builtin exit
.annotate 'line', 237
exit 0
-# }
__label_35: # endif
.annotate 'line', 242
-# var sub: $P11
null $P11
.annotate 'line', 243
-# try: create handler
new $P12, 'ExceptionHandler'
set_label $P12, __label_41
push_eh $P12
-# try: begin
-# {
.annotate 'line', 244
$P11 = $P5.'get_main'()
-# }
-# try: end
pop_eh
goto __label_42
-.annotate 'line', 243
-# catch
__label_41:
+.annotate 'line', 243
.get_results($P13)
finalize $P13
pop_eh
-# {
-# for loop
.annotate 'line', 247
-# i: $I7
null $I7
__label_45: # for condition
-# {
.annotate 'line', 248
$P11 = $P5[$I7]
.annotate 'line', 249
@@ -791,13 +642,10 @@
goto __label_44 # break
__label_46: # endif
.annotate 'line', 251
-# builtin string
set $S7, $P11
ne $S7, 'main', __label_47
goto __label_44 # break
__label_47: # endif
-.annotate 'line', 252
-# }
__label_43: # for iteration
.annotate 'line', 247
inc $I7
@@ -808,12 +656,9 @@
.annotate 'line', 256
$P11 = $P5[0]
__label_48: # endif
-# }
-# catch end
__label_42:
.annotate 'line', 258
.return($P11)
-# }
.annotate 'line', 259
.end # process_args
@@ -822,47 +667,30 @@
.sub 'main' :main
.param pmc __ARG_1
.const 'Sub' WSubId_4 = "WSubId_4"
-# Body
-# {
.annotate 'line', 263
-# var mainsub: $P1
$P1 = WSubId_4(__ARG_1)
-.annotate 'line', 264
- isnull $I2, $P1
- not $I2
-# builtin __ASSERT__
.annotate 'line', 266
-# retval: $I1
null $I1
.annotate 'line', 267
-# try: create handler
new $P4, 'ExceptionHandler'
set_label $P4, __label_1
$P4.'handle_types_except'(64)
push_eh $P4
-# try: begin
-# {
.annotate 'line', 268
-# var retvalp: $P2
$P2 = $P1(__ARG_1)
.annotate 'line', 269
if_null $P2, __label_3
.annotate 'line', 270
set $I1, $P2
__label_3: # endif
-# }
-# try: end
pop_eh
goto __label_2
-.annotate 'line', 267
-# catch
__label_1:
+.annotate 'line', 267
.get_results($P3)
finalize $P3
pop_eh
-# {
.annotate 'line', 273
-# msg: $S1
$S1 = $P3['message']
.annotate 'line', 274
isnull $I2, $S1
@@ -872,20 +700,16 @@
__label_5:
unless $I2 goto __label_4
.annotate 'line', 275
-# builtin cry
getstderr $P0
print $P0, $S1
print $P0, "\n"
+
__label_4: # endif
.annotate 'line', 276
set $I1, 1
-# }
-# catch end
__label_2:
.annotate 'line', 278
-# builtin exit
exit $I1
-# }
.annotate 'line', 279
.end # main
View
4 frontend/pbc_dump/packdump.c
@@ -22,6 +22,10 @@ This is only used by the PBC dumper C<pbc_dump>.
#include "parrot/parrot.h"
#include "pmc/pmc_sub.h"
#include "pmc/pmc_key.h"
+#ifdef WIN32
+PMC *PMCNULL;
+#endif
+
/* HEADERIZER HFILE: include/parrot/packfile.h */
View
2  include/parrot/oplib/core_ops.h
@@ -19,7 +19,7 @@
#include "parrot/runcore_api.h"
PARROT_EXPORT
-op_lib_t *Parrot_DynOp_core_3_9_0(PARROT_INTERP, long init);
+op_lib_t *Parrot_DynOp_core_3_10_0(PARROT_INTERP, long init);
opcode_t * Parrot_end(opcode_t *, PARROT_INTERP);
opcode_t * Parrot_noop(opcode_t *, PARROT_INTERP);
View
18 include/parrot/pmc.h
@@ -273,24 +273,6 @@ INTVAL Parrot_pmc_type_does(PARROT_INTERP,
/* Don't modify between HEADERIZER BEGIN / HEADERIZER END. Your changes will be lost. */
/* HEADERIZER END: src/pmc.c */
-/* Allows compatibility with old name (see r44190) */
-#define Parrot_create_mro Parrot_pmc_create_mro
-#define PMC_is_null Parrot_pmc_is_null
-#define constant_pmc_new Parrot_pmc_new_constant
-#define constant_pmc_new_init Parrot_pmc_new_constant_init
-#define gc_register_pmc Parrot_pmc_gc_register
-#define gc_unregister_pmc Parrot_pmc_gc_unregister
-#define pmc_new Parrot_pmc_new
-#define pmc_new_init Parrot_pmc_new_init
-#define pmc_new_noinit Parrot_pmc_new_noinit
-#define pmc_register Parrot_pmc_register_new_type
-#define pmc_reuse Parrot_pmc_reuse
-#define pmc_reuse_by_class Parrot_pmc_reuse_by_class
-#define pmc_reuse_init Parrot_pmc_reuse_init
-#define pmc_reuse_no_init Parrot_pmc_reuse_noinit
-#define pmc_type Parrot_pmc_get_type_str
-#define pmc_type_p Parrot_pmc_get_type
-
#define PMC_IS_TYPE(p, t) ((p)->vtable->base_type == enum_class_ ## t)
#define PMC_IS_TYPE_ENUM(p, e) ((p)->vtable->base_type == (e))
View
9 runtime/parrot/library/Test/Builder.pir
@@ -296,7 +296,7 @@ declared a plan or if you pass an invalid argument.
.local int num_tests
num_tests = tests
- unless num_tests goto write_header
+ unless num_tests goto bail_out
testplan.'set_tests'( num_tests )
@@ -309,6 +309,13 @@ declared a plan or if you pass an invalid argument.
output.'write'( header )
.return()
+
+ bail_out:
+ .local pmc plan_exception
+ plan_exception = new 'Exception'
+ plan_exception = 'You said to run 0 tests'
+ throw plan_exception
+
.end
=item done_testing
View
2  src/call/args.c
@@ -1277,7 +1277,7 @@ assign_default_param_value(PARROT_INTERP, INTVAL param_index, INTVAL param_flags
*accessor->numval(interp, arg_info, param_index) = 0.0;
break;
case PARROT_ARG_STRING:
- *accessor->string(interp, arg_info, param_index) = NULL;
+ *accessor->string(interp, arg_info, param_index) = STRINGNULL;
break;
case PARROT_ARG_PMC:
*accessor->pmc(interp, arg_info, param_index) = PMCNULL;
View
2  src/call/pcc.c
@@ -317,7 +317,7 @@ Parrot_pcc_invoke_from_sig_object(PARROT_INTERP, ARGIN(PMC *sub_obj),
ASSERT_ARGS(Parrot_pcc_invoke_from_sig_object)
opcode_t *dest;
- PMC * const ret_cont = pmc_new(interp, enum_class_Continuation);
+ PMC * const ret_cont = Parrot_pmc_new(interp, enum_class_Continuation);
if (PMC_IS_NULL(call_object))
call_object = Parrot_pmc_new(interp, enum_class_CallContext);
View
16 src/dynpmc/select.pmc
@@ -83,7 +83,7 @@ Initializes the PMC.
*/
VTABLE void init() {
- PMC * const fd_map = pmc_new(interp, enum_class_Hash);
+ PMC * const fd_map = Parrot_pmc_new(interp, enum_class_Hash);
VTABLE_set_integer_native(INTERP, fd_map, Hash_key_type_int);
SET_ATTR_fd_map(INTERP, SELF, fd_map);
SET_ATTR_max_fd(INTERP, SELF, -1);
@@ -239,7 +239,7 @@ read before returning.
GET_ATTR_max_fd(INTERP, SELF, maxid);
timeouts.tv_sec = sec;
timeouts.tv_usec = usec;
- results = pmc_new(interp, enum_class_ResizablePMCArray);
+ results = Parrot_pmc_new(interp, enum_class_ResizablePMCArray);
memcpy(&rdset, &PARROT_SELECT(SELF)->rb_array, sizeof (fd_set));
select(maxid + 1, &rdset, NULL, NULL, &timeouts);
@@ -278,7 +278,7 @@ write to before returning.
GET_ATTR_max_fd(INTERP, SELF, maxid);
timeouts.tv_sec = sec;
timeouts.tv_usec = usec;
- results = pmc_new(interp, enum_class_ResizablePMCArray);
+ results = Parrot_pmc_new(interp, enum_class_ResizablePMCArray);
memcpy(&wbset, &PARROT_SELECT(SELF)->wb_array, sizeof (fd_set));
select(maxid + 1, NULL, &wbset, NULL, &timeouts);
@@ -317,7 +317,7 @@ exception state before returning.
GET_ATTR_max_fd(INTERP, SELF, maxid);
timeouts.tv_sec = sec;
timeouts.tv_usec = usec;
- results = pmc_new(interp, enum_class_ResizablePMCArray);
+ results = Parrot_pmc_new(interp, enum_class_ResizablePMCArray);
memcpy(&ebset, &PARROT_SELECT(SELF)->eb_array, sizeof (fd_set));
select(maxid + 1, NULL, NULL, &ebset, &timeouts);
@@ -359,10 +359,10 @@ handled.
GET_ATTR_max_fd(INTERP, SELF, maxid);
timeouts.tv_sec = sec;
timeouts.tv_usec = usec;
- results = pmc_new(interp, enum_class_ResizablePMCArray);
- rresults = pmc_new(interp, enum_class_ResizablePMCArray);
- wresults = pmc_new(interp, enum_class_ResizablePMCArray);
- eresults = pmc_new(interp, enum_class_ResizablePMCArray);
+ results = Parrot_pmc_new(interp, enum_class_ResizablePMCArray);
+ rresults = Parrot_pmc_new(interp, enum_class_ResizablePMCArray);
+ wresults = Parrot_pmc_new(interp, enum_class_ResizablePMCArray);
+ eresults = Parrot_pmc_new(interp, enum_class_ResizablePMCArray);
memcpy(&rdset, &PARROT_SELECT(SELF)->rb_array, sizeof (fd_set));
memcpy(&wrset, &PARROT_SELECT(SELF)->wb_array, sizeof (fd_set));
memcpy(&erset, &PARROT_SELECT(SELF)->eb_array, sizeof (fd_set));
View
10 src/ops/core.ops
@@ -742,7 +742,7 @@ inline op throw(invar PMC) :flow {
PMC * except = $1;
opcode_t *dest;
opcode_t * const ret = expr NEXT();
- PMC * const resume = pmc_new(interp, enum_class_Continuation);
+ PMC * const resume = Parrot_pmc_new(interp, enum_class_Continuation);
STRING * const exception_str = Parrot_str_new_constant(interp, "Exception");
VTABLE_set_pointer(interp, resume, ret);
@@ -795,7 +795,7 @@ inline op count_eh(out INT) {
inline op die(in STR) :flow {
opcode_t *dest;
opcode_t * const ret = expr NEXT();
- PMC * const resume = pmc_new(interp, enum_class_Continuation);
+ PMC * const resume = Parrot_pmc_new(interp, enum_class_Continuation);
PMC * const exception = Parrot_ex_build_exception(interp, EXCEPT_error,
EXCEPTION_DIE, $1);
@@ -810,7 +810,7 @@ inline op die(in STR) :flow {
inline op die(in PMC) :flow {
opcode_t *dest;
opcode_t * const ret = expr NEXT();
- PMC * const resume = pmc_new(interp, enum_class_Continuation);
+ PMC * const resume = Parrot_pmc_new(interp, enum_class_Continuation);
STRING * const msg = PMC_IS_NULL($1) ? NULL : VTABLE_get_string(interp, $1);
PMC * const exception =
Parrot_ex_build_exception(interp, EXCEPT_error, EXCEPTION_DIE, msg);
@@ -829,7 +829,7 @@ inline op die(in INT, in INT) :flow {
else {
opcode_t *dest;
opcode_t * const ret = expr NEXT();
- PMC * const resume = pmc_new(interp, enum_class_Continuation);
+ PMC * const resume = Parrot_pmc_new(interp, enum_class_Continuation);
PMC * const exception = Parrot_ex_build_exception(interp, $1, $2, NULL);
VTABLE_set_pointer(interp, resume, ret);
@@ -844,7 +844,7 @@ inline op die(in INT, in INT) :flow {
inline op exit(in INT) :flow {
opcode_t *dest;
opcode_t * const ret = expr NEXT();
- PMC * const resume = pmc_new(interp, enum_class_Continuation);
+ PMC * const resume = Parrot_pmc_new(interp, enum_class_Continuation);
PMC * const exception = Parrot_ex_build_exception(interp, EXCEPT_exit,
CONTROL_EXIT, NULL);
View
28 src/ops/core_ops.c
@@ -13751,7 +13751,7 @@ Parrot_throw_p(opcode_t *cur_opcode, PARROT_INTERP) {
PMC * except = PREG(1);
opcode_t * dest;
opcode_t * const ret = cur_opcode + 2;
- PMC * const resume = pmc_new(interp, enum_class_Continuation);
+ PMC * const resume = Parrot_pmc_new(interp, enum_class_Continuation);
STRING * const exception_str = Parrot_str_new_constant(interp, "Exception");
VTABLE_set_pointer(interp, resume, ret);
@@ -13806,7 +13806,7 @@ opcode_t *
Parrot_die_s(opcode_t *cur_opcode, PARROT_INTERP) {
opcode_t * dest;
opcode_t * const ret = cur_opcode + 2;
- PMC * const resume = pmc_new(interp, enum_class_Continuation);
+ PMC * const resume = Parrot_pmc_new(interp, enum_class_Continuation);
PMC * const exception = Parrot_ex_build_exception(interp, EXCEPT_error, EXCEPTION_DIE, SREG(1));
VTABLE_set_pointer(interp, resume, ret);
@@ -13819,7 +13819,7 @@ opcode_t *
Parrot_die_sc(opcode_t *cur_opcode, PARROT_INTERP) {
opcode_t * dest;
opcode_t * const ret = cur_opcode + 2;
- PMC * const resume = pmc_new(interp, enum_class_Continuation);
+ PMC * const resume = Parrot_pmc_new(interp, enum_class_Continuation);
PMC * const exception = Parrot_ex_build_exception(interp, EXCEPT_error, EXCEPTION_DIE, SCONST(1));
VTABLE_set_pointer(interp, resume, ret);
@@ -13832,7 +13832,7 @@ opcode_t *
Parrot_die_p(opcode_t *cur_opcode, PARROT_INTERP) {
opcode_t * dest;
opcode_t * const ret = cur_opcode + 2;
- PMC * const resume = pmc_new(interp, enum_class_Continuation);
+ PMC * const resume = Parrot_pmc_new(interp, enum_class_Continuation);
STRING * const msg = PMC_IS_NULL(PREG(1)) ? NULL : VTABLE_get_string(interp, PREG(1));
PMC * const exception = Parrot_ex_build_exception(interp, EXCEPT_error, EXCEPTION_DIE, msg);
@@ -13846,7 +13846,7 @@ opcode_t *
Parrot_die_pc(opcode_t *cur_opcode, PARROT_INTERP) {
opcode_t * dest;
opcode_t * const ret = cur_opcode + 2;
- PMC * const resume = pmc_new(interp, enum_class_Continuation);
+ PMC * const resume = Parrot_pmc_new(interp, enum_class_Continuation);
STRING * const msg = PMC_IS_NULL(PCONST(1)) ? NULL : VTABLE_get_string(interp, PCONST(1));
PMC * const exception = Parrot_ex_build_exception(interp, EXCEPT_error, EXCEPTION_DIE, msg);
@@ -13864,7 +13864,7 @@ Parrot_die_i_i(opcode_t *cur_opcode, PARROT_INTERP) {
else {
opcode_t * dest;
opcode_t * const ret = cur_opcode + 3;
- PMC * const resume = pmc_new(interp, enum_class_Continuation);
+ PMC * const resume = Parrot_pmc_new(interp, enum_class_Continuation);
PMC * const exception = Parrot_ex_build_exception(interp, IREG(1), IREG(2), NULL);
VTABLE_set_pointer(interp, resume, ret);
@@ -13883,7 +13883,7 @@ Parrot_die_ic_i(opcode_t *cur_opcode, PARROT_INTERP) {
else {
opcode_t * dest;
opcode_t * const ret = cur_opcode + 3;
- PMC * const resume = pmc_new(interp, enum_class_Continuation);
+ PMC * const resume = Parrot_pmc_new(interp, enum_class_Continuation);
PMC * const exception = Parrot_ex_build_exception(interp, ICONST(1), IREG(2), NULL);
VTABLE_set_pointer(interp, resume, ret);
@@ -13902,7 +13902,7 @@ Parrot_die_i_ic(opcode_t *cur_opcode, PARROT_INTERP) {
else {
opcode_t * dest;
opcode_t * const ret = cur_opcode + 3;
- PMC * const resume = pmc_new(interp, enum_class_Continuation);
+ PMC * const resume = Parrot_pmc_new(interp, enum_class_Continuation);
PMC * const exception = Parrot_ex_build_exception(interp, IREG(1), ICONST(2), NULL);
VTABLE_set_pointer(interp, resume, ret);
@@ -13921,7 +13921,7 @@ Parrot_die_ic_ic(opcode_t *cur_opcode, PARROT_INTERP) {
else {
opcode_t * dest;
opcode_t * const ret = cur_opcode + 3;
- PMC * const resume = pmc_new(interp, enum_class_Continuation);
+ PMC * const resume = Parrot_pmc_new(interp, enum_class_Continuation);
PMC * const exception = Parrot_ex_build_exception(interp, ICONST(1), ICONST(2), NULL);
VTABLE_set_pointer(interp, resume, ret);
@@ -13936,7 +13936,7 @@ opcode_t *
Parrot_exit_i(opcode_t *cur_opcode, PARROT_INTERP) {
opcode_t * dest;
opcode_t * const ret = cur_opcode + 2;
- PMC * const resume = pmc_new(interp, enum_class_Continuation);
+ PMC * const resume = Parrot_pmc_new(interp, enum_class_Continuation);
PMC * const exception = Parrot_ex_build_exception(interp, EXCEPT_exit, CONTROL_EXIT, NULL);
VTABLE_set_pointer(interp, resume, ret);
@@ -13950,7 +13950,7 @@ opcode_t *
Parrot_exit_ic(opcode_t *cur_opcode, PARROT_INTERP) {
opcode_t * dest;
opcode_t * const ret = cur_opcode + 2;
- PMC * const resume = pmc_new(interp, enum_class_Continuation);
+ PMC * const resume = Parrot_pmc_new(interp, enum_class_Continuation);
PMC * const exception = Parrot_ex_build_exception(interp, EXCEPT_exit, CONTROL_EXIT, NULL);
VTABLE_set_pointer(interp, resume, ret);
@@ -23994,7 +23994,7 @@ op_lib_t core_op_lib = {
PARROT_FUNCTION_CORE, /* core_type = PARROT_XX_CORE */
0, /* flags */
3, /* major_version */
- 9, /* minor_version */
+ 10, /* minor_version */
0, /* patch_version */
1099, /* op_count */
core_op_info_table, /* op_info_table */
@@ -24122,7 +24122,7 @@ static void hop_deinit(PARROT_INTERP)
hop_buckets = NULL;
}PARROT_EXPORT
op_lib_t *
-Parrot_DynOp_core_3_9_0(PARROT_INTERP, long init) {
+Parrot_DynOp_core_3_10_0(PARROT_INTERP, long init) {
/* initialize and return op_lib ptr */
if (init == 1) {
@@ -24151,7 +24151,7 @@ Parrot_lib_core_ops_load(PARROT_INTERP)
{
PMC *const lib = Parrot_pmc_new(interp, enum_class_ParrotLibrary);
- ((Parrot_ParrotLibrary_attributes*)PMC_data(lib))->oplib_init = (void *) Parrot_DynOp_core_3_9_0;
+ ((Parrot_ParrotLibrary_attributes*)PMC_data(lib))->oplib_init = (void *) Parrot_DynOp_core_3_10_0;
dynop_register(interp, lib);
return lib;
}
View
8 src/pmc/callcontext.pmc
@@ -327,7 +327,7 @@ autobox_string(PARROT_INTERP, ARGIN(const Pcc_cell *cell))
}
/* exception */
- return NULL;
+ return STRINGNULL;
}
/*
@@ -1173,7 +1173,7 @@ return current Namespace
GET_ATTR_num_positionals(INTERP, SELF, num_pos);
if (key >= num_pos || key < 0)
- return NULL;
+ return STRINGNULL;
GET_ATTR_positionals(INTERP, SELF, cells);
return autobox_string(INTERP, &cells[key]);
@@ -1397,7 +1397,7 @@ return current Namespace
return autobox_string(INTERP, cell);
}
- return NULL;
+ return STRINGNULL;
}
VTABLE PMC * get_pmc_keyed_str(STRING *key) {
@@ -1464,7 +1464,7 @@ return current Namespace
return autobox_string(INTERP, cell);
}
- return NULL;
+ return STRINGNULL;
}
VTABLE PMC * get_pmc_keyed(PMC *key) {
View
2  src/pmc/coroutine.pmc
@@ -177,7 +177,7 @@ Swaps the "context".
PMC *ccont = INTERP->current_cont;
if (ccont == NEED_CONTINUATION) {
- ccont = pmc_new(INTERP, enum_class_Continuation);
+ ccont = Parrot_pmc_new(INTERP, enum_class_Continuation);
VTABLE_set_pointer(INTERP, ccont, next_op);
}
View
2  src/pmc/sub.pmc
@@ -415,7 +415,7 @@ Invokes the subroutine.
INTERP->current_cont = NULL;
if (ccont == NEED_CONTINUATION) {
- ccont = pmc_new(INTERP, enum_class_Continuation);
+ ccont = Parrot_pmc_new(INTERP, enum_class_Continuation);
VTABLE_set_pointer(INTERP, ccont, next);
}
View
2  src/pmc/task.pmc
@@ -149,9 +149,11 @@ code as the first argument.
/* If a task is pre-empted, this will be set again. */
TASK_in_preempt_CLEAR(SELF);
+#ifndef WIN32
if (setjmp(task->abort_jump)) {
/* do nothing, we're back where we want to be */
}
+#endif
if (!(task->killed || PMC_IS_NULL(task->code))) {
/* Add the task to the set of active Tasks */
View
5 t/fullharness
@@ -99,7 +99,10 @@ else {
# rewrite environment
&{$set->{rule}} if defined $set->{rule};
print STDERR "$set->{label}: running with: $ENV{TEST_PROG_ARGS}\n";
- my $harness = TAP::Harness->new( { formatter => $formatter } );
+ my $harness = TAP::Harness->new( {
+ formatter => $formatter,
+ jobs => $ENV{TEST_JOBS} || 1,
+ } );
$harness->aggregate_tests($aggregator, @{$set->{tests}});
}
$aggregator->stop();
View
26 t/op/calling.t
@@ -1,12 +1,12 @@
#!perl
-# Copyright (C) 2001-2009, Parrot Foundation.
+# Copyright (C) 2001-2011, Parrot Foundation.
use strict;
use warnings;
use lib qw( . lib ../lib ../../lib );
use Test::More;
-use Parrot::Test tests => 103;
+use Parrot::Test tests => 104;
=head1 NAME
@@ -257,6 +257,28 @@ ok 3
back
OUTPUT
+pir_error_output_like( <<'CODE', qr/Invalid operation on null string/, "return :flat" );
+.sub main :main
+ .local string s, r
+ .local pmc arr
+
+ say "get"
+ s = s_get()
+ r = substr s, 0, 1
+ print "'"
+ print r
+ print "'"
+ say " done"
+.end
+
+.sub s_get
+ .local pmc arr
+ arr = new ["ResizableStringArray"]
+ # push arr, "xy"
+ .return(arr :flat )
+.end
+CODE
+
pir_output_is( <<'CODE', <<'OUTPUT', "use it in PIR" );
.sub main :main
$P0 = new 'String'
View
15 t/pmc/alarm.t
@@ -1,12 +1,22 @@
#!./parrot
-# Copyright (C) 2010, Parrot Foundation.
-# $Id$
+# Copyright (C) 2010-2011, Parrot Foundation.
.include 'timer.pasm'
+.include 'sysinfo.pasm'
+.loadlib 'sys_ops'
.sub main
.include 'test_more.pir'
+ $S0 = sysinfo .SYSINFO_PARROT_OS
+ if $S0 == 'MSWin32' goto run_win32_tests
+ goto run_unix_tests
+ run_win32_tests:
+ say "1..1"
+ say "ok 1 - All tests skipped on Win32"
+ goto all_tests_end
+ run_unix_tests:
+
plan(7)
$P0 = new 'Integer'
@@ -63,6 +73,7 @@ good:
sleep 5.0
ok(0, "Alarm/sleep interaction")
+ all_tests_end:
.end
.sub make_alarm
View
15 t/pmc/task.t
@@ -1,10 +1,21 @@
#!./parrot
-# Copyright (C) 2010, Parrot Foundation.
-# $Id$
+# Copyright (C) 2010-2011, Parrot Foundation.
+
+.include 'sysinfo.pasm'
+.loadlib 'sys_ops'
.sub main
.include 'test_more.pir'
+ $S0 = sysinfo .SYSINFO_PARROT_OS
+ if $S0 == 'MSWin32' goto run_win32_tests
+ goto run_unix_tests
+ run_win32_tests:
+ say "1..1"
+ say "ok 1 - All tests skipped on Win32"
+ exit 0
+ run_unix_tests:
+
plan(10)
tasks_run_in_order()
View
14 t/pmc/task_primes.t
@@ -1,6 +1,5 @@
#!./parrot
-# Copyright (C) 2010, Parrot Foundation.
-# $Id$
+# Copyright (C) 2010-2011, Parrot Foundation.
=head1 task_primes.t
@@ -10,11 +9,22 @@ is now a Parrot test.
=cut
.include 'interpinfo.pasm'
+.include 'sysinfo.pasm'
+.loadlib 'sys_ops'
.sub main
.include 'test_more.pir'
.local pmc nt, tt
+ $S0 = sysinfo .SYSINFO_PARROT_OS
+ if $S0 == 'MSWin32' goto run_win32_tests
+ goto run_unix_tests
+ run_win32_tests:
+ say "1..1"
+ say "ok 1 - All tests skipped on Win32"
+ exit 0
+ run_unix_tests:
+
$P0 = get_global 'test_sub'
tt = new 'Task', $P0
schedule tt
View
14 tools/release/release.json
@@ -1,9 +1,9 @@
{
- "release.version" : "3.9.0",
- "release.name" : "Archaeopteryx",
+ "release.version" : "3.10.0",
+ "release.name" : "Apple Pi",
"release.day" : "Tuesday",
- "release.date" : "18 October 2011",
- "release.nextdate" : "15 November 2011",
+ "release.date" : "15 November 2011",
+ "release.nextdate" : "20 December 2011",
"web.root" : "http://parrot.org/",
"web.source" : "download",
@@ -12,10 +12,10 @@
"web.org_root" : "https://github.com/parrot",
"bugday.day" : "Saturday",
- "bugday.date" : "15 October 2011",
+ "bugday.date" : "17 December 2011",
"wiki.root" : "https://github.com/parrot/parrot/wiki",
- "wiki.bugday" : "bug_day_2011_10_15",
+ "wiki.bugday" : "bug_day_2011_12_17",
- "ftp.path" : "ftp://ftp.parrot.org/pub/parrot/releases/supported/3.9.0/"
+ "ftp.path" : "ftp://ftp.parrot.org/pub/parrot/releases/devel/3.10.0/"
}
Please sign in to comment.
Something went wrong with that request. Please try again.